这一篇在干嘛?
用反馈换取效率:IIR 滤波器的理论与系数计算、有限字长效应、快速 IIR 流水线、窄带与 lattice 结构设计。 原书代码为 VHDL,本篇所有代码已改写为 Verilog。
- 4.1 IIR 数字滤波器概述
- 例4.1 有损积分器I
- 4.2 IIR理论
- 4.3 IIR 系数的计算
- 重要 IIR 滤波器设计特性的总结
- 4.4 IIR 滤波器的实现
-
- 速度
- 低:波形
- 例4.2 巴特沃思二阶系统
- 4.5 快速 IIR 滤波器
- 例4.3 有损积分器II
- 例4.4 群集方法
- 例4.5 分散预测方法
- 例4.6 有损积分器III
- BEGIN
- 4.6 窄带 IIR 滤波器
- 例4.7 窄带IIR滤波器的位宽要求
- BEGIN
- 例4.8 改进的并行双二阶IIR滤波器
- MATLAB 结果如下:
- 4.7 窄带 IIR 滤波器的全通滤波器设计
- 一种可行的实现:
- 4.8 练习
自测一下
IIR 为什么用比 FIR 少得多的阶数就能达标?
IIR 有反馈,极点在单位圆内可产生尖锐的谐振,传递函数在相同指标下阶数远低于 FIR;代价是相位非线性且必须警惕稳定性(极点必须都在单位圆内)。
有限字长效应在 IIR 里为什么比 FIR 严重?
IIR 有反馈回路,系数量化可能让极点移出单位圆(直接振荡),量化噪声还会被极点放大。FIR 无反馈,量化只影响频响精度,不涉及稳定性。
什么是"损耗积分器"变换?
把模拟原型中的积分器替换为带衰减因子的数字损耗积分器,得到可实现的数字 IIR;这是从模拟滤波器表格到数字实现的桥梁。
流水线 IIR 为什么不能像 FIR 那样随便插寄存器?
反馈回路里插寄存器会改变传递函数(极点位置变化)。必须先重分解(如状态空间分解/散射结构)再插流水,或选用 lattice 等天然适合流水的结构。
第4章 IIR 数字滤波器
4.1 IIR 数字滤波器概述
第 3 章我们学过 FIR 滤波器。在动手做设计之前,值得先把 FIR 的”长处”和”短板”都摆出来,这样才能理解为什么需要 IIR。
FIR 滤波器最有吸引力的地方在于:线性相位很容易实现;多带滤波器设计可行;用 Kaiser 窗函数法可以自由迭代设计;对于抽取器和插入器(见第 5 章),FIR 结构简单;非递归结构天然稳定,不会出现极限环;很容易得到高速流水线设计;系数和算法舍入误差的预算通常较低,量化噪声也有明确的定义。它的短板是:递归 FIR 滤波器由于极点/零点消除不彻底可能不稳定;设计极小极大滤波器必须借助复杂的 Parks-McClellan 算法;滤波器长度很长时实现代价大。
与 FIR 相比,IIR(Infinite Impulse Response,无限脉冲响应)滤波器引入了反馈机制,能够直接实现系统传递函数的极点和零点,而 FIR 是一种”全零”滤波器。因此在给定滤波器阶数时,IIR 往往能以更低的阶数达到同样的性能。IIR 设计的传统路线是把模拟滤波器的设计规范转换到数字域——这条路之所以合理,是因为模拟滤波器的设计技巧已经相当成熟,有大量标准表格可供查阅。本章将介绍四类最重要的模拟原型滤波器:巴特沃思滤波器、切比雪夫 I 型和 II 型滤波器以及椭圆滤波器。
IIR 的优点是:采用模拟原型滤波器的标准设计方法容易理解;低阶设计即可获得很好的滤波特性,并能以很高速度运行;设计时用查表甚至袖珍计算器就够了;在相同的容限裕度方案下,IIR 滤波器比 FIR 短得多;可以采用闭环设计算法。缺点是:相位响应通常是非线性的,想得到线性相位非常困难(用全通滤波器做相位补偿会使系统复杂性加倍);整数实现时可能出现极限环;多带设计非常困难,一般只能设计低通、高通和带通滤波器;反馈会引入不稳定性(不过大多数情况下,把极点取为单位圆的镜像位置可以在保持同样幅值响应的同时得到稳定滤波器);高速流水线设计比 FIR 难得多。
例 4.1 有损积分器 I
滤波器的一个基本功能是平滑噪声信号。假定信号 x[n] 中混有宽带零均值随机噪声,从数学上看,用积分器就能把噪声”平均掉”。如果输入信号的平均值在一个有限的时间间隔内能够保持住,就可以采用有损积分器来处理含噪信号。“有损”指的是反馈支路上乘了一个略小于 1 的系数 a,让历史输出逐渐”衰减”,否则积分会无界增长。
图 4-1 就是一个简单的一阶有损积分器,它满足离散时间差分方程(本例取 a = 3/4):

图 4-1 用作有损积分器的一阶 IIR 滤波器
从图 4-2(a) 的脉冲响应可以看到,一个 15 抽头的 FIR 滤波器能够实现与一阶有损积分器同样的功能——也就是说,用一阶 IIR 就能顶替一个 15 抽头的 FIR,这正是 IIR 高效率的直观体现。有损积分器的阶跃响应如图 4-2(b) 所示。

(a) x[n] = 1000δ[n] 的脉冲响应

