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

5 visualizaciones (últimos 30 días)
Ramesh Bala
Ramesh Bala el 26 de Sept. de 2019
Comentada: Ramesh Bala el 1 de Oct. de 2019
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 comentarios
darova
darova el 26 de Sept. de 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 el 27 de Sept. de 2019
Thanks Darova for the comment.
It doesn't work as it didn't made any envelope over it.

Iniciar sesión para comentar.

Respuesta aceptada

Akira Agata
Akira Agata el 26 de Sept. de 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 comentarios
Ramesh Bala
Ramesh Bala el 30 de Sept. de 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 el 1 de Oct. de 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

Iniciar sesión para comentar.

Más respuestas (0)

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by