设计低通滤波器

时间:2014-11-07 06:02:48

标签: matlab filter signal-processing lowpass-filter

让我们假设我们有信号

>> fs=100;

>> ts=1/fs;
>> t=0:ts:2.93;

>> x=23*sin(2*pi*30*t)+22*cos(2*pi*51*t)+24*sin(2*pi*15*t)+6*randn(size(t));

因为一个频率高,然后采样频率除以2,我想应用低通滤波器,低于50的所有频率应保持不变,但所有其他频率应该被删除,所以我试过:

>> fc=50;
>> wn=(2/fs)*fc;
>> b=fir1(20,wn,'low',kaiser(21,3));

但是这个命令

fvtool(b,1,'fs',fs)

生成错误:

系数必须是有限的。

还有命令

y = filter(b,1,x); removes all frequency components from  signal,what is problem?

1 个答案:

答案 0 :(得分:3)

b中的系数均为NaN。这是因为您的截止频率设置为1,即奈奎斯特频率,但根据fir1 help

The cut-off frequency Wn must be between 0 < Wn < 1.0, with 1.0 corresponding to half 
the sample rate.

使用低通滤波器将截止值设置为1.0是没有意义的,因为它可以设计为通过所有频率。

无论如何,归一化频率从0到fs / 2,所以如果你想要通过50以下,你的工作就完成了,因为当采样率为100 Hz时,这就是奈奎斯特速率。高于50Hz的频率不能用具有100Hz fs的离散表示来表示。理想情况下,在离散/采样之前过滤掉高频。