質問: 波の性質を持つデータ列のピークからピークまでのデータ点数をカウントしたい タイトル通りなのですが、添付データ列は横軸を時間でプロットすると波の性質を持ちます。 添付データは、0-70.5までを0.01刻みで微分方程式で説いた結果になります。 この時、データのピークからピークまでの時間が知りたいです。 しかし、どのようにコードを書けばよいかわかりません。 できればコードを教えてほしいですが、何かヒントでもよいので教えてほしいです。 よろしくお願い申し上げます
回答: 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;%結果