这样就可以将任意阶的IIR滤波器通过若干二阶网络(也称为滤波器的二阶基本节)级联起来构成,其结构如图1所示。其中,代表第i级的二阶网络。
对于每一个二阶基本节,可以转置直接II型结构加以实现,如图2所示。
采用这种级联结构实现IIR滤波器的优点是每一个基本节只是关系到滤波器的某一对极点和一对零点,调整系数a0i、a1i、a2i,只单独地调整了滤波器第i对零点而不影响其他任何零、极点。同样,调整b1i、b2i系数、也只单独调整了第i对极点。因此,这种结构便于准确地实现滤波器的零、极点,也便于调整滤波器的频率响应性能。这种结构的另一个优点是存储单元需要较少,在硬件实现时,可以用一个二阶节进行时分复用,从而降低对FPGA硬件资源的要求。
IIR数字滤波器的设计
利用MATLAB信号处理工具箱中的滤波器设计和分析工具(FDATool)可以很方便地设计出符合应用要求的未经量化的IIR滤波器。需要将MATLAB设计出的IIR滤波器进一步分解和量化,从而获得可用FPGA实现的滤波器系数。
由于采用了级联结构,因此如何将滤波器的每一个极点和零点相组合,从而使得数字滤波器输出所含的噪声Z小是个十分关键的问题。为了产生Z优的量化后的IIR数字滤波器,采用如下步骤进行设计。
(1)首先计算整体传递函数的零极点;
(2)选取具有Z大幅度的极点以及距离它Z近的零点,使用它们组成一个二阶基本节的传递函数;
(3)对于剩下的极点和零点采用与(2)相类似的步骤,直至形成所有的二阶基本节。
通过上面三步法进行的设计可以保证IIR数字滤波器中N位乘法器产生的量化舍入误差Z小。
为了设计出可用FPGA实现的数字滤波器,需要对上一步分解获得的二阶基本节的滤波器系数进行量化,即用一个固定的字长加以表示。量化过程中由于存在不同程度的量化误差,由此会导致滤波器的频率响应出现偏差,严重时会使IIR滤波器的极点移到单位圆之外,系统因而失去稳定性。为了获得Z优的滤波器系数,采用以下步骤进行量化。
(1)计算每个系数的值;
(2)查找出每个系数值中的Z大值;
(3)计算比此值大的Z小整数;
(4)对(3)的结果取反获得负整数;
(5)计算需要表示此整数的Z小位数;
(6)计算用于表示系数值分数部分的余下位数。
除了系数存在量化误差,数字滤波器运算过程中有限字长效应也会造成误差,因此对滤波器中乘法器、加法器及寄存器的数据宽度要也进行合理的设计,以防止产生极限环现象和溢出振荡。