波の性質を持つデータ​列のピークからピーク​までのデータ点数をカ​ウントしたい

조회 수: 1 (최근 30일)
Cir 2t
Cir 2t 2021년 3월 12일
댓글: Cir 2t 2021년 3월 15일
タイトル通りなのですが、添付データ列は横軸を時間でプロットすると波の性質を持ちます。
添付データは、0-70.5までを0.01刻みで微分方程式で説いた結果になります。
この時、データのピークからピークまでの時間が知りたいです。
しかし、どのようにコードを書けばよいかわかりません。
できればコードを教えてほしいですが、何かヒントでもよいので教えてほしいです。
よろしくお願い申し上げます

채택된 답변

OH
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
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
Cir 2t
Cir 2t 2021년 3월 15일
ありがとうございました。
自分一人では、永遠に解決できなかったです。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 記述統計에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!