PICKPEAKS is similar to MATLAB's FINDPEAKS; it returns local peaks and their indices for the input X. The main differences are that PICKPEAKS
- is faster (much faster for large vectors),
- allows X to be a 2D matrix (not just a vector) and the user can specify across which dimension to look for peaks.
- picks either peaks or troughs.
- does not provide the FINDPEAKS option d-de?THRESHOLDd-deOao.
- does not provide the FINDPEAKSd-deOao options: d-de?MINPEAKHEIGHTd-deOao, d-de?NPEAKSd-deOao, d-de?SORTSTRd-deOao. Those can be achieved easily by manipulating the output. E.g. if Vo, Io are the output of PICKPEAKS, the following will yield the same result as setting d-de?MINPEAKHEIGHTd-deOao to 0.5:
i = find(Vo<0.5);
Vo(i) = ;
Io(i) = ;
The syntax is
[Vo,Io] = PICKPEAKS(X,npts,dim,mode);
Examples of usage are:
[Vo,Io] = PICKPEAKS(X);
[Vo,Io] = PICKPEAKS(X,,,d-deOaotroughsd-deOao);
[Vo,Io] = PICKPEAKS(X,10,,d-deOaotroughsd-deOao); % require at least 10 samples distance between troughs.
[Vo,Io] = PICKPEAKS(X,,2); % search for peaks across rows
The screenshot was generated by
x = randn(200,1);
tic, [val,ind] = pickpeaks(x,10); toc
tic, [pks,loc] = findpeaks(x,'minpeakdistance',10); toc
figure, plot(x), hold all, plot(ind,val,'ro', loc,pks,'k+', 'MarkerSize',10), legend('x','pickpeaks','findpeaks')
Notice another difference between FINDPEAKS and PICKPEAKS: FINDPEAKS does not qualify some peaks (e.g. 3 peaks around sample 50) because there are other peaks in their vicinity, which did not qualify either. PICKPEAKS will pick those as well.