在 MATLAB 中使用陷波滤波器过滤 50Hz

信息处理 matlab 过滤器
2022-01-12 07:26:27

我已经阅读了很多关于此的内容,但未能成功地将所有内容拼凑在一起,所以我正在寻求帮助。

我需要从信号中过滤 50 Hz。看起来最好的选择是陷波滤波器或 LMS 滤波器,但我没有噪声的副本,因此陷波滤波器似乎是最佳选择。

我不需要标准化频率,因为我知道采样频率(16kHz),持续时间为 30 秒。带宽可以相当紧凑,49.5Hz ~ 50.5Hz 应该没问题。

看起来我需要使用 and 的组合filteriirnotch但我不完全确定如何使用。

如果有人能把这一切结合在一起,我将不胜感激。谢谢。

2个回答

我不确定 iirnotch 是做什么的,但这是手动设计陷波滤波器的方法。

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);

您只需键入 help iirnotch,然后查看以下示例:

% Design a filter with a Q-factor of Q=35 to remove a 60 Hz tone from 
% system running at 300 Hz.
Wo = 60/(300/2);  BW = Wo/35;
[b,a] = iirnotch(Wo,BW);  

如果您将 60 替换为 50 Hz,然后执行以下操作:

Y = filter(b,a,X)

它应该可以工作(使用 X 你的数据)