Wednesday, 4 May 2016

Filtering 50Hz using a notch filter in MATLAB


I've read up a lot about this, but haven't been able to piece everything together successfully, so I'm looking for some help.


I need to filter 50 Hz from a signal. It looks like the best options are either a notch filter or a LMS filter, but I don't have a copy of the noise so a notch filter seems to be the best choice.


I don't need the frequencies normalised, as I know the sampling frequency (16kHz), and the duration is 30 seconds. The bandwidth can be fairly tight, 49.5Hz ~ 50.5Hz should be fine.


It looks like I need to use a combination of filter and iirnotch, but I'm not entirely sure how.


If someone can bring this all together I would greatly appreciate it. Thanks.



Answer



I'm not sure what iirnotch does, but this is how to design the notch filter by hand.



fs = 20000;             % sampling rate
f0 = 50; % notch frequency
fn = fs/2; % Nyquist frequency
freqRatio = f0/fn; % ratio of notch freq. to Nyquist freq.

notchWidth = 0.1; % width of the notch

% Compute zeros
notchZeros = [exp( sqrt(-1)*pi*freqRatio ), exp( -sqrt(-1)*pi*freqRatio )];


% Compute poles
notchPoles = (1-notchWidth) * notchZeros;

figure;
zplane(notchZeros.', notchPoles.');

b = poly( notchZeros ); % Get moving average filter coefficients
a = poly( notchPoles ); % Get autoregressive filter coefficients

figure;

freqz(b,a,32000,fs)

% filter signal x
y = filter(b,a,x);

No comments:

Post a Comment

readings - Appending 内 to a company name is read ない or うち?

For example, if I say マイクロソフト内のパートナーシップは強いです, is the 内 here read as うち or ない? Answer 「内」 in the form: 「Proper Noun + 内」 is always read 「ない...