肖闽进
(常州工学院电气与光电工程学院,江苏常州213002)
IIR数字滤波器的FPGA快速实现
肖闽进
(常州工学院电气与光电工程学院,江苏常州213002)
1IIR数字滤波器的基本网络结构
IIR(无限脉冲响应)滤波器具有较高的滤波效率,与FIR(有限脉冲响应)滤波器相比,所要求的阶数低,阻带衰减效率高[1-2],并且可以利用模拟滤波器的设计成果,减小设计工作量。
IIR滤波器相位特性具有非线性。对于部分不需要具有严格的滤波器通带内线性相位特性的应用,采用IIR滤波器实现低通滤波器,可以获得高效的滤波特性且节省硬件资源。
数字滤波器基本网络结构有直接型、级联型和并联型[3]3种。直接型是利用加法器、乘法器和延时器等基本运算单元,以给定的形式直接实现差分方程。IIR数字滤波器系统函数可表示为
(1)
这里假定H(z)的分子多项式与分母多项式有相同的阶数。
式(1)对应的差分方程为
按照差分方程的滤波器结构如图1所示。图中第1部分系统函数与式(1)中的Y(z)相对应,用H1(z)表示;第2部分与式(1)中的1/X(z)相对应,用H2(z)表示,即
H(z)=H1(z)H2(z)
可以看到H1(z)实现了系统的零点,H2(z)实现了系统的极点。H(z)由这2部分级联构成。
图1 IIR滤波器结构图
对于IIR系统函数,零极点的分布是重要属性。系统的稳定性要求极点都在单位圆内。由于线性相位滤波器所有的零极点都是关于单位圆对称的,所以只能有极点位于z=0。这样IIR滤波器由于极点z≠0,只能实现近似的线性相位。
2利用Matlab函数获取IIR滤波器设计参数
采样Matlab数字滤波器函数,可以方便地进行参数获取、性能预仿真等过程,对于提高设计精度和设计效率极为有利。Matlab函数库中的IIR数字滤波器有多种形式,本设计选取切比雪夫II(cheby2)滤波器设计函数。
切比雪夫滤波器的振幅特性具有等波纹特性。切比雪夫Ⅰ型滤波器的振幅特性在通带内是等波纹的,在阻带内是单调的。切比雪夫II型滤波器的特点是阻带内具有等波纹振幅特性,在通带内是单调平滑的;滤波器阶数越高,频率特性曲线越接近矩形;传递函数既有极点,又有零点。
切比雪夫Ⅱ型滤波器幅度平方函数为
式中:ε为小于1的正数,表示通带内幅度波动的程度,ε愈大,波动幅度也愈大;Ωp为通带截止频率。令λ=Ω/Ωp,为对Ωp的归一化频率。CN(x)为N阶切比雪夫多项式,定义为
切比雪夫II型滤波器设计函数的Matlab语法为
[b,a]=cheby2(n,Rp,Wn)
式中:n为滤波器阶数;函数返回值b、a为n+1阶矢量,是式(1)中滤波器系统函数的分子和分母多项式系数;Wn是截止频率;Rp是阻带波纹最小衰减,dB。
3滤波器系数量化与系统差分方程构建
在FPGA上实现IIR数字滤波器,需要用硬件描述语言(HDL)编程,首先要对Matlab获取的滤波器参数进行量化[4]。为了方便后续运算,量化过程中使滤波器的第1个分母系数为2N倍,进行kbit滤波器系数量化的Matlab量化算法程序如下:
Max1=max(max(abs(a),abs(b)));
QUM=floor(log2(Max1/a(1)));
IfQUM QUM=QUM+1; End QUM=2^QUM; Qb=round(b/QUM*(2^(k-1))) Qa=round(a/QUM*(2^(k-1))) 运行程序,得到量化后的滤波器系数矢量: Qb=[b1b2…b3b2b1] Qa=[a1a2…am-2am-1am] 式中m是滤波器的级数。 如前面所述,IIR数字滤波器的实现结构有3种,对于较低阶数的滤波器,适合采用直接型结构实现。由IIR系统函数结构及滤波器量化系数,得到IIR滤波器的差分方程: a1y(n)= b1[x(n)+x(n-m-1)]+…+ bm/2[x(n-m/2-1)+x(n-m/2)]-[a2y(n-1)+ …+ amy(n-m-1)] (2) 式中系数a1是2N。 4FPGA常系数乘除法运算算法 FPGA实现滤波器就是用VHDL语言编程实现上述差分方程[5]。由于FPGA实现的滤波器是硬件实现,故为了减少硬件资源耗用,提高运算速度,采用移位相加的方法进行乘除法运算的近似计算[6]。 对于差分方程左边采用移位及加减法实现常系数乘法运算。这种移位相加法实现乘法的原理是在二进制运算中,当常系数是2的整数次幂时,可以用左移相应位数实现乘法运算。一般差分方程的常系数总是可以分解为多个2的整数次幂的相加(减)的形式,因此可以用移位及加减运算实现常系数乘法运算。 由于差分方程的递归特性,为正确求解下一个输出值,需要在计算式(2)右边后,除以a1的值,即需要增加一级常系数除法运算操作,这里a1已经量化为2N,因此可以用右移N位的方法近似实现除法运算。 5FPGA实现IIR数字滤波器的工程实例 设计1个阻带衰减60 dB、截止频率5 kHz的数字低通滤波器,滤除转速2×104r/min的主轴控制系统中,位移传感器取样信号的5 kHz以上高频噪声。 运行Matlab切比雪夫II型滤波器设计函数得到滤波器系数 b=[0.011 2 0.022 3 0.022 3 0.011 2] a=[1.000 0 -2.076 8 1.534 7 -0.390 9] 滤波器的幅度和相位的频率特性如图2所示。 (a)振幅 (b)相位图2 IIR低通滤波器幅度相位频率特性 进行13 bit的滤波器系数量化,得到量化的滤波器系数: Qb=[ 112 3 2311] Qa=[1 024-2 1271 572-400] IIR滤波器差分方程为 1 024y(n)=11[x(n)+x(n-3)]+23[x(n-1)+x(n-2)]-[-2 127y(n-1)+1 572y(n-2)- 400y(n-3)] 用VHDL语言实现的移位相加运算。 1)零点系数计算 AMult_0<=zeros+(DATA_IN&″000″)+(DATA_IN&″0″)+DATA_IN;_ _*11 AMult_1<=zeros+(Ain_1&″0000″)+(Ain_1&″000″)-Ain_1;_ _*23 AMult_2<=zeros+(Ain_2&″0000″)+(Ain_2&″000″)-Ain_2;_ _*23 AMult_3<=zeros+(Ain_3&″000″)+(Ain_3&″0″)+Ain_3;_ _*11 2)极点系数计算 BMult_1<=zeros-(Bin_1&″00000000000″)-(Bin_1&″000000″)-(Bin_1&″0000″)+Bin_1;_ _-2 127 BMult_2<=zeros+(Bin_2&″0000000000″)+(Bin_2&″000000000″)+(Bin_2&″00000″)+(Bin_2&″00″);_ _1 572 BMult_3<=zeros-(Bin_3&″00000000″)-(Bin_3&″0000000″)-(Bin_3&″0000″);_ _-400 将零点系数滤波结果“Aout”与极点系数滤波后的结果相减,输出IIR滤波器结果: Aout<=AMult_0+AMult_1+AMult_2+AMult_3; Bsum<=Aout-BMult_1-BMult_2-BMult_3; Ydiv <=shr(Bsum,ten);_ _右移10 bit,相当于除以1 024 D_out <=Ydiv(14 downto 0);_ _取低15位数据输出 在Altera公司的CycloneIII系列FPGA中的EP3C40器件上实现的滤波器RTL电路结构[7-8]如图3所示。 图4是滤波器时序仿真图,滤波器输出高频部分受到滤波器抑制。 图3 滤波器RTL电路结构 图4 滤波器时序仿真图 6结语 IIR滤波器是具有反馈环节的闭环系统。在一般设计中,如果要实现全精度运算,则运算过程中寄存器需要较长字长,运算也将十分复杂,且占用大量硬件资源。本文提出量化系数的方法,可 以有效地限制字长,并且采用移位相加算法替代乘除运算,运算速度快、耗费硬件资源少,可广泛适用于在FPGA上快速实现各类IIR滤波器。 [参考文献] [1]田耘,徐文波,张延伟,等.无线通信FPGA设计[M].北京:电子工业出版社,2008. [2]张春生,文忠,曾涯.MATLAB信号处理[M].北京:电子工业出版社,2006. [3]Haykin S.自适应滤波器原理[M].4版.郑宝玉,译.北京:电子工业出版社,2006. [4]杜勇,刘帝英.MATLAB在FPGA设计中的应用[J].电子工程师,2007(1):9-11. [5]刘威,邵高平.基于FPGA的高速低功耗自适应滤波器的实现[J].数据采集与处理,2006(S1):150-152. [6]张春生,苏开友.FPGA数字信号处理与工程应用实践[M].北京:中国铁道出版社,2013. [7]潘松,黄继业.EDA技术实用教程[M].5版.北京:科学出版社,2013. [8]Perry D.VHDL:Programming by example[M].4th ed.New York:McGraw-Hill Companies,2002. 责任编辑:陈亮 摘要:针对IIR(无限脉冲响应)滤波器的一般结构,提出了一种在FPGA上快速实现的方法。该方法根据滤波器网络结构,采用Matlab函数产生1组零极点参数且进行适当量化,据此构建IIR滤波器的差分方程并用VHDL语言实现。在CycloneIII系列EP3C40 FPGA中实现了磁悬浮主轴位移传感器取样信号低通滤波器。研究结果表明:该设计方法实现简捷、运算速度快、占用硬件资源少,具有一定的应用价值。 关键词:无限脉冲响应;滤波器;FPGA A Rapid Implementation of IIR Digital Filter on FPGAXIAO Minjin (School of Electrical and Photoelectronic Engineering,Changzhou Institute of Technology,Changzhou 213002) Abstract:According to the common IIR (infinite impulse response) filter structure,a method of fast implementation on FPGA is put forward.This method uses the Matlab function to produce a set of zero and pole parameters and quantify the parameters.The difference equation of IIR filter is constructed and implemented by using VHDL language.By using EP3C40 FPGA of CycloneIII series,the IIR low pass filter is implemented for a magnetic suspension spindle displacement sensor sampling signal.Results show that this design method is simple with a fast calculation speed and less hardware resources,which certainly has an application value. Key words:infinite impulse response;filter;field-programmable gate array 中图分类号:TP274 文献标志码:A 文章编号:1671-0436(2015)04-0021-04 作者简介:肖闽进(1956—),男,教授。 基金项目:常州工学院校企合作课程建设项目(A-3003-13-003) 收稿日期:2015-04-20