findpeaksの閾値設定について

50 Ansichten (letzte 30 Tage)
Ibuki Takahashi
Ibuki Takahashi am 14 Jun. 2021
Kommentiert: Ibuki Takahashi am 14 Jun. 2021
変化が微小なグラフにおいて、findpeaksを用いたところ、ノイズ部分もpeak判定がされてしまい、適切なpeak値を求めることができませんでした。
閾値の設定を行い、この問題を解決したいと思っております。
できればプログラムの中で、「xの値が10以内の時に、y軸の値の最大値と最小値の差が3以上」のものを1つのpeak値として設定を行いたいと考えております。
私はmatlabの経験が浅いため、これ以上にもっと簡単な設定方法があれば、教えていただけると幸いです。
よろしくお願いします。
  2 Kommentare
Akira Agata
Akira Agata am 14 Jun. 2021
y = f(x) の形で表される信号に対して「xの値が10以内の時に、y軸の値の最大値と最小値の差が3以上」を求めるには、findpeaks 'MinPeakProminence' オプションを 3 に指定したうえで、見つかったピークのうち x < 10 のものを抽出すれば良いと思います。
「これ以上にもっと簡単な設定方法があれば」とのことですが、具体的な対象信号を確認しないと何とも言えませんので、よろしければ対象となる信号データファイルを添付頂けますでしょうか?
Ibuki Takahashi
Ibuki Takahashi am 14 Jun. 2021
Akira Agataさん、分かりやすいご回答ありがとうございました。
手書きで申し訳ございませんが、今求めたいのは、白黒画像の、行の和を計算した、以下のようなグラフを解析したいと考えております。
今回のグラフでは、ピーク値を2個確認できますが、ノイズが入ってしまい、不適切なピーク値が1つ混ざってしまいます。
このノイズを誤認しないように、閾値を設定したいと考えておりました。
また、xの値が10以下ではなく、「xの値の範囲が、10以下の時」(例えば、7<x<19や35<x<47などの任意の範囲)といった閾値の設定ができれば、わかる範囲で教えていただけると幸いです。
簡単なプログラムの書き方を教えていただけるととても助かります。
よろしくお願いします。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Akira Agata
Akira Agata am 14 Jun. 2021
Bearbeitet: Akira Agata am 14 Jun. 2021
@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 Kommentar
Ibuki Takahashi
Ibuki Takahashi am 14 Jun. 2021
わかりやすい説明ありがとうございました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!