基于FPGA的IIR带通数字滤波器设计与仿真
2012-06-01杭州电子科技大学射频电路与系统教育部重点实验室杨延亮程知群
杭州电子科技大学射频电路与系统教育部重点实验室 杨延亮 程知群 冯 涛
基于FPGA的IIR带通数字滤波器设计与仿真
杭州电子科技大学射频电路与系统教育部重点实验室 杨延亮 程知群 冯 涛
该文给出了用Matlab设计IIR带通数字滤波器的方法,利用Matlab语言进行程序设计出二阶环为基础的并联结构模型,通过在Matlab环境下仿真软件Simulink对设计的带通滤波器进行了动态仿真,确定了滤波器系数的量化字长。从仿真结果来看,设计的带通数字滤波器既满足滤波器的选频特性,又优化了硬件资源。在实际的应用中,可以根据不同FPGA资源灵活修改滤波器系数,在不同规模的FPGA上实现。
无限脉冲响应;带通数字滤波器;量化字长;现场可编程门阵列
1.引言
在数字信号处理的领域内,数字滤波技术是极其重要的一个分支。无论是信号的获取、传输,还是信号的处理和交换都离不开数字滤波,它对于信号安全有效的传输是至关重要的[1]。在主要的两类数字滤波器中,IIR(无限脉冲响应)滤波器被广泛使用。
Matlab是美国MathWorks公司出品的数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境[2]。其中Matlab自带的信号处理工具箱,具有强大的信号处理和分析功能,它提供了丰富简便的设计,使原来繁琐的程序设计简化成函数的调用,这样便可以快速有效的实现数字滤波器的设计与仿真。
FPGA(现场可编程门阵列)以其优越的实时性和设计灵活性成为了控制系统中不可或缺的一部分,它可利用Simulink设计仿真的有限字长IIR滤波器自动生成VHDL或Verilog代码,下载至FPGA实现滤波器功能[3]。本文研究了基于FPGA有限字长的IIR带通数字滤波器的相关理论,设计方法及仿真。
2.IIR数字滤波器设计基本原理
数字IIR滤波器的设计都是基于模拟IIR滤波器,之后将其转化为等价的数字滤波器[4]。其中冲击响应不变法是一种较为常用的方法。其总的变化流程如下:
考虑到传统滤波器计算量大,滤波特性不宜调整等缺点,如何解决这些问题便显得极为关键。利用Matlab强大的数字信号处理和计算能力可快速有效的设计数字滤波器,不仅极大的简化了计算量,而且它可以随时对比设计要求和滤波器特性进行参数调整,方便灵活[5]。
3.基于FPGA的IIR滤波器设计
3.1 滤波器设计方法的选择
高阶IIR数字滤波器的系统传递函数可表示为:
根据滤波器传递函数H(z)的不同表达形式,可以得出不同的实现结构。相对较为常用的3种结构为直接型,级联型和并联型。其中直接型对系数的敏感度最高,受有限字长造成的影响最大。级联型H(z)的连接顺序具有很大的自由度,因此在实际设计中这些组合方式,比例变化和H(z)的连接顺序等都会产生很大的问题。并联型滤波器则可以很好的克服上述两种结构的缺点,因此在滤波器极点不重复时,并联型滤波器被广泛使用。
在相同性能的要求下,椭圆滤波器比巴特沃斯和切比雪夫滤波器所需的阶数低,且过渡带窄,可获得更好的选频特性。
3.2 Matlab程序设计
通过Matlab设计的带通滤波器部分代码如下:
上述程序给出了椭圆滤波器模型设计的10阶并联型结构的数字滤波器[6]。通带为频率1000~2000Hz,采样频率8000Hz,通带衰减1dB,阻带衰减60dB。
3.3 滤波器稳定性问题
二阶IIR滤波器传递函数为:从式中可以看出,为确保稳定性,极点必须位于单位圆之内(即|p1|<1,|p2|<1),因此可以得到:
由Schur-Cohn稳定性测试可以得到a1和a2的关系为:
只要满足上述两式的关系,就可以保证滤波器的稳定性。
理论设计出的滤波器系数是无限精度的,但在实际的应用中,所有的系数都必须是以二进制数储存在计算机中,这就要求量化系数,取有限精度的字长,相应造成滤波器零极点的位置发生偏移,使得实际的频率响应和理论情况有所出入,情况严重时还可能使滤波器极点偏移至稳定单位圆外,造成整个系统不稳定。
图1 初始化函数
图2 滤波器系数参数
图3 未经量化的幅频响应
图4 量化精度16bits幅频响应
图5 量化精度14bits幅频响应
图6 量化精度13bits幅频响应
图7 IIR滤波器Simulink仿真模型
图8 4单频与白噪声相加频谱
图9 单频加白噪声滤波后频谱
图10 白噪声滤波后的频谱
导致这些不稳定的因素主要有两方面体现:溢出和极限环。溢出问题可以通过饱和模式、保护位、对信号和/或系数进行缩放等消除溢出效应;而对于极限环所造成的不稳定,可以通过截尾法、降低滤波器阶数、使用更多位来提高精度,移动极点使其远离单位圆等方法来消除极限环[7]。总之,在FPGA上实现IIR滤波器之前,检查其稳定性和有限字长效应是非常重要的。
3.4 滤波器系数量化精度造成的影响
在Simulink滤波器模型中,可以通过设定变量的方法可灵活控制滤波器系数字长,如图1、2所示。
在图2所示的Parameter Attributes和Signal Attributes分别对应的data type中可对其进行变量设定;图1所示的InitFcn函数可以对滤波器系数、加法器等设定与图2相对应的变量,并对其初始化。其优势在于当需要改变滤波器字长时,无需通过对每个滤波器系数字长逐一进行修改,只需在InitFcn函数中对其对应的初始化常量值进行修改量化即可。不同的量化字长对应不同的滤波效果,对幅频响应造成的影响如图3-6所示。A子集还是B子集进行编码。反过来也可以说,左侧数据区字符编码的奇偶排列顺序,决定了前置码。比如,如果某个条形码的左侧数据区的编码是:奇偶偶偶奇奇,那么前置码就是6。
3.5 条码译码
经由条码的条空宽度归一化到-1,-2,-3,-4,1,2,3和4八个整数后,创建译码表,表3所示。译码工作通过查询此表即可实现。例如:某个字符的四个条空宽度分别是,-3,1,-2和1,经查表可知,这个字符是“8”。
4.实验结果分析
仿真实验使用VC++ Express 2008和OpenCV开发平台。实验表明,本文算法效果良好。对于光照不均匀,轻微模糊,及倾斜角在正负25度内的条码图像,都能正确识别。如图7所示。
[1]中国标准出版社.条码国家标准汇编[M].北京:中国标准出版社,2004.
[2]陆宗骐.C/C++图像处理编程[M].北京:清华大学出版社,2005.
[3]苏彦华.VC++数字图像识别技术典型案例[M].北京:人民邮电出版社,2004
[4]沈庭芝.数字图像处理及模式识别[M].北京:北京理工大学出版社,1998.
姜亮(1980—),男,研究生,研究方向:计算机应用。