a = readmatrix("https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1260515/a_110247.csv");
b = readmatrix("https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1260520/b_114558.csv");
c = readmatrix("https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1260525/c_114818.csv");
d = readmatrix("https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1260530/d_115603.csv");
writematrix(a,"a_110247.csv");
writematrix(b,"b_114558.csv");
writematrix(c,"c_114818.csv");
writematrix(d,"d_115603.csv"); % ここまでは気にしないでください。データをローカルにコピーしてます。
>1:関数timetableでよろしいでしょうか。
> その場合具体的にどのようにcode作成すればよろしいでしょうか。
下記にcodeを追記しました。データ長が1024列あったので1000列に揃えました。timetable変換の際、Yを行ベクトル⇒列ベクトルに転置する必要があります。Yに’(アポストロフィ)を付けたのはその為です。時刻情報の文字列を抜き出す為に regexp 関数を使いました。時刻情報を扱う為に duration 関数を、timetableを扱う為に array2timetable 関数を使いました。
2:そもそもcsvデータに「生体信号が得られた時間」が組み込まれていないのでしょうか。おそらく入っているはずと認識しているのですが、調べる方法はあるのでしょうか。
⇒わかりません。それは、そのcsvデータをどの様な方法で取得しているのかを知らない限り答えようがありませんよ。とりあえず、ファイル名に含まれる6桁の数字を「生体信号が得られた時刻」とし、1[ms]刻みで1秒間分のデータとして扱いました。
files = dir("*.csv");
X = [];
tind = [];
for ii = 1:length(files)
tmp = readmatrix(files(ii).name);
TMP = tmp.*1e6;
X = [X,TMP(:,1:1000)]; % 生体信号は1024列ある⇒1000列までにする(1001列~1024列の値は0)
t = regexp(files(ii).name,'\d{2}','match'); % ファイル名から数字6桁を抜き出す
dura = duration(str2num(t{1}),str2num(t{2}),str2num(t{3}),0:999); % 1ms刻みで1秒分(1000列)
tind = [tind,dura]; % 時刻情報も生体信号と同様につなげていく
end
Y = X(1,:); % ここはforループの外に出すべき
%Fs = 1000; tind = [1:length(Y)]/Fs;
TT = array2timetable(Y','RowTimes',tind,'VariableNames',{'biosignal'}) % timetable作成
figure(1); plot(TT,'biosignal'); % 従来通りplot(tind,Y);でもプロット可