File Exchange

image thumbnail

Peak finding and measurement, 2019

version 5.0 (5.39 MB) by Tom O'Haver
Scripts, functions, and mat files to locate, measure, and fit the peaks and valleys in noisy time-series data sets.


Updated 08 Dec 2019

View Version History

View License

A set of fast customizable functions for locating and measuring the peaks in noisy time-series signals. Adjustable parameters allow discrimination of "real" signal peaks from noise and background. Determines the position, height, and width of each peak by least-squares curve-fitting. It can find and count over 10,000 peaks per second, and find and measure 1800 peaks per second, in very large signals. Includes two interactive versions, one with mouse-controlled sliders and one with keyboard control, for adjusting the peak finding criteria in real-time. Self-contained demos show how it works.

Cite As

Tom O'Haver (2021). Peak finding and measurement, 2019 (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (79)

Ashhab Khan

Hi Tom,

Can you please explain that why you have start j=2*round(smoothwidth/2)-1:length(y)-smoothwidth-1,
why you have left smoothwidth points from both sides of the signal? I am unable to understand that.

Reading this info So I’m happy to convey that I have an incredibly good uncanny feeling. I am one of those people and sometimes it starts with living a healthier life.

Charlotte Rehab

These four basic benefits are as follows: physician visits, inpatient hospital stays, home health aide services, and nursing home care.

Nuvectra Medical

Health Tips for Kids is one of the most important topics you will find in a kid's development. This is so because the health of children is directly associated to their parents' health and well being.

Deborah Corp

The Yoga Burn Renew formula focuses on helping women reach a deeper sleep state where the body can renew itself just as the name of the supplement suggests.

Perfect Amino

Perfect Amino formula will help you to experience the difference both inside and outside of your body. Sure, you will feel stronger, achieve the desired body fitness, shape, and look younger than your actual age.

Savage Grow Plus

Savage Grow Plus - They can not only add a few extra inches but also increase their stamina and libido levels. The solution to achieve monster dick sizes is the supplement.

Kartik Mangalvedhe

Fungus Hack

Fungus Hack - A nail that is infected with fungus turns a yellow or brownish color, becomes thick and scaly, and may crumble or flake. Initially, the infection is usually painless, but in time it will start to hurt.

The reason why reflux natural remedies are the newest rave in reflux research is because they work differently than antacids and medication.

Biofit Probiotic

BioFit may be a top quality probiotic weight loss supplement from Nature's Formula that utilizes seven major colon healing strains that balance digestive problems, ...

Joy Johnson

PMF Advanced Proof vision support formula is one of the best supplements that can help your eyes remain healthy for a longer time period.

曦 章


Chun Farn Leong

The best ever Signal Processing Books and Codes available for public!!

Jonathan Bramwell

Just download version 5.0 and I found that after unzipping and trying to run isignaldemo.m that it failed. Seems to be because there are some typos in isignal.m and some Symfactor assignments are called Symfactorfactor line 283,354,415, 436. Changing to Symfactor and it works beautifully. A great piece of work.

Tingting Wei

尝试将 SCRIPT text 作为函数执行:
出错 DemoFindPeaksb (line 90)
figure(1);text(Measuredpeaks(:, 2),peaky',num2str(Measuredpeaks(:,1)))

Patrick Ahl

great work!


Incredible work has been put into this. I'd also recommend to visit the link given.

neha pal

I have x and y as vectors, I plotted them and now I need to detect the peaks and also find the corresponding peak locations. How can I do it?
Thanks in advance

Love jeet

This is the perfect blog for me, i love to come back here again....!!

Chang hsiung

Quark Q

yaozhao zhong

river chen


yuxuan li

mac free

Ivan Rojkov

zy lei

quite professional code, help my researchs a a lot!:)

Alex Howard

Is there a tutorial on how to use this program? I am very new to MatLab and can use all the help I can get. Thank you for any help.


Very good code. Saved me!

Tom O'Haver

Black Hawk, the line number you mentioned don't match up with the current version 5, so you probably have an older version.

One restriction of the current version is that x and y must be column vectors (size 1 x n) not row vectors. I'll fix that in the next version.

You can always find the latest versions of all my functions and scripts at

