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