波の性質を持つデータ列のピークからピークまでのデータ点数をカウントしたい
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
タイトル通りなのですが、添付データ列は横軸を時間でプロットすると波の性質を持ちます。
添付データは、0-70.5までを0.01刻みで微分方程式で説いた結果になります。
この時、データのピークからピークまでの時間が知りたいです。
しかし、どのようにコードを書けばよいかわかりません。
できればコードを教えてほしいですが、何かヒントでもよいので教えてほしいです。
よろしくお願い申し上げます
0 commentaires
Réponse acceptée
OH
le 12 Mar 2021
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 commentaires
OH
le 13 Mar 2021
実際のデータは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
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur 記述統計 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!