Tom O'Haver

Black Hawk, sorry I didn't see this earlier; evidently I am no longer getting email notifications and I don't go on the Matlab site very often. I'll check the errors you got. Make sure you have the latest version - some debugging has already been done. Do the demos in the internal help file not work?

Black Hawk

It appears like findpeaksb and findpeaksb3 have never been tested or debugged. That is extremely disappointing. There are just too many errors, and I tried debugging findpeaksb3 without success. Here are some basic examples for findpeaksb3:

- Line 164: why do you put "MeasuredError(peak)=Error" if Error is a 1x2 row vector? Or was it done on purpose..? That obviously gives the error message "In an assignment A(I) = B, the number of elements in B and I must be the same." So the line has to be modified to something like "MeasuredError(peak)=Error(1)", or "=Error(2)" depending on what you want.

- Lines 121, 236 and 151: why do you put "signal=[XXX',YYY']"? This makes a row vector of the independent variable concatenated with the dependent variable. Why didn't you simply choose "signal=[XXX,YYY]" so that signal is automatically a two-column matrix, 1st column=independent variable and 2nd column=dependent variable. That would also avoid the huge confusion when calling the peakfit function in which line 382 "if datasize(1)<datasize(2),signal=signal';end
" is not very useful...

- The cases when length(signal)=0 or 1 are not considered at all, yielding errors when these cases are encountered

Sorry for being very direct but I think the scripts should have been carefully tested and debugged prior to submission. It is very frustrating to spend time debugging from A to Z without success a code that one hasn't written.


I posted the problem with val2ind and r2015b with your iPeak contribution but I guess it applies here as well.

Error: File: findpeaksb.m Line: 2168 Column: 29
Function with duplicate name "val2ind" cannot be defined.

there is a function like this in one of the matlab toolboxes and I think this might call this problem?

C:\Program Files\MATLAB\R2015b\toolbox\phased\phased

Tom O'Haver

Oops, I meant to say that the area/width ratio is 1.06447...

Tom O'Haver

There is a typo there on my part; the number should be 1.06447.... Here's why: The simplest expression for a Gaussian peak is y=exp(-x^2). This has a full-width at half maximum of 2 * sqrt(ln(2)=1.66561 and the area under the curve is sqrt(pi)= 1.77245. So the width/height ratio is 1.06447.... The peak area is proportional to both peak height and width. Therefore the area is 1.06447 * peak height * peak width. Hint: You can use Wolfram Alpha ( to do all the algebra for stuff like that.


Dear Tom,
Sorry about this really basic question, but could you please explain to me the reasoning behind calculating the area of the peak using 1.0646 * peak height * peak width? I'm not sure where the 1.0646 value comes from.

Many thanks

Rahul Mohan

Tom O'Haver

Iman, you can use File > Import Data to import data files in various format, including three sound formats (.au, .snd, and .wav). These is also a Data Acquisition Toolbox that I would assume has additional data import capabilities.


How can i import the signal from the file? such as sound file or RF signal

Tom O'Haver


As you requested, I have created variants of findpeaks that compute the peak start and end positions. See
I'll include these in the next update of fileexchange entry.


Tom, it works very well for me. Thank you!
The start and the end position of the peaks would also help me… the definition of 1% of the peak amplitude would be great.

Tom O'Haver

Dieter, I would be glad to add that if you could define quantitatively what you mean by peak start and end - for example, when the amplitude of the signal reaches 1% of the peak amplitude. Or would some other definition be more appropriate for your work?

Dieter K.

It is really good and easy to use. Only one thing I miss: The start and end position of the peaks would be really helpful.

Tom O'Haver

Andre, iPeak reports only the position, height, and width of peak parameterized as Gaussians, not the parabolic results of polyfit. But you can generate the Gaussian model from height.*exp(-((x-position)./(0.6005615.*width)) .^2) and plot it over the raw data. iPeak does this automatically for the peaks detected in the upper window.


This works really well for me, thanks!

One quick question: I would like to overlay the fitted parabola onto the raw data that I used findpeaks on, for visualization purposes (and to show that the fits are reasonable).

I tried going into the function and doing polyval on the coefs that are returned by polyfit, but this doesn't produce anything sensible.

