MATLAB: Does findpeaks have a threshold option

findpeaksthreshold

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?

Best Answer

‘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