MATLAB Answers

0

How can I remove a set of given peaks such as the peaks located at (7.9000,0.9989) and (14.1000, 0.9993) in the following code? I want to be able to do this even when the plot expands and has many more peaks.

Asked by Edii Mason on 13 Jul 2018
Latest activity Commented on by Carlos Felipe Rengifo on 18 Jul 2018
t=[0:0.1:6*pi];
y=sin(t);
[pks,pk_locs] = findpeaks(y,t);
[trghs,trgh_locs] = findpeaks(-y,t);
plot(t,y);
hold on;
plot(pk_locs,pks,'^r');
plot(trgh_locs,-trghs,'vg');
hold off;

  2 Comments

I don't see why that won't work for any number of peaks or signal length.
You forgot to read this link. So no data, no screenshot = no answer.
Also, please read this link so you know how to format your code so that people can read it.
How to decide which specific peaks to remove is the bigger question...after that,
doc ismembertol
probably answers the Q?.

Sign in to comment.

1 Answer

Answer by Carlos Felipe Rengifo on 14 Jul 2018

Hi, it can be done by replacing the undesired peaks by nan values. In your case, it will be:
% The first two lines of your script
t = [0:0.1:6*pi];
y = sin(t);
% I just added this line to your code
y(ismembertol(t,[7.9,14.1],1E-3)) = nan;
% The rest of your code
[pks,pk_locs] = findpeaks(y,t);
[trghs,trgh_locs] = findpeaks(-y,t);
plot(t,y);
hold on;
plot(pk_locs,pks,'^r');
plot(trgh_locs,-trghs,'vg');
hold off;

  2 Comments

Thank you for your answer! That is what I want except it seems to also erase part of the sin plot and I want to only erase the peak marker while maintaining the original plot. Do you have any ideas how to do this?
In that case, I propose the following solution:
% Signal generation
t = 0:0.1:6*pi;
y = sin(t);
% Find peaks
[pks,pk_locs] = findpeaks(y,t);
[trghs,trgh_locs] = findpeaks(-y,t);
% Removing undesired peaks
removals = ismembertol(pk_locs,[7.9,14.1],1E-3);
pk_locs(removals) = [];
pks(removals) = [];
% Plot
plot(t,y);
hold on;
plot(pk_locs,pks,'^r');
plot(trgh_locs,-trghs,'vg');
hold off;
I hope this solution meets your requirements. If that is not the case, I will be happy to try again.

Sign in to comment.