
Does findpeaks have a threshold option?
34 views (last 30 days)
Show older comments
Bristin Rustenbeck
on 7 Jul 2016
Answered: HUGO SILVA
on 3 Aug 2017
I have a plot with several maximums of differing heights. I want to find the values/locations of one of the middle peaks, which is neither the highest nor the shortest peak in the graph. Is there a way to use findpeaks to specify a certain height threshold? In other words, find peaks between heights y1 and y2?
0 Comments
Accepted Answer
Star Strider
on 7 Jul 2016
‘find peaks between heights y1 and y2’
That option doesn’t exist, but you can do something similar with two separate findpeaks calls and a setdiff call. I don’t have your data, but the code would be something like this:
x = linspace(0, 5*pi, 250);
y = 0.25*sin(x).*(0.1*cos(5*x));
[pks1,locs1] = findpeaks(y, x, 'MinPeakHeight',0.01);
[pks2,locs2] = findpeaks(y, x, 'MinPeakHeight',0.02);
[C, ia] = setdiff(locs1, locs2, 'stable');
MidPks = [pks1(ia); locs1(ia)];
figure(1)
plot(x, y)
hold on
plot(MidPks(2,:), MidPks(1,:), '^r')
hold off
grid

0 Comments
More Answers (2)
Azzi Abdelmalek
on 7 Jul 2016
Look at the help, you will find what you need http://www.mathworks.com/help/signal/ref/findpeaks.html
0 Comments
HUGO SILVA
on 3 Aug 2017
Excelent sugestion Star Strider. I was looking for a code like your, and I finded it, but it worked for some situation.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!