我对 FIR 和 IIR 的记忆有疑问,我读过 FIR 的输出取决于当前和以前的输入,而 IIR 的输出取决于当前和以前的输入以及以前的输出。谁能解释一下 FIR 如何比 IIR 消耗更多的内存?
资料来源:https ://dspguru.com/dsp/faqs/iir/basics/
非常感谢。
我对 FIR 和 IIR 的记忆有疑问,我读过 FIR 的输出取决于当前和以前的输入,而 IIR 的输出取决于当前和以前的输入以及以前的输出。谁能解释一下 FIR 如何比 IIR 消耗更多的内存?
资料来源:https ://dspguru.com/dsp/faqs/iir/basics/
非常感谢。
为了完成特定的特定滤波任务,FIR 滤波器阶几乎肯定会远高于 IIR 滤波器阶。例如,一个低通滤波器需要特定的截止“锐度”,即通带(低频)和阻带(高频)之间的过渡区域。4 阶 IIR 滤波器可以做什么可能对应于 20 阶或 25 阶 FIR 可以做什么。4 阶 IIR 需要 10 个系数和 4 个状态。20 阶 FIR 需要 21 个系数和 20 个状态。
反馈可能很有用。
您引用的消息来源说:
与类似的 FIR 滤波器相比,IIR 滤波器可以使用更少的内存和计算来实现给定的滤波特性。
正如rbj所说!
作者在这里所说的“内存”是指存储滤波器系数所需的内存元素(正如所讨论的,对于定义转换宽度滤波器的 IIR,这些元素可能更少),以及“中间”结果(状态)需要计算输出。“计算”是指每个输出样本所需的乘法和加法,这几乎是系数数量的直接函数。
因此,如果您定义了一个使用 IIR 解决比使用 FIR更有效的问题(通常是您需要从阻带到通带的窄过渡的情况),那么 IIR 需要更少的系数、乘法和状态存储。
请注意,作者没有告诉您他们正在研究特定类别的问题——诚然这是一个非常常见的类别——即主要设计用于匹配任何给定阻带/通带幅度方案的滤波器。并非所有过滤器的设计都考虑到这一点!
例如,如果您需要在相当大的带宽上实现线性相位响应(这是一个相对普遍的愿望,因为它会导致恒定的群延迟),设计一个比 FIR“更小”的 IIR 可能会变得困难(或,实际上是不可能的)。
另请注意,虽然 IIR 通常由空间高效的结构、硬件中的乘法器和触发器使用的结构组成,但相同的结构在软件中并不总是具有内在优势。现代处理器使用长管道,如果你的结构是递归的,这对吞吐量来说是一个很大的劣势——因为需要 IIR 的先前输出将要求 CPU 必须等待指令完成,然后才能将下一条指令推入管道。(有一些巧妙的方法可以最大限度地减少这个问题,但它们通常会导致更复杂的代码和更大的机器代码内存——这也是一种权衡。)
然后:在许多情况下,您的过滤器的内存使用可能变得至关重要¹,您的过滤器的整体应用可能有一些方面使特定类型的 IIR 在内存上更容易或更难。
一个非常直观的问题是数字抽取器的窄带抗混叠滤波器:样品进入,出去了,你需要申请一个带低通以避免混叠。该过滤器当然应该具有过渡宽度奈奎斯特频带——因此可能会变得相当长!
现在,首先要观察的是,对于 FIR,有些结构可以在硬件中非常有效地实现以节省大量系数 - 奈奎斯特 -filter 可能是这里选择的过滤方法,并且这些过滤器仅包含零,除了每个系数。将数字与零相乘并将其添加到输出中是非操作,在硬件中可以完全省略!
另一个相当重要的方面是,对于 FIR 滤波器,多速率操作(即抽取、插值)通常可以以较低的速率实现——例如我们的-抽取器只能运行输入样本 - 大大减少每个输出样本所需的硬件乘法次数(减少,事实上),而且:通常允许滤波器实际使用一个和相同的乘法器硬件元素 - 在实现 DSP 硬件时,您通常不会实际考虑每个样本所需的计算数量,而是您需要的硬件数量需要以给定的速率实现某些目标,并且如果您有可以以输入速率运行的乘法器,则可以让它们“处理”过滤系数,而不是需要为每个单个系数添加一个乘法器。
因此,我确实同意该声明
IIR 滤波器可以使用比(在这些特定规范下)类似的 FIR 滤波器更少的 […] 来实现给定的滤波特性(由过渡宽度和衰减定义)。
特别是,因为你会发现双二阶(这是必不可少的 IIR 构建块)无处不在,但你必须意识到给定的陈述有点过于简单化了。