Substituting noise with zeros

M
Muhammad · Feb 2, 2021 · 1.9K views
Question
I have a segment of data that has a significant amount of noise. I know the start and end point of the noise when it is graphed and I want to substitute these aberrant values with zeroes OR split the segment into two areas, deleting the noise in the middle.
Expert Answer
Profile picture of John Michell
John Michell PhD Expert
Answered Aug 23, 2026
The good news is that I got a filter that filtered your signal up to the spike, because that’s the easiest way to deal with the discontinuities.
 
The bad news is that there’s nothing in your data. I cannot identify any EKG patterns such as QRS complexes in your (extremely noisy) data. Yours is one of those ‘I wish we could have discussed this earlier’ situations. I’ve gone into detail about the vectorcardiogram loop and its projections on the various EKG leads in many earlier posts. You didn’t describe your experimental set-up or design, so I don’t know if you used a ‘ground’ (actually common reference) electrode to subtract-out the noise in your differential amplifier set-up. The problem with putting the EKG leads too close together is that there is nothing for the vectorcardiogram loop to project onto. I’m not even sure where you put them.
 
I used a low-pass version of my usual band-pass filter design for EKGs on your signal, and could recover nothing in the filtered signal that I could identify as anything resembling a normal EKG. In figure(5), I even tried to see if I could recover information from a spatial representation of the signal, but there really is nothing in your data. I gave it my best effort!
 
My Code:
 
D = load('Andy Tek PleaseClean.mat');

s  = D.PleaseClean;
Fs = 1024;                                                              % Sampling Frequency (Hz)
Fn = Fs/2;                                                              % Nyquist Frequency
L  = size(s,1);
t = linspace(0, 1, L)/Fs;                                               % Sampling Time (s)

Smean = mean(s);
Sstd  = std(s);
CE95  = bsxfun(@plus, Smean, bsxfun(@times,Sstd*1.96,[-1  1]'));

[maxs,idx] = max(s);
sLen = min(idx-10);
s = s(1:sLen,:);
t = t(1:sLen);

figure(1)
subplot(3,1,1)
plot(t, s(:,1))
axis([xlim    0.001*CE95(:,1)'])
grid
subplot(3,1,2)
plot(t, s(:,2))
axis([xlim    0.001*CE95(:,2)'])
grid
subplot(3,1,3)
plot(t, s(:,3))
axis([xlim    CE95(:,3)'])
grid

Q1 = s(1:5,:);                                                          % Look

fts = fft(s)/sLen;
Fv = linspace(0, 1, fix(sLen/2)+1)*Fn;
Iv = 1:length(Fv);

figure(2)
subplot(3,1,1)
plot(Fv, abs(fts(Iv,1))*2)
axis([0  100    0  1E-1])
grid
subplot(3,1,2)
plot(Fv, abs(fts(Iv,2))*2)
axis([0  100    0  1E-1])
grid
subplot(3,1,3)
plot(Fv, abs(fts(Iv,3))*2)
axis([0  100    0  1E-4])
grid

Wp =  50/Fn;
Ws =  75/Fn;
Rp = 10;
Rs = 50;
[n,Wn] = buttord(Wp, Ws, Rp, Rs);
[b,a] = butter(n,Wn);
[sos,g] = tf2sos(b,a);

figure(3)
freqz(sos, 2048, Fs)

sf = filtfilt(sos,g,s);
Q2 = sf(1:5,:);                                                         % Look

figure(4)
subplot(3,1,1)
plot(t, sf(:,1))
axis([xlim    0.001*CE95(:,1)'])
grid
subplot(3,1,2)
plot(t, sf(:,2))
axis([xlim    0.001*CE95(:,2)'])
grid
subplot(3,1,3)
plot(t, sf(:,3))
axis([xlim    CE95(:,3)'])
grid

figure(5)
plot3(sf(:,1), sf(:,2), sf(:,3))
grid on
100% Run Guarantee 3-Hour Fast-Track Delivery

Need a Custom Version or Complete Simulation for This Problem?

Our 500+ PhD engineers build, debug, and optimize working MATLAB scripts and Simulink (.slx) models tailored to your exact assignment rubrics with zero plagiarism.

Tested on MATLAB R2024b / R2026a
Turnitin 0% Plagiarism Report
Free 7-Day Revisions Guarantee
Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!