1

MATLAB を使用してプロットしたデータ セットの 1 番目、2 番目、3 番目のピークを見つけたいと考えています。誰かがこれで私を助けることができますか? ここに私がアップロードしたプロットへのリンクがあります

ここに画像の説明を入力

中心的なアイデアは、特定の時間間隔の後に発生するピークを見つけることです。2 番目の条件は、最初の 4 つのピークを保存してから、条件を破ることです。それで、グラフの最初の最大値を見つけます。X 軸に 2530 の時間値が表示されます。次に、すぐ近くではなく、X 軸で 180 ~ 200 の後に来るピークを探します。ピーク 2 を取得し、それを保存します。それからまた 180 から 200 ずつジャンプして、近くのピークを探します。最後に、最初の 4 つの最大値を取得した後、ピークの検索を停止します

4

3 に答える 3

2

このような場合に私が通常行うことは、最大値を検索してから、その最大値付近の小さな近傍のすべてのポイントを消去して、プロセスを繰り返すことです。もちろん、近傍サイズはアプリケーションに依存します。

したがって、 vector にデータがある場合y、次のように動作するはずです。

 [max1, max_ind] = max(y);
 y(max_ind-delta:max_ind+delta) = 0;

 [max2, max_ind2] = max(y);
于 2013-05-29T11:59:10.647 に答える
1

nimrodm の回答の代わりに、既知の時間遅延を有利に利用できます。最初の最大値を見つけてから、既知の遅延を先取りして、より小さなウィンドウ内で最大値を検索します。これを行うときはインデックスを調整する必要がありますが、うまく機能します。

vector のデータを使用y:

[max1,max_ind1] = max(y);
next_ind = max_ind + 190;

[max2,max_ind2] = max(y(next_ind-20:next_ind+20));
max_ind2 = max_ind2 + next_ind-21;
于 2013-05-29T12:18:47.443 に答える
0

findpeaks関数は、ベクトル内のすべてのピークを提供しますが、気にしないピークをフィルター処理するには、さらに多くの作業を行う必要があります。これを行う前に、ローパス フィルターを適用するfindpeaksことができます。

于 2016-03-29T04:23:54.917 に答える