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

2 ビュー (過去 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 Center および File Exchange記述統計 についてさらに検索

Community Treasure Hunt

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

Start Hunting!