2018基于FPGA的IIR带通数字滤波器设计与仿真
【摘要】该文给出了用Matlab设计IIR带通数字滤波器的方法,利用Matlab语言进行程序设计出二阶环为基础的并联结构模型,通过在Matlab环境下仿真软件Simulink对设计的带通滤波器进行了动态仿真,确定了滤波器系数的量化字长。从仿真结果来看,设计的带通数字滤波器既满足滤波器的选频特性,又优化了硬件资源。在实际的应用中,可以根据不同FPGA资源灵活修改滤波器系数,在不同规模的FPGA上实现。【关键词】无限脉冲响应;带通数字滤波器;量化字长;现场可编程门阵列
1.引言
在数字信号处理的领域内,数字滤波技术是极其重要的一个分支。无论是信号的获取、传输,还是信号的处理和交换都离不开数字滤波,它对于信号安全有效的传输是至关重要的。在主要的两类数字滤波器中,IIR(无限脉冲响应)滤波器被广泛使用。
Matlab是美国MathWorks公司出品的数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。其中Matlab自带的信号处理工具箱,具有强大的信号处理和分析功能,它提供了丰富简便的设计,使原来繁琐的程序设计简化成函数的调用,这样便可以快速有效的实现数字滤波器的设计与仿真。
FPGA(现场可编程门阵列)以其优越的实时性和设计灵活性成为了控制系统中不可或缺的一部分,它可利用Simulink设计仿真的有限字长IIR滤波器自动生成VHDL或Verilog代码,下载至FPGA实现滤波器功能。本文研究了基于FPGA有限字长的IIR带通数字滤波器的相关理论,设计方法及仿真。
2.IIR数字滤波器设计基本原理
数字IIR滤波器的设计都是基于模拟IIR滤波器,之后将其转化为等价的数字滤波器。其中冲击响应不变法是一种较为常用的方法。其总的变化流程如下:
(1)
考虑到传统滤波器计算量大,滤波特性不宜调整等缺点,如何解决这些问题便显得极为关键。利用Matlab强大的数字信号处理和计算能力可快速有效的设计数字滤波器,不仅极大的简化了计算量,而且它可以随时对比设计要求和滤波器特性进行参数调整,方便灵活。
3.基于FPGA的IIR滤波器设计
3.1 滤波器设计方法的选择
高阶IIR数字滤波器的系统传递函数可表示为:
根据滤波器传递函数H(z)的不同表达形式,可以得出不同的实现结构。相对较为常用的3种结构为直接型,级联型和并联型。其中直接型对系数的敏感度最高,受有限字长造成的影响最大。级联型H(z)的连接顺序具有很大的自由度,因此在实际设计中这些组合方式,比例变化和H(z)的连接顺序等都会产生很大的问题。并联型滤波器则可以很好的克服上述两种结构的缺点,因此在滤波器极点不重复时,并联型滤波器被广泛使用。
在相同性能的要求下,椭圆滤波器比巴特沃斯和切比雪夫滤波器所需的阶数低,且过渡带窄,可获得更好的选频特性。
3.2 Matlab程序设计
通过Matlab设计的带通滤波器部分代码如下:
N=5;
Wn=/4000;
=ellip(N,1,60,Wn);
=residuez(b,a);
=residuez(r(1:2),p(1:2),[]);
=residuez(r(3:4),p(3:4),[]);
=residuez(r(5:6),p(5:6),[]);
=residuez(r(7:8),p(7:8),[]);
=residuez(r(9:10),p(9:10),[]);
上述程序给出了椭圆滤波器模型设计的10阶并联型结构的数字滤波器。通带为频率1000~2000Hz,采样频率8000Hz,通带衰减1dB,阻带衰减60dB。
3.3 滤波器稳定性问题
二阶IIR滤波器传递函数为:
从式中可以看出,为确保稳定性,极点必须位于单位圆之内(即|p1|<1,|p2|<1),因此可以得到:
由Schur-Cohn稳定性测试可以得到a1和a2的关系为:
只要满足上述两式的关系,就可以保证滤波器的稳定性。
理论设计出的滤波器系数是无限精度的,但在实际的应用中,所有的系数都必须是以二进制数储存在计算机中,这就要求量化系数,取有限精度的字长,相应造成滤波器零极点的位置发生偏移,使得实际的频率响应和理论情况有所出入,情况严重时还可能使滤波器极点偏移至稳定单位圆外,造成整个系统不稳定。
导致这些不稳定的因素主要有两方面体现:溢出和极限环。溢出问题可以通过饱和模式、保护位、对信号和/或系数进行缩放等消除溢出效应;而对于极限环所造成的不稳定,可以通过截尾法、降低滤波器阶数、使用更多位来提高精度,移动极点使其远离单位圆等方法来消除极限环。总之,在FPGA上实现IIR滤波器之前,检查其稳定性和有限字长效应是非常重要的。
3.4 滤波器系数量化精度造成的影响
在Simulink滤波器模型中,可以通过设定变量的方法可灵活控制滤波器系数字长,如图1、2所示。
在图2所示的Parameter Attri-
butes和Signal Attributes分别对应的data type中可对其进行变量设定;图1所示的InitFcn函数可以对滤波器系数、加法器等设定与图2相对应的变量,并对其初始化。其优势在于当需要改变滤波器字长时,无需通过对每个滤波器系数字长逐一进行修改,只需在InitFcn函数中对其对应的初始化常量值进行修改量化即可。不同的量化字长对应不同的滤波效果,对幅频响应造成的影响如图3-6所示。
从所给的4幅图形中不难看出,图1-3幅频特性基本达到滤波要求,但当量化精度为13bits时,对应滤波器的幅频响应已经不能很好的达到滤波的效果,因此在保证滤波器性能的前提下,最少的量化精度为14bits。 代写论文 http://
3.5 IIR量化的Simulink仿真
iir_10order和iir_10order1为相同的10阶并联型IIR数字滤波器,如图7所示。
仿真模型的输入为2个带内(1kHz和1.5kHz)和2个带外(0.5kHz和3kHz)共4个单频信号与白噪声信号相加,这些信号的幅度都可自行设置。iir_10order滤波器系数的量化精度为14bits,并以1 024点数据做FFT变换来观察IIR数字滤波器滤波效果。下面以输入4个-20dB单频和-30dB白噪声信号为例,运行了12511024=1281024点的数据,得到的仿真结果如图8-10所示:
图8是4个单频信号(0.5kHz、1kHz、1.5kHz和3kHz)和白噪声叠加未经IIR滤波器滤波的仿真波形图;图9则是4个单频信号和白噪声经过IIR滤波器后的仿真波形图;图10为只有白噪声经过滤波器后的仿真图。从图9中不难发现,带外的两个单频信号(0.5kHz和3kHz)和白噪声均得到了有效的衰减,带外抑制基本达到了60dB,带内的信号全部通过,证明选频特性较好。通过这些图形的对比可得出,文章前面确定14bits量化精度设计的IIR滤波器是满足要求的。
4.结束语
本文设计了一种利用Matlab程序法设计的IIR带通滤波器,采用的是椭圆模型5个二阶环并联的10阶带通滤波器,通过对滤波器的系数进行量化处理,然后在Simulink环境下进行了动态仿真,确定了最终的量化字长,从仿真结果来看验证了滤波器良好的选频特性。在实际应用中,可根据FPGA硬件资源情况,灵活的修改滤波器系数从而改变滤波器频率响应,根据Simulink生成的Verillog代码下载至FPGA硬件上实现滤波性能。
参考文献
郭森楙,颜允圣.数字信号处理体系结构、实现与应用.北京:清华大学出版社,2005:4-10.
陈杰.MATLAB宝典.北京:电子工业出版社,2010:2-6.
田耕,徐文波.Xilinx FPGA开发实用教程.北京:清华大学出版社,2008:370-378.
罗海.基于FPGA的高速IIR数字滤波器设计与实现.成都:电子科技大学,2007.
Antoniou A.Digital Filters:Analysis and Design.McGraw-Hill Inc.,2000:267-280.
[美]Ingle Vihg K,Proakis John G.数字信号处理及MATLAB实现.北京:电子工业出版社,1998:201-212.
Kaczorek T.General response formula for two-dimensional linear systems with variablecoefficients.IEEE.Trans.Autom.Contr.
1986,31:278-283.
Peled A,Liu B.A new hardware realization of digital filters.IEEE Trans.on Acoustics Speech and Signal Processing Newsletter,1974
(6):456-462.
页:
[1]