①peak2peakの使い方がおかしいでしょうか⇒おそらくYES
peak2peak関数を意図しない形で使っていると予想します。
CSVファイルはN行M列(Nは測定チャネル数、Mはサンプリング数)で、各CSVファイルの最初の1ch分だけプロットしていると想定します。plot(A(1,:),color)がその根拠です。
その場合、peak2peak関数に入力する行列を意図する向きに転置するか、dim — 動作する対象の次元を意図する方向に合わせる必要があります。dim — 動作する対象の次元を省略した場合、ベクトルの場合は自動認識してくれますが、行列の場合は自動認識してくれません。下記の事例で、peak2peak関数に何を入力すれば意図した結果が得られるか解ると思います。
A = sin(2*pi*[0.1;0.2]*(0:0.1:100)) % サンプルデータ:2行40列のベクトル。各行のp-p値を得たい
peak2peak(A') % 転置して入力(各列のp-p値を得たい)⇒意図した結果になる
peak2peak(A) % 意図しない結果(各列のp-p値が得られてしまう)
peak2peak(A,2) % dimで演算方向を指定⇒意図した結果になる
peak2peak(A(1,:)) % 初めからベクトルデータに絞る⇒dimを指定しなくても自動認識により意図した結果になる
②また、X軸0ms~300msの範囲内でなどと、X軸の範囲を指定する条件を追加することなどは可能でしょうか。
start = 1; % 1は適当な値。ここに0[ms]のインデックス値を入力する必要がある
stop = 2; % 1は適当な値。ここに300[ms]のインデックス値を入力する必要がある
if peak2peak(A(1,start:stop)) < 100
%省略
end
(追記)
「peak2peak関数の出力が意図しないサイズならば、その後の処理でエラーが出るのでは」と考えるのが自然ですが、MATLABの持つ柔軟さが故にそうはなりません。具体的に言うと:下記の箇所で、peak2peak関数の出力はスカラではないと想定しますが、
if peak2peak(A) < 100
その場合、if文にも複数の値が渡され、全条件が真で揃わないと真判定になりません。
[0 100 200] < 100
if [0 100 200] < 100 % if文は全条件が真で揃わないと真にならない
disp('真')
else
disp('偽')
end
if [1 2 3] < 100 % if文は全条件が真で揃わないと真にならない
disp('真')
else
disp('偽')
end
これがエラーを出さず、かつ意図しない結果の原因が見えない現象です。