面向18位48KHz音频信号的VHDL无限脉冲响应滤波器设计

逻辑主页

特性

无限脉冲响应滤波器可应用于从音频到数据处理的多种场景,且处理器开销较低。在FPGA中,一个双二阶环节仅需占用5个(18位)乘法器资源,若需32位字长则最多需20个。本设计涵盖以下主题:

• IIR滤波器双二阶环节设计基础原理
• 滤波器稳定性与Z传递函数
• 基于Excel的双线性Z变换IIR设计工具
• 滤波器
缩放优化实现方案• 滤波器特性分析与验证
• 定制VHDL组件设计与实例化,包含18位编解码器控制器及18/36位IIR双二阶环节

概述

本参考设计采用Xilinx Spartan 6开发板德州仪器旗下National公司的LM4550音频编解码器。设计基于Xilinx ISE ver13.1开发环境实现。本设计虽采用音频编解码器,但同样适用于传感器数据滤波,此时无需编解码器。该IIR滤波器对传感器数据滤波同样表现优异。可通过缩减字长规模调整滤波器,作为快速实现定制IIR滤波器的设计起点。Xilinx Spartan 6 FPGA因其集成的DSP48A1模块,成为DSP逻辑电路设计的理想选择。集成DSP模块支持并行数学运算电路,可实现超高速数据处理的滤波器。该IIR滤波器采用32x32位与32x18位乘法器,并在前馈与反馈路径中配置多个加法器。只要硬件乘法器资源充足,该IIR滤波器可适配任何FPGA平台,需注意滤波器字长限制。

背景知识

使用者无需完全掌握IIR滤波器设计原理,但了解基础设计准则将有助于故障排查。背景章节涵盖IIR滤波器设计基础,包括双线性Z变换及VHDL模块设计本身。IIR滤波器是基于模拟传递函数原型设计的递归滤波器。双线性Z变换作为线性近似方法,将s域传递函数映射至离散z域。在此过程中,由于奈奎斯特采样率Fs/2导致的频率扭曲,jw(j-omega)轴通过单位圆进行映射。频率扭曲关系如公式1所示。随后,s域(方程2)可转换至z域,其中“z^-1”表示延迟算子。双二次结构仅由两条延迟线构成:一条为前馈路径,另一条为反馈路径。z域传递函数如下方方程3所示。双二次结构框图如下方图1所示。

方程 1

方程 2

方程 3

1—— 双二次信号流框图

反馈路径可能导致滤波器失稳。在s域中,当极点位于左半平面时滤波器视为稳定;这些极点将映射至z域单位圆内的区域。下方图2展示了j-ω轴向单位圆的映射关系。

2——S 平面到 Z 平面的映射

由于s平面到z平面的映射,频率会产生畸变。其本质上是聚集在一起的,z平面与s平面通过上方方程1所示函数关联。j-ω轴的末端在z平面π弧度处交汇,此处恰好为采样频率的一半。通过求解上下二次项(找出极点与零点)并在z平面内绘制,可判断滤波器是否具有固有稳定性。若复向量的模小于1,则位于单位圆内。这意味着可预期获得稳定滤波器。这是因为s域左半平面直接映射至z平面单位圆内部。

采用双线性z变换推导正确双二次系数的第一步,是建立模拟原型。Excel工具中用于低通与高通滤波器系数的二阶巴特沃斯低通原型如下方方程4所示。方程5用于带通与带阻原型。

Equation_04

方程 4

Equation_05

方程 5

接着需用下方方程6、7、8或9中的变换对模拟原型传递函数进行去归一化处理。这是通过将模拟原型中的“s”替换为以下变换之一来实现的。低通到低通和低通到高通变换用于二阶原型。低通到带通和低通到带阻变换用于一阶原型。注意ω’项来自上述方程1中的频率翘曲函数。

方程 6

方程 7

方程 8

方程 9

带通和带阻函数有两个新项。这些可以在下面的方程10和11中找到。这些来自我们想要创建的滤波器的频率翘曲带宽。一旦完成所有替换,可以通过将方程12代入s来应用最终的z变换。通过将z传递函数的分子和分母乘以z的最高负阶次进行代数操作,得到类似于上述方程3中的双二次传递函数。

Equation_10

方程 10

Equation_11

方程 11

方程 12

这些值也可以通过使用附带的Excel工具或通过个人喜欢的科学计算程序获得。一旦找到系数,只需将这些值转换为二进制有符号定点“2.30”格式。这意味着两个最高有效位保存-2到1的值,剩余的30位是正小数部分。示例可以在以下部分找到

应用场景

电路构建

IIR滤波器模块使用以下内容:
• 3位计数器用于使能标志同步
• 5个32位IIR系数寄存器
• 2个2级延迟线(前馈和反馈)
• 2状态状态机用于同步数学运算
• 20/10并行乘法器(32 x 32位/32 x 18位)
• 64到32位和50到18位截断块(32 x 32位/32 x 18位)
• 求和阶段,一个时钟周期内完成两次加法和两次减法
• 32位到18位截断块用于输出到DAC

实例化 IIR_Biquad.vhd 滤波器模块

