findpeaksの閾値設定について
69 views (last 30 days)
Show older comments
Ibuki Takahashi
on 14 Jun 2021
Commented: Ibuki Takahashi
on 14 Jun 2021
変化が微小なグラフにおいて、findpeaksを用いたところ、ノイズ部分もpeak判定がされてしまい、適切なpeak値を求めることができませんでした。
閾値の設定を行い、この問題を解決したいと思っております。
できればプログラムの中で、「xの値が10以内の時に、y軸の値の最大値と最小値の差が3以上」のものを1つのpeak値として設定を行いたいと考えております。
私はmatlabの経験が浅いため、これ以上にもっと簡単な設定方法があれば、教えていただけると幸いです。
よろしくお願いします。
2 Comments
Akira Agata
on 14 Jun 2021
y = f(x) の形で表される信号に対して「xの値が10以内の時に、y軸の値の最大値と最小値の差が3以上」を求めるには、findpeaks の 'MinPeakProminence' オプションを 3 に指定したうえで、見つかったピークのうち x < 10 のものを抽出すれば良いと思います。
「これ以上にもっと簡単な設定方法があれば」とのことですが、具体的な対象信号を確認しないと何とも言えませんので、よろしければ対象となる信号データファイルを添付頂けますでしょうか?
Accepted Answer
Akira Agata
on 14 Jun 2021
Edited: Akira Agata
on 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)
More Answers (0)
See Also
Categories
Find more on 記述統計 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!