findpeaksの閾値設定について

조회 수: 58 (최근 30일)
Ibuki Takahashi
Ibuki Takahashi 2021년 6월 14일
댓글: Ibuki Takahashi 2021년 6월 14일
変化が微小なグラフにおいて、findpeaksを用いたところ、ノイズ部分もpeak判定がされてしまい、適切なpeak値を求めることができませんでした。
閾値の設定を行い、この問題を解決したいと思っております。
できればプログラムの中で、「xの値が10以内の時に、y軸の値の最大値と最小値の差が3以上」のものを1つのpeak値として設定を行いたいと考えております。
私はmatlabの経験が浅いため、これ以上にもっと簡単な設定方法があれば、教えていただけると幸いです。
よろしくお願いします。
  댓글 수: 2
Akira Agata
Akira Agata 2021년 6월 14일
y = f(x) の形で表される信号に対して「xの値が10以内の時に、y軸の値の最大値と最小値の差が3以上」を求めるには、findpeaks 'MinPeakProminence' オプションを 3 に指定したうえで、見つかったピークのうち x < 10 のものを抽出すれば良いと思います。
「これ以上にもっと簡単な設定方法があれば」とのことですが、具体的な対象信号を確認しないと何とも言えませんので、よろしければ対象となる信号データファイルを添付頂けますでしょうか?
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개)

카테고리

Help CenterFile Exchange에서 記述統計에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!