# Max Peak Distance (findpeaks)

72 views (last 30 days)
Hi, I'm using the 'findpeaks' function and i want to insert a min and max limit to the distance between the peaks. In the function there is only the parameter 'MinPeakDistance' and i need the equivalent "maxpeakdistance" too. Any suggestions? Thanks
##### 1 CommentShowHide None
Janak Thotakura on 12 Oct 2017
Can you explain what exactly do you mean by 'maxpeakdistance' in finding peaks? An example would be helpful.

The Matlabinator on 14 Oct 2017
I'm wondering about this too. There's a 'MinPeakDistance' that rejects peaks which are located within some specified distance. Is there an equivalent for peaks located above some threshold value?

Stefano Francavilla on 14 Oct 2017
I wrote this code, it isn't elegant but I hope could be helpful.
%%1st step - Find a large amount of peaks with non-stringent constraints
x = zeros(N,1); % x-vector (what you want)
y = zeros(N,1); % y-vector (what you want)
minpeakheight = 0; % what you want (fairly small value)
minpeakdistance = 0; % what you want (fairly small value)
[peak_vals,peak_locs] = findpeaks(y,x,'MinPeakHeight',minpeakheight,'MinPeakDistance',minpeakdistance);
ref = 0; % reference (what you want)
mpd = ref*0.9; % min peak distance (what you want)
MPD = ref/0.9; % Max Peak Distance (what you want)
%%2nd step - Find 1st peak
[~,index] = max(peak_vals(peak_locs<peak_locs(1)+mpd)); % index of the 1st peak
new_peak_locs = peak_locs(index); % position of the 1st peak
new_peak_vals = peak_vals(index); % value of the 1st peak
%%3rd step - Find other peaks
while peak_locs(end)>new_peak_locs(end)+mpd
index = find(peak_locs>new_peak_locs(end)+mpd & peak_locs<new_peak_locs(end)+MPD);
[~,jj] = max(peak_vals(index));
new_peak_locs(end+1) = peak_locs(index(jj)); % peaks position vector
new_peak_vals(end+1) = peak_vals(index(jj)); % peaks value vector
end