使用FFT设计FIR滤波器有什么问题?


15

我试图了解使用带卷积滤波器内核的“第一原理”设计的FIR滤波器与使用FFT的两种方式之一设计的滤波器之间的关系(请参见下文)。

据我了解,FIR滤波器的脉冲响应与滤波器的卷积内核是一样的。(如果我错了纠正我。)

另外,据我所知,FIR滤波器的脉冲响应的成分频率(即傅立叶变换)与滤波器的频率响应相同。因此,傅立叶逆变换将使我获得脉冲响应。(同样,如果我做错了,请纠正我)。

这使我得出两个结论(忽略相位响应或假设线性相位响应):

  1. 通过“绘制”所需的频率响应,采用IFFT来获得脉冲响应,并将其用作卷积内核,我应该能够设计出具有任意频率响应的FIR滤波器。

  2. 或者,我应该能够通过对输入信号进行FFT,在频域中乘以所需的任意频率响应,并对结果进行IFFT来生成输出信号,从而创建一个滤波器。

直觉上,感觉1和2是等效的,但是我不确定是否可以证明这一点。

似乎人们(和DSP文献)都竭尽全力设计具有预定义响应的FIR内核,使用诸如Chebyshev或Remez这样的复杂(对我而言)算法(我抛出了一些我已经读过的名字,但并没有真正理解它们) 。

  • 当对于每个可能的FIR内核都存在FFT / IFFT变换时,为什么要采用这些长度?
  • 为什么不简单地绘制所需的确切频率响应,进行IFFT,然后得到FIR内核(上面的方法1)?

如果感兴趣的话,我感兴趣的领域是数字音频/数字音乐。
bryhoyt

Answers:


13

您看到人们设计FIR滤波器而不是采用直接方法(如1和2)的原因之一是直接方法通常无法考虑频域中的周期性,而使用FFT实现卷积的事实卷积

这是什么意思?

假设您有一个信号和一个滤波器脉冲响应(卷积核;您是正确的,它们是相同的)。ħ = [ 1 1 ]X=[1234]H=[11]

卷积是,是5个长度的向量。如果使用FFT(长度错误,为4),则得到的答案为。产生差异的原因是这两者的线性卷积结果为长度5,但圆形卷积的结果与FFT长度无关。[ 1 3 5 7 4 ] [ 3 5 7 5 ]ÿ=XH[13574][3575]

如果FFT长度大于或等于线性卷积结果的长度,则两者相同。否则,两者是不一样的(除非数据以某种方式密谋做到这一点,例如,如果一个信号为零)。


可以,但是为什么不能再确保FFT / IFFT大小与最终卷积长度相称呢?例如,卷积长度为N + M-1,因此只需确保在傅立叶域中“画出”频率响应,长度为M-1。为什么不行呢?有趣的东西顺便说一句。:)
TheGrapeBeyond

1
中号-1

2
长度为M-1的频率响应仍然具有无限的长度脉冲响应。这意味着当您进行IFFT以获得滤波后的结果时,滤波器的脉冲响应的尾部将环绕(多次)并增加最终的时域结果。也许一点。也许很多。
hotpaw2

10

一个问题是使用无限长FFT处理无限长的变换。有限长度频率响应的傅立叶变换是无限长度脉冲响应或滤波器内核。大多数人希望过滤器在其耗尽或耗尽计算机内存之前完成,因此需要技巧来生产更短的FIR过滤器。与“经典”滤波器原型之一相比,仅使无限脉冲响应的尾部环绕FFT,或将其截短至某个通用长度,就可能会为您所需的频率规格产生劣等的FIR滤波器。

另一个问题是,随机的“绘制”频率响​​应在任何有限分辨率下,绘制点之间通常都具有可怕的响应(野生的过冲)。转换为FIR滤波器,它会像疯了似的响起。经典滤波器原型设计为具有在采样点之间平滑的频率响应功能。

您的(2)称为快速卷积,通常在FFT长于数据窗口长度加组合的滤波内核的情况下使用,并且使用适当的重叠添加/保存来照顾每个卷积段的开始/结束或窗口(因为FFT的长度通常是块状的)。


6

关于1):是的,您可以通过“绘制”频率响​​应(在幅度和相位上)来设计FIR滤波器,但这往往效率很低:脉冲响应的长度(和滤波器阶数)只是预先确定的-由FFT长度决定如果选择128点FFT,则将获得128个抽头,以获得脉冲响应;如果选择4096点FFT,则将获得4096个滤波器抽头。

关于2):是的,您可以在频域中通过乘法进行滤波,这确实是对大脉冲响应进行有效滤波的唯一方法。但是,正如Peter K所指出的,频域中的乘法对应于圆卷积。实现线性卷积的最常见方法是“重叠添加”或“重叠保存”算法(易于谷歌搜索)。


3

我不确定我是否理解这里所说的所有内容,但我想说明傅里叶变换方法。

首先,这是一种设计FIR滤波器的非常灵活和直接的方法。正如您所说,要做的就是定义幅度和相位响应。但是,正如所说的那样,您确实需要谨慎定义响应。任意响应可能需要大量抽头来实施并给出可怕的时域响应。因此,请谨慎定义。

其次,确实是这样的情况:例如,对于某些特定要求,Parks McClellan方法可以产生比傅立叶方法更好的滤波器,但是它不容易控制抽头数,并且还不容易定义幅度,相位和阶跃响应。方法。

例如,假设您要设计一个具有类似于10极IIR贝塞尔(BIR)的特性的FIR滤波器,但是您想稍微缩小过渡带(以阶跃响应过冲为代价)。然后,傅立叶方法使这个问题很容易解决,大约需要22个抽头,具体取决于过渡带的宽度。

如果您想了解傅里叶方法的功能,请尝试以下FIR程序 http://www.iowahills.com/5FIRFiltersPage.html(免费)。例如,它可以设计等效于高斯,贝塞尔,巴特沃思和逆切比雪夫滤波器的IIR。通常,它使您可以将滤波器的响应调整为几乎所有情况,这是傅立叶方法的强项。不利的一面是,对于某些特定要求,过滤器可能不是最佳的。


看起来确实很有趣。我必须尝试使用​​该软件才能真正掌握发生的情况-该网页似乎并没有太多详细地描述其方法。但据我所知,这似乎是一种混合,您可以操纵以更传统的方式生成的滤波器原型的频率响应。那是对的吗?我认为您说的是对的-您需要谨慎定义响应方式,否则最终会产生大量点击。AFAIU,这是专门设计具有频率响应的滤波器的大问题。
bryhoyt

1

AFAIK,这就是所谓的“天真过滤方法”。您可以影响频率空间中某些点的频谱内容,但是对于这些点之间的频率内容没有做任何有用的事情。如果您设计合适的FIR滤波器,则实际上还要考虑这些主要点之间的点,并且这种滤波器比第一个要好得多。

问候,布尔。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.