plot regression line through first 5 peaks

4 vues (au cours des 30 derniers jours)
Ashlyn McCann
Ashlyn McCann le 10 Mar 2021
Commenté : Mathieu NOE le 11 Mar 2021
I am trying to plot the first 5 peaks on the PSD and I am having trouble getting the peaks to plot in their correpsonding locations. I was wondering how to go about this.
[maxpks, maxloc]=findpeaks(PSD);
[s,t]=size(maxloc);
figure(1)
plot(fp,PSD)
hold on
fpml=fp(maxloc);
plot(fpml, maxpks, 'r*')
hold on
sortpks=sort(maxpks);
sortlocs=sort(maxloc,'descend');
[j,h]=size(sortpks);
J= [sortpks(j),sortpks(j-1),sortpks(j-2), sortpks(j-3), sortpks(j-4)]; %first five peak
ML=[sortlocs(j),sortlocs(j-1),sortlocs(j-2),sortlocs(j-3),sortlocs(j-4)];
ML=[maxloc(s-4),maxloc(s-3),maxloc(s-2),maxloc(s-1),maxloc(s)]
plot(J,'y*')
Fit = polyfit(ML,J,1); %linear regression
yfit = Fit(1)*ML+Fit(2); %equation of line
hold on
plot(ML,yfit,'g-')
hold off

Réponse acceptée

Mathieu NOE
Mathieu NOE le 10 Mar 2021
hello
you can directly ask findpeaks to search only the 5 largest peaks :
[...] = findpeaks(...,'NPeaks',NP) specifies the maximum number of peaks
to be found. NP is an integer greater than zero. If not specified, all
peaks are returned. Use this parameter in conjunction with setting the
sort direction to 'descend' to return the NP largest peaks. (see
'SortStr')
  4 commentaires
Ashlyn McCann
Ashlyn McCann le 11 Mar 2021
It worked! Thank you!
Mathieu NOE
Mathieu NOE le 11 Mar 2021
My pleasure !

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by