How can I set a descend order finding peaks to my graph ?

4 visualizzazioni (ultimi 30 giorni)
I have a graph that takes the values from first maximum peak point and plots it.Now,how shall i introduce a threshold or descend order from that point,so that it find the next highest peak ?
load('signal')
load('t')
S(:,1)=[ 5 15 35 45 5 15 35 45];
S(:,2)=[ 5 15 15 5 45 35 35 45];
for k=1:1:length(S)
[a(k),b2(k)]=max(abs(hilbert(signal(k,:)))); % first peak amp & index
[PkAmp, PkTime] = findpeaks(abs(hilbert(signal(k,:))),t);
peaks(1,1)=a(k);
peaks(2,1)=t(b2(k));
j=2;
for i=1:length(PkTime)
if PkTime(i)>t(b2(k))
peaks(1,j)=PkAmp(i);
peaks(2,j)=PkTime(i);
j=j+1;
end
end
figure;
plot(t,(signal(k,:)),t,abs(hilbert(signal(k,:))),peaks(2,1),peaks(1,1),'ro')
hold on;grid on
plot(PkTime, PkAmp, '^r', 'MarkerFaceColor','r')
xlim([0 0.0006]);ylim([-inf inf])
hold on,plot(peaks(2,3),peaks(1,3),'ko')
end
  5 Commenti
darova
darova il 26 Set 2019
What if just use findpeaks() two times?
[y, ix] = findpeaks(origin_data);
[y1,ix1] = findpeaks(y);
i = ix(ix1);
plot(time,origin_data)
hold on
plot(time(i),origin_data(i),'^r')
hold off
Ramesh Bala
Ramesh Bala il 27 Set 2019
Thanks Darova for the comment.
It doesn't work as it didn't made any envelope over it.

Accedi per commentare.

Risposta accettata

Akira Agata
Akira Agata il 26 Set 2019
How about combining envelope and findpeaks functions?
The following is an example.
% Load data
load('signal.mat');
load('t.mat');
% Calculate envelope and detect it's peaks
ul = envelope(signal(1,:));
[pks,locs] = findpeaks(ul,t,'MinPeakProminence',0.5e-3);
% Show the result
figure
plot(t,signal(1,:))
hold on
plot(t,ul)
scatter(locs,pks,'rv')
legend({'Original data','Envelope','Peaks'},'FontSize',12)
envelope.png
  5 Commenti
Ramesh Bala
Ramesh Bala il 30 Set 2019
Thank you ! it works well for most signals !
I would like to know how to set that Minpeak prominence ,could you elaborate how to identify it and its significance.
Ramesh Bala
Ramesh Bala il 1 Ott 2019
I would like to know how can I further choose different peak values and store them in a separate variable.
Currently pks0(pt) and locs0(pt) is stored as a variable in a linear way according to signal numbers.
But,is there a way using brush option or something to select single peak from a figure and store it as (1,1) and then another peak from another plot and store as (1,2)
eg1.PNG
eg2.PNG

Accedi per commentare.

Più risposte (0)

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by