# Remove 50 Hz noise

96 views (last 30 days)
Paola on 25 Jun 2018
Edited: Walter Roberson on 21 Feb 2020
I am recording 6 channels from a force transducer, but there is a 50 Hz noise I want to remove. I was considering to use a simple solution as iirnotch, but I don't have this function on my Matlab R2015a. How can I create a filter (filtfilt and fir1?) to eliminate this 50 Hz without a signal processing toolbox?
Thank you

Star Strider on 28 Jun 2018
I thought you said that you do not have the Signal Processing Toolbox! I agree with Rik Wisselink that with it this is essentially trivial. However, you appear to be using its functions, so I will add this:
Fs = 20000;
Fn = Fs/2;
Wp = [47 53]/Fn;
Ws = [49 51]/Fn;
Rp = 1;
Rs = 50;
[n,Wn] = buttord(Wp,Ws,Rp,Rs);
[z,p,k] = butter(n,Wn,'stop');
[sos,g] = zp2sos(z,p,k);
figure
freqz(sos, 2^14, Fs)
set(subplot(2,1,1), 'XLim',[0 100])
set(subplot(2,1,2), 'XLim',[0 100])
The freqz call lets you see what the filter is doing in the frequency domain. There is also no need for the loop, because the filter functions operate column-wise. You simply need to transpose your matrix.
This should work:
ForceDataFilt = filtfilt(sos, g, ForceData'); % Transpose & Filter
ForceDataFilt = ForceDataFilt';
I transposed ‘ForceDataFilt’ so it will match the rest of your code. Experiment with the filter passband and stopband frequencies to get the result you want. Remember that for a notch or bandstop filter, the stopband frequencies (here ‘Ws’) are within the passband limits, ‘Wp’. The passband and stopband attenuation values are ‘Rp’ and ‘Rs’ respectively.
Walter Roberson on 28 Jun 2018
Looks like you should be able to invoke designfilt in R2015a.
Paola on 28 Jun 2018
Actually, I don't have the DSP toolbox and I have an old version of the Signal Processing toolbox.

Kouichi C. Nakamura on 20 Feb 2020
Edited: Walter Roberson on 21 Feb 2020
Remove the 60 Hz Hum from a Signal