How to find the peaks (both x and y location)

Hello.
For instance, if I was plotting Scope (x) and Temperature (y), why can't I use the following code: [pks,locs] = findpeaks(Temperature)?
Matlab tells me that there is the following error: Error using findpeaks>parse_inputs (line 131) Expected a string for the parameter name, instead the input type was 'double'.
Error in findpeaks (line 71) [X,Ph,Pd,Th,Np,Str,infIdx] = parse_inputs(Xin,varargin{:});
It gives me the peaks when I simply use findpeaks(Temperature), but I need the corresponding x values to compute as well.
Could anyone please help me out? Thank you for your time!

5 Comments

It would be useful if you upload the data so we can understand why this error arises.
Is your Temperature data definitely numeric and definitely a vector? Assuming your variable is called Temperature then check that both of the below return 1.
isnumeric(Temperature)
isvector(Temperature)
dj
dj on 13 Oct 2014
Edited: dj on 13 Oct 2014
Wow, sorry. I didn't know that email notifications are not sent when someone comments on my post. Yes, I do get 1 when I put the variables in both codes. I didn't know we could upload the data here.. Just uploaded it. Any help would be appreciated!
This is weird. I just reran the code and it works perfectly. It tells me the locations, but does anyone know how could I find the corresponding Scope values with the given locations?
temps = Temperature(locs);
We can't do much more until you attach your code and data files.

Sign in to comment.

 Accepted Answer

Can you run the example in the help without getting any error:
% Create the sample data
x = linspace(0,1,1000);
Pos = [1 2 3 5 7 8]/10;
Hgt = [4 4 4 2 2 3];
Wdt = [2 6 3 3 4 6]/100;
for n = 1:length(Pos)
Gauss(n,:) = Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2);
end
PeakSig = sum(Gauss);
plot(x,Gauss,'--',x,PeakSig)
% Use findpeaks with default settings to find the peaks of the signal and their locations.
[pks,locs] = findpeaks(PeakSig,x)
% Plot the peaks using findpeaks and label them.
findpeaks(PeakSig,x)
text(locs+.02,pks,num2str((1:numel(pks))'))
% Sort the peaks from tallest to shortest.
[psor,lsor] = findpeaks(PeakSig,x,'SortStr','descend');
findpeaks(PeakSig,x)
text(lsor+.02,psor,num2str((1:numel(psor))'))

1 Comment

Yes, I can run this fine. Not sure what I'm doing wrong yet ):

Sign in to comment.

More Answers (0)

Asked:

dj
on 12 Oct 2014

Commented:

on 13 Oct 2014

Community Treasure Hunt

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

Start Hunting!