File Exchange

## Localpeaks

version 1.7.0.0 (715 KB) by Christopher Hummersone

### Christopher Hummersone (view profile)

Find local peaks or troughs in a vector

Updated 05 May 2018

NOTE: this function is now available from the IoSR Matlab Toolbox as iosr.dsp.localpeaks.
-------------------------
LOCALPEAKS Find local peaks and troughs in a vector

SYNTAX

peaks = localpeaks(X)
peaks = localpeaks(X,MODE)

DESCRIPTION

peaks = localpeaks(X) locates the local peaks in vector X.

peaks = localpeaks(X,MODE) locates local features specified by MODE. MODE can be set to 'peaks' (default), 'troughs' in order to identify local troughs or 'both' in order to identify both local peaks and troughs.

### Cite As

Christopher Hummersone (2020). Localpeaks (https://www.github.com/IoSR-Surrey/MatlabToolbox), GitHub. Retrieved .

Benjamin Paul

zhiyang

Wilson

Jeremy

### Jeremy (view profile)

I don't like not having a blank line after the last line of code. Just kidding, awesome job on this function. Very simple, intuitive, and fast.

Christopher Hummersone

### Christopher Hummersone (view profile)

Thanks for your comment Christos, I hadn't noticed this behaviour (I had been using it with long signals). I have fixed the function to address your first remark, and the code will now correctly identify peaks and troughs in a vector like [0 5 -5 5 0] with the 'both' option. I have not addressed your second comment since, as you alluded to, this is a plateaux and not a true peak.

Christos Saragiotis

### Christos Saragiotis (view profile)

Very good and an excellent example of terse programming.

I have two remarks though:
1. when selecting the 'both' option some peaks or troughs may be lost. E.g consider the vector [0, 5 -5, 5, 0]. Clearly -5 is a trough but localpeaks will not pick it.
2. if we consider again the vector [ 0 5 5 5 0], localpeaks will pick the first and last 5 as a peak but not the second one. I'm not sure if this was intentional but the way I see it it should either pick all of them or none.

michael scheinfeild

### michael scheinfeild (view profile)

Christopher Hummersone

### Christopher Hummersone (view profile)

or rather,

y = zeros(size(x)); peaks = localpeaks(x);
y(peaks) = x(peaks);

Christopher Hummersone

### Christopher Hummersone (view profile)

I didn't really see the point, if you want the value you can just do for example:
y = x(localpeaks(x));

Herve

### Herve (view profile)

Brillant !
You could have added an extra output which gives the values of the local peaks or throughs.

 11 Aug 2016 1.7.0.0 Corrected title. 11 Aug 2016 1.7.0.0 Corrected description. 11 Aug 2016 1.7.0.0 Migrated to GitHub. 1 Jun 2010 1.7.0.0 Updated to address Christos Saragiotis' comment 27 May 2010 1.6.0.0 Updated description 29 Apr 2010 1.2.0.0 Fixed a silly mistake, removed index output to bring the function more in line with MATLAB conventions (find(localpeaks(x)) would do the same), added an error trap 27 Apr 2010 1.1.0.0 added the 'both' option, updated help, acknowledged other submission
##### MATLAB Release Compatibility
Created with R2007a
Compatible with any release
##### Platform Compatibility
Windows macOS Linux
##### Acknowledgements

Inspired: Peaks picking