Filter 频域滤波器与IIR和FIR滤波器?

Filter 频域滤波器与IIR和FIR滤波器?,filter,filtering,signal-processing,Filter,Filtering,Signal Processing,我是DSP新手,对信号滤波有疑问。正如我在互联网上看到的,IIR和FIR滤波器通常用于对信号进行滤波。此外,我还看到了另一种过滤信号的方法,即:频域滤波器(如Aquilca C++),它应用矩形或砖墙窗口,并对信号执行乘法 我知道我们可以在时域(使用卷积)或频域(使用乘法)上执行滤波,但我的问题是: 为什么我们不能简单地用频域滤波方法代替IIR或FIR?因为我认为生成窗口函数比生成IIR过滤器简单得多 感谢FIR和IIR滤波器的实现和运行时开销非常小。它可以在不到20行的C语言中完成 如果你想在

我是DSP新手,对信号滤波有疑问。正如我在互联网上看到的,
IIR
FIR
滤波器通常用于对信号进行滤波。此外,我还看到了另一种过滤信号的方法,即:频域滤波器(如Aquilca C++),它应用矩形或砖墙窗口,并对信号执行乘法

我知道我们可以在时域(使用卷积)或频域(使用乘法)上执行滤波,但我的问题是:

为什么我们不能简单地用频域滤波方法代替IIR或FIR?因为我认为生成窗口函数比生成IIR过滤器简单得多


感谢

FIR和IIR滤波器的实现和运行时开销非常小。它可以在不到20行的C语言中完成

如果你想在频域做同样的事情,你可以设计你想要的滤波器。但是你必须

  • 将信号转换为频域
  • 应用过滤器
  • 将其转换回时域
  • 此外,还有多种设计选择:

    • 要用于转换的窗口大小?(512,1024,…)
    • FFT还是四个DCT中的一个
    • 要使用的窗口功能
    我还没有实现这样的过滤器。也许你会遇到更多的问题


    基线:频域中的滤波要复杂得多,但它仍然有它的用途

    你不能真正在频域中对实时信号进行滤波。(好的,这并不完全正确,但它足够正确——请参见注释!)您可以使用重叠加法实现FFT滤波器

    见:

    不过,请不要搞错——当您这样做时,您正在实现一个FIR滤波器。FFT用于加速信号与滤波器冲激响应的卷积,但它仍然是卷积

    有两个主要的原因,为什么没有一直这样做:

  • 它只为非常长的脉冲响应提供显著的性能优势。对于实践中使用的大多数FIR滤波器,常规方法很好;也

  • FFT滤波引入了显著的延迟,因为在生成第一个输出之前,必须采集整个采样块(其长度必须与脉冲响应一样长),然后进行FFT卷积。由于FFT卷积仅适用于长脉冲响应,因此块总是很大,因此延迟总是很明显

  • 它也可能很难实现

    有一些超级聪明的算法可以在不引入延迟的情况下进行FFT卷积。他们对脉冲响应的初始部分使用普通FIR,然后对脉冲响应的剩余部分增加长度FFT卷积。这些都是相当棘手的实施,我似乎记得,该技术是专利

    注:

    • 重叠加卷积不是“频域滤波”的原因是,您仍然将滤波器设计为时域脉冲响应

    • 实际上,您可以使用更好的(非矩形)重叠窗口“在频域中进行过滤”,但是您的过滤器不是LTI,并且与重叠添加方法相比,它实际上没有任何优势


    在频域中通过乘法应用窗口将导致循环卷积,这将污染结果。(例如,卷积的结尾将环绕到过滤结果的开头。)

    但是你可以根据滤波器脉冲响应的长度对你的信号进行零点填充,并使用更长的FFT得到线性滤波器卷积。但矩形砖墙具有很长(理论上无限)的脉冲响应,因此所需的零填充量接近无限

    砖墙滤波器在FFT单元或频率采样点之间也有令人讨厌的频率响应(巨大的涟漪)。如果你想要一个接近平坦的频率响应滤波器,那就没什么可做的了

    开发一个具有足够平坦的频率响应(在箱子或频率点之间)和足够短的脉冲响应的窗口是非常重要的

    IIR滤波器通常需要比频域滤波器少得多的计算量。但重叠加法或重叠节省FFT快速卷积可以比长FIR滤波器卷积更快


    但首先,您需要生成一个频域滤波器,该滤波器的脉冲响应对于FFT大小来说不会太长(导致循环卷积环绕问题)。

    Thank@Peter Schneider。