Code covered by the BSD License  

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from

5.0 | 3 ratings Rate this file 31 Downloads (last 30 days) File Size: 6.66 KB File ID: #42927 Version: 1.6
image thumbnail




02 Aug 2013 (Updated )

Find peaks in data using a scale-space approach. It is efficient and requires very few parameters.

| Watch this File

File Information

Scale-space peak picking
This function looks for peaks in the data using scale-space theory.
input :
  * V : data, a vector
  * select : either:
      - select >1 : the number of peaks to detect
      - 0<select<1 : the threshold to apply for finding peaks
        the closer to 1, the less peaks, the closer to 0, the more peaks
  * display : whether or not to display a figure for the results. 0 by
  * ... and that's all ! that's the cool thing about the algorithm =)
outputs :
  * peaks : indices of the peaks
  * criterion : the value of the computed criterion. Same
                length as V and giving for each point a high value if
                this point is likely to be a peak
The algorithm goes as follows:
1°) set a smoothing horizon, initially 1;
2°) smooth the data using this horizon
3°) find local extrema of this smoothed data
4°) for each of these local extrema, link it to a local extremum found in
    the last iteration. (initially just keep them all) and increment the
    corresponding criterion using current scale. The
    rationale is that a trajectory surviving such smoothing is an important
5°) Iterate to step 2°) using a larger horizon.

At the end, we keep the points with the largest criterion as peaks.
I don't know if that kind of algorithm has already been published
somewhere, I coded it myself and it works pretty nice, so.. enjoy !
If you find it useful, please mention it in your studies by referencing
the following report:

  TITLE = {{Scale-Space Peak Picking}},
  AUTHOR = {Liutkus, Antoine},
  URL = {},
  TYPE = {Research Report},
  INSTITUTION = {{Inria Nancy - Grand Est (Villers-l{\`e}s-Nancy, France)}},
  YEAR = {2015},
  MONTH = Jan,
  HAL_ID = {hal-01103123},

running time should be decent, although intrinsically higher than
findpeaks. For vectors of length up to, say, 10 000, it should be nice.
Above, it may be worth it though.
(c) Antoine Liutkus, 2015


This file inspired Automated Frequency Domain Decomposition (Afdd) and Peak Fitting To Either Voigt Or Log Normal Line Shapes..

MATLAB release MATLAB 7.9 (R2009b)
MATLAB Search Path
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (4)
11 Jan 2016 Yiftach Katzir

nice and elegant!

09 Dec 2015 Laurent Duval  
20 Jan 2015 Antoine Liutkus

Hi Burooj, thanks for your interest. Earlier version of Matlab do not suppot this "~" syntax for unrequired outputs. In those lines, just change the "~" by some arbitrary new variable name, like "useless". I updated the script so that it should work now.

Comment only
19 Jan 2015 Burooj Ghani

Hi, I'm using Matlab 7.5.0. When I use this method, it gives me the following error:

Error: File: pickpeaks.m Line: 132 Column: 7
Expression or statement is incorrect--possibly unbalanced (, {, or [.

The error is in this line of code: [~,posMax] =max(tempMat,[],2);

Please help!

05 Aug 2013 1.3

Several bugfixes and improvements to handle large datasets.

14 Jan 2015 1.4

Added a reference to research report to cite for this technique.

14 Jan 2015 1.5

added reference in description

20 Jan 2015 1.6

updated the script for compatibility with earlier matlab versions

Contact us