波形のピークを見つける

ee9king に投稿

次の二つの関数で見つけられる。

islocalmax()
islocalmin()

局所的最大値、あるいは最小値と訳されている。引数にMinProminenceというものがあり、地形的な最大値を求める係数になる模様だが、読んでもはっきり値の設定の仕方がわからない。

下記はオシロスコープで取得した、ある制御パルスの時間波形を微分したものを使用している。方形波のため微分すると上下にピークが出る波形になる。このピークの間隔がパルス幅や周期として利用できる。

f2=figure();

tf_p1=islocalmax(pwm1,'minProminence',1);
tf_p2=islocalmin(pwm1,'minProminence',2);
hold on;
plot(t1,pwm1);
plot(t1(tf_p1),pwm1(tf_p1),'gx');
plot(t1(tf_p2),pwm1(tf_p2),'rx');
hold off;
xlim([0,0.0005]);
legend();

実行結果

こんなことが書いてある。

局所的最大値のプロミネンス

局所的最大値 (ピーク) のプロミネンスは、他のピークを基準とした相対的な高さと位置を基準にピークの立ち上がりの程度を測定します。

ピークのプロミネンスを測定するには、最初にピークからの水平線をピークの左方向および右方向に伸ばします。この線が左側および右側のデータと交差する場所を探します。その場所は別のピークかデータの最後のいずれかとなります。これらの場所を左側および右側の間隔の外側の端点としてマークします。次に、両方の間隔の最も低い谷を探します。これらの 2 つの谷のうち大きい方を使用して、その谷からピークまでの垂直距離を測定します。この距離がプロミネンスです。

ベクトル x の最大プロミネンスは、最大で max(x)-min(x) です。

プロミネンスとは(Matlabの説明)

https://jp.mathworks.com/help/signal/ug/prominence.html

 

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
  • 行と段落は自動的に折り返されます。