Substituting noise with zeros

Illustration
Muhammad - 2021-02-02T11:15:20+00:00
Question: Substituting noise with zeros

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 answered . 2025-11-20

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


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!