MATLAB Answers

findpeaksの閾値設定について

35 ビュー (過去 30 日間)
Ibuki Takahashi
Ibuki Takahashi 2021 年 6 月 14 日
コメント済み: Ibuki Takahashi 2021 年 6 月 14 日
変化が微小なグラフにおいて、findpeaksを用いたところ、ノイズ部分もpeak判定がされてしまい、適切なpeak値を求めることができませんでした。
閾値の設定を行い、この問題を解決したいと思っております。
できればプログラムの中で、「xの値が10以内の時に、y軸の値の最大値と最小値の差が3以上」のものを1つのpeak値として設定を行いたいと考えております。
私はmatlabの経験が浅いため、これ以上にもっと簡単な設定方法があれば、教えていただけると幸いです。
よろしくお願いします。
  2 件のコメント
Ibuki Takahashi
Ibuki Takahashi 2021 年 6 月 14 日
Akira Agataさん、分かりやすいご回答ありがとうございました。
手書きで申し訳ございませんが、今求めたいのは、白黒画像の、行の和を計算した、以下のようなグラフを解析したいと考えております。
今回のグラフでは、ピーク値を2個確認できますが、ノイズが入ってしまい、不適切なピーク値が1つ混ざってしまいます。
このノイズを誤認しないように、閾値を設定したいと考えておりました。
また、xの値が10以下ではなく、「xの値の範囲が、10以下の時」(例えば、7<x<19や35<x<47などの任意の範囲)といった閾値の設定ができれば、わかる範囲で教えていただけると幸いです。
簡単なプログラムの書き方を教えていただけるととても助かります。
よろしくお願いします。

サインインしてコメントする。

採用された回答

Akira Agata
Akira Agata 2021 年 6 月 14 日
編集済み: Akira Agata 2021 年 6 月 14 日
@Ibuki Takahashi さん、ご説明ありがとうございます。
「xの値の範囲が10以下の時」という条件を、「ピークの半値全幅 (FWHM: Full Width at Half Maximum) が 10以下の時」と近似的に読み替え可能でしたら、'MaxPeakWidth' オプションを指定することで検出可能です。分かりやすくするために、簡単な例を作成してみました。
x = linspace(0,1,1000);
Pos = [1 3 5 7]/10;
Hgt = [2 5 5 1];
Wdt = [2 0.5 2 1]/100;
y = zeros(size(x));
for n = 1:length(Pos)
y = y + Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2);
end
% yの最大と最小の差が3以上、かつFWHMが10以下を満たすピークを検出 (-> 左から2番目のピークのみが条件を満たす)
findpeaks(y,'MinPeakProminence',3,'MaxPeakWidth',10)
  1 件のコメント
Ibuki Takahashi
Ibuki Takahashi 2021 年 6 月 14 日
わかりやすい説明ありがとうございました。

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!