(b) x[n] = 100σ[n] 的阶跃响应
图 4-2 a=3/4 的有损积分器的仿真结果
下面给出该 IIR 滤波器的一种 FPGA 实现(原书 VHDL 改写为 Verilog):
module iir (
input wire clk, // 系统时钟
input wire reset, // 异步复位
input wire signed [14:0] x_in, // 系统输入
output wire signed [14:0] y_out // 输出结果
);
// 用户自定义类型 S15:[-2^14, 2^14-1] 的 15 位有符号整数
reg signed [14:0] x, y;
// 输入与递归部分都用触发器实现
always @(posedge clk or posedge reset) begin
if (reset) begin // 异步清零
x <= 0;
y <= 0;
end else if (clk) begin // 时钟上升沿
x <= x_in;
y <= x + (y >>> 2) + (y >>> 1); // y = x + y/4 + y/2
end
end
assign y_out = y; // 把 y 连接到输出引脚
endmodule原书在 PROCESS 模块内用寄存器实现递归部分,用 CSD 编码实现乘法和加法;本例中 y/4 与 y/2 只需算术右移即可完成。该设计使用了 62 个 LE,没有用到嵌入式乘法器,使用 TimeQuest 缓慢 85C 模型的时序电路性能 。脉冲幅值为 1000 时的滤波器响应如图 4-3 所示,与图 4-2(a) 给出的 MATLAB 仿真结果相吻合。

图 4-3 有损积分器脉冲响应的 MODELSIM 仿真结果
另一种可选设计方案采用标准逻辑向量数据类型和 LPM_ADD_SUB 宏函数(练习 4.6 将讨论)。那种方法生成的代码更长,但优点是可以在位域上对符号扩展和乘法器进行直接控制。
4.2 IIR 理论
顾名思义,非递归滤波器(FIR)没有反馈,脉冲响应有限;递归滤波器(IIR)具有反馈,一般认为具有无限脉冲响应。图 4-4(a) 给出了递归部分和非递归部分相互独立的滤波器,把它们组合起来就得到图 4-4(b) 所示的规范(直接型)滤波器。图 4-4 中滤波器的传递函数可以写成:
对应的差分方程为:

图 4-4 带有反馈的滤波器
与 FIR 的差分方程 (3-2) 比较就会发现:递归系统不仅依赖输入 x[n] 的前 L 个值,还与输出 y[n] 的前 L-1 个值有关——这就是”反馈”的含义。
对 F(z) 求极点和零点:非递归部分(分子)给出零点 ,分母给出极点 。利用极点/零点图可以直观地查出滤波器最重要的性质:在 z 域传递函数中用 替换,就能用几何方法构造傅里叶传递函数:
图 4-5 给出了幅值(增益)与相位的几何解释:对于给定频率 ,增益是零点向量 与极点向量 的商。这些向量分别起始于各自的零点或极点,终止于感兴趣的频率点 。图中示例的相位增益就是 。

图 4-5 用极点/零点分布图计算传递函数:幅值增益 = ,相位增益 =
利用传递函数与极点/零点图之间的这种联系,可以推出以下几条性质:
- 单位圆上的零点 (无与之抵消的极点)生成傅里叶域传递函数在频率 处的一个零点。
- 单位圆上的极点 (无与之抵消的零点)生成傅里叶域传递函数在频率 处的无穷增益。
- 所有极点都位于单位圆内部的稳定滤波器,可以接受任意类型的输入信号。
- 实际滤波器的单个极点和零点位于实轴上,而复数极点和零点总是成对出现:如果 是一个极点或零点,则 也必定是。
- 线性相位(恒时延)滤波器的所有极点和零点关于单位圆对称,或者位于 z = 0 处。
把性质 3) 与 5) 组合起来就会发现:对稳定的线性相位系统,所有零点必须关于单位圆对称,且极点只允许位于 z = 0 处。因此,IIR 滤波器(极点 )只能是近似线性相位。为实现近似,需要借用模拟滤波设计的一条著名准则:用具有单位增益、但引入非零相位增益的全通滤波器,在感兴趣的频率范围(通带)内实现相位线性化。
4.3 IIR 系数的计算
经典 IIR 滤波器设计中,先让数字滤波器的设计规范尽量贴近理想滤波器,再把理想数字滤波器模型规范在数学上转换成一组模拟滤波器模型规范,所用的工具就是双线性 z 变换:
思路是:用双线性变换把数字规范映射为模拟规范,套用经典的模拟原型公式合成,再映射回数字 IIR 滤波器。下面逐一介绍四类原型。
巴特沃思滤波器的幅值平方频率响应为:
的极点沿圆周分布,彼此相隔 弧度;传递函数在 处 N 次可微,说明它在 0 Hz 附近”局部最光滑”。图 4-6(上)给出了一个巴特沃思设计示例,其容差方案与 Kaiser 窗函数及图 3-7 的等波纹设计一致。

(a) 巴特沃思滤波器传递函数

(b) 巴特沃思滤波器通带组延迟

(c) 巴特沃思滤波器极点/零点分布图(×=极点,o=零点)
切比雪夫 I 型和 II 型滤波器按切比雪夫多项式 定义,要求滤波器的极点驻留在一个椭圆上。I 型的幅值平方频率响应为:
典型 I 型滤波器的幅频与脉冲响应如图 4-7(上)所示:通带呈等波纹,阻带光滑。II 型的模型则是把波纹挪到阻带: