Matlab 如何实际使用FFT实现低通滤波器

Matlab 如何实际使用FFT实现低通滤波器,matlab,filter,fft,convolution,lowpass-filter,Matlab,Filter,Fft,Convolution,Lowpass Filter,我删除了原问题的大部分内容,但将下半部分改写为更具体的内容: 原始Q的顶部: 我到处寻找一个实用的指南,在信号上实现一个简单的50Hz低通滤波器。我理解理论,但它是实用的,但这是缺失的。如果我使用的是MATLAB,它将是微不足道的,因为有这么多的例子,但我编码的代码 编辑问题: 首先感谢回答的人,我们对此表示感谢 第二,关于MATLAB是的,有很多例子(一些非常神秘的例子!),但这是一个硬编码的应用程序,使用MATLAB是不可能的,所以我想手工完成。这对我来说也是一个学习练习,我只需要开始 如果

我删除了原问题的大部分内容,但将下半部分改写为更具体的内容:

原始Q的顶部: 我到处寻找一个实用的指南,在信号上实现一个简单的50Hz低通滤波器。我理解理论,但它是实用的,但这是缺失的。如果我使用的是MATLAB,它将是微不足道的,因为有这么多的例子,但我编码的代码

编辑问题: 首先感谢回答的人,我们对此表示感谢

第二,关于MATLAB是的,有很多例子(一些非常神秘的例子!),但这是一个硬编码的应用程序,使用MATLAB是不可能的,所以我想手工完成。这对我来说也是一个学习练习,我只需要开始

如果我用另一种逐步的方式重申这个问题: 我有我的数据,想使用一个滤波器,比如说50Hz的高斯LP滤波器

我是否按以下方式执行此操作:

0:FFT信号数据S(t)->S(f)与全复FFT

1:获得50Hz LP的高斯频率响应,例如F(F)=exp(c(F-50)^2)

2:iFFT高斯滤波器F(F)->F(t)

3:换档和车窗F(t)

4:反滤波器返回f域:iFFT f(t)->f(f)

5:将信号乘以滤波器:F(F)*S(F)->R(F)

6:得到滤波信号S(t)的逆结果:iFFT R(f)->R(t)

7:重复此操作,直到过滤器参数正常


看起来更复杂,不像我多年前在大学做数学时记得的那样。

这取决于你最终想要的东西有多先进或基础。理论上,有限序列(通常为2^N长)的FFT是矩形波形时间序列的频谱(在开始的时间序列中硬切,在停止的时间序列中硬切)。如果现在将变换后的复级数乘以50HZ处截断的矩形,则会得到与无窗口fft相同的混叠、波纹等效果。Matlab经常无声地将窗函数(hanning,bartlet,…)应用于其傅里叶函数。对于实际应用,您可以使用(线性相位)FIR或IIR滤波器进行有效的低通滤波。如何计算它的滤波器系数?看看你最喜欢的信号处理书。有许多方法可以获得好的滤波器系数。Matlab在信号处理工具箱中也有一个滤波器设计功能(至少在15年前是这样)。过滤器设计是一个复杂的问题,如果您在没有透彻了解的情况下尝试这样做,很可能会出错。更好地使用Matlab信号处理工具箱中的滤波器设计和应用工具。对于包含低通选项的简单FIR滤波器,请参阅我在dsp.stackexchange.com上发布的较长答案