假设我们有信号
>> 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));
因为一个频率比采样频率除以二高,所以我想应用低通滤波器,使所有低于 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?
最佳答案
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 时的奈奎斯特速率。 50 Hz 以上的频率无法以 100 Hz fs 的离散表示形式表示。理想情况下,您应该在离散化/采样之前滤除高频。
关于matlab - 设计低通滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795072/