Matlab 低通滤波器的设计

Matlab 低通滤波器的设计,matlab,filter,signal-processing,lowpass-filter,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)); 因为一个频率高,然后采样频率除以二,所以我想应用低通滤波器,使所有低于50的频率保持不变,但所有其他频率都应移除,因此我尝试了: >> fc=50; >> wn=(2/

让我们假设我们有信号

>> 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,即奈奎斯特频率,但根据:

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


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

@datodatuashvili选择合适的Wn,或者根本不过滤。如果采样率为100 Hz,从一开始就只能表示50 Hz以下的频率。我只是在练习,假设51是频率,所以我想rmeove@datodatuashvili请阅读wikipedia.org/wiki/Nyquist_frequency您不明白,我需要按语法执行,理论上我不知道这是什么意思mean@datodatuashvili我想是你不明白:如果你的采样频率是100Hz,你不能代表(并因此过滤)高于50Hz的任何东西。
The cut-off frequency Wn must be between 0 < Wn < 1.0, with 1.0 corresponding to half 
the sample rate.