I would like the drawn parabola to have the same units as the original data. Perhaps I could re-create the parabola from the output of findpeaks (ie the width, height, mean, etc), but it seems that polyval and other parabola drawers parameterize the parabolas in other ways.

Any ideas on which way to go??? Thanks!


mitra devkota

Dear MATLAB users, I have x and y as vectors, I plotted them and now I need to detect the peaks and also find the corresponding peak locations. How can I do it?
Thanks in advance,


great code for beginner


thanks a lot Tom
this code is so useful

Tom O'Haver

When looking at a signal for the first time, it is best to use iPeak.m, iSignal.m, or ipf.m to inspect the data interactively. All of these can be downloaded from the Matlab File Exchange or from

Use the "pan and zoom" capabilities of these programs to inspect the whole signal closely. If the signal has important features that cover a very wide amplitude range or are superimposed on a much larger baseline or background, then those features may not be visible when the entire signal is plotted normally. Try using a semilog(x,y) plot, or use iSignal's semilog mode (H key).


i have a .xls file, i saved data of that in a matrix like : r=xlsread(.xls)
now its needed to find peaks but this discrete data (r) is noisy data and using of 'findpeaks' command give me a lot of numbers of peaks (because of nois).
i think your code can help me. so, could you tell me how can i use this?
best regard

Tom O'Haver

I am not exactly sure what you mean by "matrix (discrete) wave" .Please explain.


dear how can i use this for a matrix (discrete) wave?

Tom O'Haver

See for a version that includes iterative curve fitting to selected peak shapes.

Tom O'Haver

See for a version that uses keyboard control and that works in recent versions of Matlab.

Andre Guy Tranquille


Michael Coen

And comment out line 372 of rtslid.m as well... :)

Michael Coen

Ah, commenting out line 337 of rtslid.m:


eliminates crashes for later versions of Matlab...

Michael Coen

Very nifty idea but it crashes quickly in Matlab 2008b, 2009a, and 2009b. There are clearly some GUI incompatibilities.

Tom O'Haver

Latest version just uploaded corrects a bug in the FindPeakSlidersG script that caused a malfunction when individual peaks are viewed if the x-axis data series does not start with zero.

Christof Devriendt

Just what I needed! Thank you very much!

Ralph Ernstorfer

fast and reliable tool ... thanks for sharing!

Julius Kusuma

Very useful interactive software! Thanks for sharing this.

Hugo Banziger

Please gat back to me with your private phone number.

Dr. Hugo.

Karan Jain

This is a good algorithm but can it be changed to give peeks over a certain datum instead of the trough values.

Li XinBo

Your algorithm is excellent.But I find a problem in it.
Your algorithm is limited only when the data are positive number.If all the data are negative and there is peak points.Your algorithm can't detect the peak points.
But I can translate the coordinate axis.
It is to make all the y data into positive number. Then using your algorithm we can find the peak points.
I think you can modify your algorithm and make it adapt to the situation that the data is all negative number.
If you can modify your algorithm,please send the message to my email.(
Thank your.
A student from BIT of China

Matthew Butcher

You saved my MEng project with this one. I credited you thogh, don't worry.
Many thanks Tom,

Tom Driscoll

Perfect for scientific data processing. Good performance without being overly complicated. You just saved me a week of my time.

Dmitry Kazachk

Would be greate if it will do deconvolution and gave the areas for deconvolved peaks.
In general - great tool!


Tom O'Haver

K. Tampa is correct; extreme.m is the one to use if you want to find ALL the minima and maxima. But "Peak finding and measurement" is intended to distinguish real peaks from noise in experimentally measured signals and to measure their height, position, and width. Two completely different purposes.

mcs swamy

K. Tampa

Get EXTREME.M in this site and you'll find the ALL peaks (minima and maxima!) of
rand(10^6,1) in less than a second, 10^7 in about 10 sec, and from matrix too, so...

Tom O'Haver

Version 1.2, dated August 24, 2006, is even faster than the previous version It can find and measure 1000 peaks in a 1,000,000 point signal in 13 seconds.

Frank Anold

It is pretty good and easy to use. Yet some commercial software,such as origin, can do faster.

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

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

m files and mat files 2019