matlab - 设计低通滤波器

标签 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)*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/

相关文章:

c++ - 'sample' 在 VST 中包含什么信息?

ios - 从点数组中获取矩形

c++ - 使用调用外部函数的函数加载由 MATLAB Coder 生成的 DLL

arrays - 如何在 MATLAB 中合并结构体/结构体数组?

javascript - 使用 Angular 6 中的时间戳仅过滤对象中相同 ID 的最新数据

Python:如果字符串包含特定关键字,则从列表中删除特定字符串 v.2

matlab - Matlab中SVM分类的异常结果

matlab: "Index of element to remove exceeds matrix dimensions."当我不删除任何元素时

css - <div> 使用 css 模糊部分背景图像

matlab - 在 Matlab 中使用 FFT 计算自相关