0

我在尝试在 MATLAB 中创建/使用在非常低的频率下足够准确的滤波器时遇到了真正的麻烦。

我对 5 到 50Hz 之间的信号范围很感兴趣,高频段并不是什么大问题,我真正想做的是过滤 5Hz 以下的任何信号。但是,我发现巴特沃斯滤波器的滚降在滤波方面做得很少,它只是将信号衰减到正常信号的一半左右。

我试过两种方法。一个是使用 MATLABs 过滤工具fdatool,另一个是下面的手动方法:

filtLow = 5;
filtHigh = 50;
Fs = 1000;
[b, a] = butter(1, filtLow/(Fs/2), 'high');
y = filtfilt(b, a, data);

或者

[b, a] = butter(1, [filtLow/(Fs/2), filtHigh/(Fs/2)]);
y = filtfilt(b, a, data);

谁能给我一个可以给我更好结果的建议或代码?

4

1 回答 1

1

如果您只想要 5-50Hz 范围内的信号,那么您的滤波器的阶数可能会非常高。此外,巴特沃斯滤波器虽然通带中的线性相位和平坦频率响应没有从通带到抑制的最佳滚降。如果你能忍受一点失真,椭圆或贝塞尔滤波器会给你一个更紧密的滚降。此外,如果您使用 5 Hz 作为截止频率,理论上它应该是 -3 dB 点,这就是您看到 1/2 衰减的原因。您需要考虑一些规格。

  1. 在通带中我能接受的最低频率是多少?
  2. 在通带中我能接受的最高频率是多少?

您认为这可以确定所需的可实现衰减。现在,您似乎想要在单个频率上进行无限衰减。不幸的是,您需要确定您的设计可接受的频率范围内的衰减。

我在高通部分试了一下,得出以下结论:

Fs = 1000;
BW = Fs/2;
% get the recommended order and cutoff for high pass
[n,Wc] = buttord(10/BW,5/BW,3,10);
% get the butterworth filter
[b,a] = butter(n,Wc);
% get the frequency response
[H,W] = freqz(b,a);
% plot the low end of the response
plot( BW*W(1:10)/pi, 20*log10(abs(H(1:10))) )

给我->

频率响应

这似乎很合理。

于 2013-03-07T18:03:38.227 回答