波の性質を持つデータ列のピークからピークまでのデータ点数をカウントしたい
3 次查看(过去 30 天)
显示 更早的评论
采纳的回答
OH
2021-3-12
findpeaks()で一発です。
arr = load('data.mat');%data読み込み
[~,col] = findpeaks(arr);
T = col(2)-col(1);
ーおまけー
急ぎならこれで良いのですが、なんだか面白みに欠けます。
そこで、やり方というか発想について書きます。"今回の波形のみ"に対応してます。
for文で配列を精査していきます。
今回は波形が減少スタートなので谷を探します。
1つ前の値と比較して谷についたらスイッチを1にセット。
同様にして山についたらスイッチを2にセット。
同様にして谷についたら谷から谷の1周期のデータ数がわかるといった感じです。
s = 0;%スイッチ
for i = 2:length(arr)
if s == 0 && arr(i) > arr(i-1)
s = 1;
res1 = i;
end
if s == 1 && arr(i) < arr(i-1)
s = 2;
end
if s == 2 && arr(i) > arr(i-1)
res2 = i;
break
end
end
res = res2-res1;%結果
3 个评论
OH
2021-3-13
実際のデータは7051x45だったのですね。
このエラー文で見るべきは"Xをベクトルにする必要があります。"というメッセージだけです。
そのため、引数として与えたXを、ベクトルにして与えてあげれば良いわけです。
これくらいのデータならfor文で回すのが一番簡単ですかね。以下いかがでしょうか。
T = zeros(size(X,2),1);%事前割り当て
for i = 1:size(X,2)
[~,col] = findpeaks(X(:,i));
T(i,1) = col(2)-col(1);
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 記述統計 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!