IIR滤波器可以通过在项目中包含IIR_Biqhad_xx.vhd文件并直接在Xilinx ISE中进行顶层端口映射或使用原理图文件连接到端口来轻松实例化。在工艺流程选项卡中创建原理图符号后,可通过在原理图编辑器中添加导线来连接端口。顶层原理图如图3所示。

3 – Xilinx ISE 顶层原理图

该应用以100MHz频率运行,留有充足余量可支持更高运行速度。系数可通过多种方式确定,包括使用科学计算程序、采用零极点配置法进行人工计算、匹配z变换法,以及最常用的双线性z变换近似法(如背景章节所述)。随附的Excel文件采用双线性z变换生成低通、高通、带通和带阻IIR滤波器的双二阶系数。系数计算完成后,需转换为二进制有符号定点数格式"2.30"。这将生成介于-2到1.999999999068677…
之间的数值。具体操作是将小数部分乘以2^30,将整数部分输入支持大数转换的计算器进行二进制转换。转换所得部分即为系数的小数部分。接着确定-2到1之间的整数部分。若系数为负值,则计算2与该系数的差值。由此得到正值部分(小数部分),与最高有效位(-2)相加即可获得所需的原始负系数。图4和图5展示了具体转换示例。

4 – 二进制有符号定点数 2.30 转换示例 1

系数常为负值,如需处理负系数情况,可参考图5的转换示例。

5 – 二进制有符号定点数 2.30 转换示例 2

系数转换完成后,将其替换IIR_Biquad VHDL模块中的预设系数,进行综合与测试。

硬件测试与验证

该模块通过Xilinx仿真软件ISim进行了全面测试。基础定时器驱动的双状态状态机通过使能标志控制数学运算同步、中间运算截断及每个采样周期的输出锁存。每个采样周期推进延迟线并启动标志状态机。各环节均在ISim中完成测试。ISim仿真截图如图6所示。

6 – ISim 仿真截图

硬件测试采用LM4550音频编解码器完成。通过引入0至24 kHz的争议性18位信号和单个脉冲来获取滤波器的脉冲响应,我们创建并测试了多个滤波器。随后对脉冲响应进行快速傅里叶变换,以获取滤波器的频率响应。首个创建的滤波器是60 Hz二阶IIR巴特沃斯陷波滤波器。为与数字实现方案进行对比,还构建了模拟滤波器——60 Hz双T型陷波器。由于严格的约束条件,数字IIR滤波器实现方案自然会产生较大的群延迟。图7和图8分别展示了模拟滤波器与IIR数字滤波器的频谱输出。两种滤波器的阻带衰减均深入噪声基底。若采用更大的输入测试信号,可实现更强的衰减效果。

7 - 60 Hz 模拟双 T 型陷波滤波器

8 - 60 Hz 数字 IIR 巴特沃斯陷波滤波器

由于设计所需的离散元件,模拟滤波器存在热漂移和频率精度问题。数字IIR滤波器的中心频率表现精准,仅在直流处有轻微滚降。两种滤波器的s域和z域传递函数分别见公式13和公式14。

公式 13

公式 14

通过求解分子分母二次方程,可确定零极点分布。本例中两者均为复数解,如公式15和公式16所示。

公式 15

Equation_16

公式 16

图9展示了模拟与IIR陷波滤波器的零极点分布图。注意两种实现方案中滤波器都处于稳定边界。

9 - 模拟与 IIR 陷波滤波器实现的零极点分布图

下方展示了几组示波器采样示例。这些测试向滤波器输入脉冲信号。蓝色显示的脉冲响应经示波器FFT函数处理后,红色曲线重现了滤波器的频率响应。下图10展示了一个Q值较大的7 KHz带通滤波器。

10 – 7 KHz 带通滤波器实现

下图11展示了一个基于二阶巴特沃斯的带阻滤波器。

11-- 2.7 KHz 带阻滤波器实现

另一种IIR实现方式见图12。该滤波器采用3个级联的双二次切比雪夫环节,以获得更大的阻带衰减和更窄的过渡带。

12 – 8 KHz 低通切比雪夫 IIR 实现

功能、限制与调整

本参考设计采用Xilinx Spartan 6开发板德州仪器旗下National公司的LM4550音频编解码器。设计基于Xilinx ISE ver13.1开发环境实现。本设计无需音频编解码器。该设计可扩展至多种非音频应用场景,不受48 KHz采样率限制。

结论

本参考设计展示了如何利用即插即用型IIR滤波器配合双二次系数计算工具,在FPGA中快速实现数据流滤波。虽然本设计针对音频应用进行优化测试,但也可通过降低分辨率实现更高速的滤波器。本文同时涵盖了IIR滤波器设计的基础原理。

附加信息

更多DSP主题及滤波器设计信息可参阅在线书籍:《数字信号处理科学家与工程师指南》(Steven W. Smith博士著)http://www.dspguide.com
关于本文的任何问题可联系作者:

附录:下载资源

完整的《18位48 KHz音频信号用IIR滤波器VHDL设计》VHDL文件及Excel版IIR设计工具可在此下载。

IIR_Filter_Coef_Generator.xls (33 KB)
IIR_Biquad.zip (2.1 MB)