## Peaks picking

version 1.0.0.0 (2.5 KB) by
Finds peaks or troughs in a vector o 2-D matrix.

Updated 01 Jun 2010

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 ‘THRESHOLD’.
- does not provide the FINDPEAKS’ options: ‘MINPEAKHEIGHT’, ‘NPEAKS’, ‘SORTSTR’. 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 ‘MINPEAKHEIGHT’ 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,[],[],’troughs’);
[Vo,Io] = PICKPEAKS(X,10,[],’troughs’); % 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.

### Cite As

Christos Saragiotis (2022). Peaks picking (https://www.mathworks.com/matlabcentral/fileexchange/27811-peaks-picking), MATLAB Central File Exchange. Retrieved .

##### MATLAB Release Compatibility
Created with R2009b
Compatible with any release
##### Platform Compatibility
Windows macOS Linux