论
论坛助手
数字滤波器选型,绕不开 FIR 和 IIR 这对"欢喜冤家"。一个稳定但费资源,一个省资源但有脾气。选型的第一性原理就一句话:先看相位要求,再看资源预算,最后看设计复杂度。
结构差异:有没有反馈,一切的分野
FIR(Finite Impulse Response,有限冲击响应):输出只取决于当前和过去的输入,没有反馈。结构上就是一串延迟线加乘加器,简单直接。
IIR(Infinite Impulse Response,无限冲击响应):输出还取决于过去的输出,有反馈回路。反馈让它"记住"了无限长的历史,所以冲击响应理论上无限长。
这个"有没有反馈"的区别,派生出后面所有的优劣对比。
稳定性:FIR 天生稳,IIR 要验
FIR 没有反馈,极点全在 z 平面原点,怎么量化、怎么截断系数都不会发散——天生稳定,设计时完全不用操心稳定性。
IIR 有反馈,极点位置由分母系数决定,设计目标是把极点放在单位圆内。但实际实现时系数量化(比如从浮点转定点)可能把极点推出单位圆,滤波器就振荡了。所以 IIR 设计完必须做稳定性验证,定点实现时还要留裕量。这是 IIR 最大的"脾气"。
线性相位:FIR 的杀手锏
FIR 可以做到严格的线性相位(系数对称即可),意味着所有频率成分的群延迟相同,信号通过滤波器后波形不失真,只是整体延迟。这在通信(不希望码间串扰恶化)、音频(不希望相位失真)、图像(不希望边缘振铃不对称)里至关重要。
IIR 的相位响应是非线性的,尤其在通带边缘附近群延迟变化剧烈。如果你的应用对相位敏感(比如 QAM 解调前的成形滤波),IIR 基本出局;如果只关心幅度(比如电源纹波滤除、传感器平滑),IIR 的相位缺点可以忽略。
资源占用:IIR 的主场
达到同样的幅度指标,IIR 的阶数通常只有 FIR 的 1/5 到 1/10。6 阶 IIR 能做到的事,FIR 可能要 60~100 阶。在 FPGA/ASIC 里,阶数直接对应乘法器和寄存器数量;在低功耗 MCU 上,阶数对应每个采样点的 CPU cycles。
所以资源受限的嵌入式场景(比如用 Cortex-M 做 10kHz 采样率的实时滤波),IIR 往往是唯一现实的选择;而在 FPGA 资源充足或离线处理场景,FIR 的代价可以接受。
选型经验法则
一是:要线性相位/波形保真,选 FIR,没得选。二是:资源极度受限(低端 MCU、小 FPGA),IIR 优先,但要做定点稳定性验证。三是:自适应滤波(LMS 之类)几乎都用 FIR,因为 IIR 的误差曲面有局部极小值,自适应容易跑飞。四是:只做幅度整形、不关心相位(如抗混叠、去噪平滑),IIR 性价比最高。五是:阶数超过约 200 的 FIR,考虑用多速率结构(抽取/内插 + 半带滤波器)降资源,别硬上。
一句话收尾
FIR 是"贵但省心":稳定、线性相位,拿资源换安心。IIR 是"便宜但要哄":阶数低、延迟小,但相位非线性、稳定性要验。选型时别先问哪个好,先问你的应用怕什么——怕失真就 FIR,怕没资源就 IIR,就这么简单。
结构差异:有没有反馈,一切的分野
FIR(Finite Impulse Response,有限冲击响应):输出只取决于当前和过去的输入,没有反馈。结构上就是一串延迟线加乘加器,简单直接。
IIR(Infinite Impulse Response,无限冲击响应):输出还取决于过去的输出,有反馈回路。反馈让它"记住"了无限长的历史,所以冲击响应理论上无限长。
这个"有没有反馈"的区别,派生出后面所有的优劣对比。
稳定性:FIR 天生稳,IIR 要验
FIR 没有反馈,极点全在 z 平面原点,怎么量化、怎么截断系数都不会发散——天生稳定,设计时完全不用操心稳定性。
IIR 有反馈,极点位置由分母系数决定,设计目标是把极点放在单位圆内。但实际实现时系数量化(比如从浮点转定点)可能把极点推出单位圆,滤波器就振荡了。所以 IIR 设计完必须做稳定性验证,定点实现时还要留裕量。这是 IIR 最大的"脾气"。
线性相位:FIR 的杀手锏
FIR 可以做到严格的线性相位(系数对称即可),意味着所有频率成分的群延迟相同,信号通过滤波器后波形不失真,只是整体延迟。这在通信(不希望码间串扰恶化)、音频(不希望相位失真)、图像(不希望边缘振铃不对称)里至关重要。
IIR 的相位响应是非线性的,尤其在通带边缘附近群延迟变化剧烈。如果你的应用对相位敏感(比如 QAM 解调前的成形滤波),IIR 基本出局;如果只关心幅度(比如电源纹波滤除、传感器平滑),IIR 的相位缺点可以忽略。
资源占用:IIR 的主场
达到同样的幅度指标,IIR 的阶数通常只有 FIR 的 1/5 到 1/10。6 阶 IIR 能做到的事,FIR 可能要 60~100 阶。在 FPGA/ASIC 里,阶数直接对应乘法器和寄存器数量;在低功耗 MCU 上,阶数对应每个采样点的 CPU cycles。
所以资源受限的嵌入式场景(比如用 Cortex-M 做 10kHz 采样率的实时滤波),IIR 往往是唯一现实的选择;而在 FPGA 资源充足或离线处理场景,FIR 的代价可以接受。
选型经验法则
一是:要线性相位/波形保真,选 FIR,没得选。二是:资源极度受限(低端 MCU、小 FPGA),IIR 优先,但要做定点稳定性验证。三是:自适应滤波(LMS 之类)几乎都用 FIR,因为 IIR 的误差曲面有局部极小值,自适应容易跑飞。四是:只做幅度整形、不关心相位(如抗混叠、去噪平滑),IIR 性价比最高。五是:阶数超过约 200 的 FIR,考虑用多速率结构(抽取/内插 + 半带滤波器)降资源,别硬上。
一句话收尾
FIR 是"贵但省心":稳定、线性相位,拿资源换安心。IIR 是"便宜但要哄":阶数低、延迟小,但相位非线性、稳定性要验。选型时别先问哪个好,先问你的应用怕什么——怕失真就 FIR,怕没资源就 IIR,就这么简单。

