《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 基于DSP的IIR数字滤波器的设计与实现

基于DSP的IIR数字滤波器的设计与实现

《电子技术应用》
2008-03-27
作者:杨达亮, 王巨丰

  摘 要: 叙述了IIR数字滤波器" title="数字滤波器">数字滤波器的设计原理及其在DSP上的实现思路,并对用DSP实现IIR数字滤波的方法进行了分析。用MATLAB计算出IIR数字滤波器的系数,考虑到溢出问题,采用级联" title="级联">级联的形式对滤波器进行分解,最后在TMS320VC5416 DSP上得以实现,并通过CCS(come composer studio)的输入输出功能和RTDX(real-time data exchange)的功能保证实现结果和仿真结果的一致性。
  关键词: IIR数字 滤波器 DSP 算法


  数字滤波器在各种数字信号处理中发挥着十分重要的作用,数字滤波器设计一直是信号处理领域的重要研究课题。常用的数字滤波器有FIR滤波器和IIR滤波器,其中IIR数字滤波器因具有结构简单、占用存储空间少、运算速度快、较高的计算精度和能够用较低的阶数实现较好的选频特性等特点[1],得到了广泛应用。DSP芯片有适合于数字信号处理的软件资源和硬件资源,是实现数字信号处理的重要途径[2]。目前所见文献,多数为滤波器的模型设计,所得结果也是在MATLAB等实验环境下模拟仿真完成的,带有很大的局限性。本文讨论IIR数字滤波器在DSP上的实现思路,并对其实现方法" title="实现方法">实现方法进行了分析。
1 数字IIR滤波器的理论设计分析
  数字滤波器实际上是一个采用有限精度算法实现的线性非时变离散系统,滤波器的功能实现实际上是通过大量的加法运算和乘法运算完成的。IIR数字滤波器差分方程的一般形式为:
  

  从IIR数字滤波器的实现来看,有直接型、级联型、并联型和格型等基本网络结构。不同的结构形式会有不同的运算误差,其稳定性、运算速度、所占用的存储空间等也有所不同[3]。其中直接Ⅱ型仅需要N级延迟单元,且可作为级联型和并联型结构中的基本单元,是最常用的IIR数字滤波器结构之一。
  IIR数字滤波器的设计方法" title="设计方法">设计方法有两类[4],一类是借助于模拟滤波器的设计方法设计出模拟滤波器,利用冲激响应不变法或双线性变换法转换成数字滤波器,然后用硬件或软件实现;另一类是直接在频域或时域中进行设计,设计时需要计算机作辅助工具。对系统传递函数为
  
的IIR数字波滤器来说,设计的任务就是寻求一种因果关系和物理上可实现的系统传递函数H(z),使其频率响应H(e)能够满足所希望得到的频域指标。
2 IIR数字滤波器在DSP上的实现方法及实现过程
2.1 IIR数字滤波器在DSP上的实现步骤和条件

  IIR数字滤波器在DSP上的设计过程如下:
  (1)根据指标确定滤波器的类型,设计出滤波器的参数;
  (2)根据DSP的特点(字长、精度等)对参数进行取舍、量化,然后进行仿真;
  (3)根据仿真结果对滤波器的结构、参数再次进行调整,直到满足要求为止;
  (4)在DSP上用语言实现滤波器功能。
  定点DSP芯片,既可以做定点运算,也可以做浮点运算。一个算法,既可以用汇编语言编程实现,也可以用高级语言(C,C++)实现。而一个IIR数字滤波器是否可以在DSP上实现,最终要看此算法是否满足两个条件:执行时间和精度。一个算法的精度再高,如果做不到实时,也没有实用价值;相反,如果执行时间很快,但精度满足不了要求,也就无从实现滤波功能。IIR数字滤波器在DSP上的实现思路,应该是在满足上面两个条件的前提下,找到尽可能简易的实现方法。
2.2 IIR数字滤波器在TMS320VC5416 DSP上的实现过程
  借助于计算机强大的仿真功能,在MATLAB环境下设计一个IIR数字滤波器变得十分容易[5]。但是要在DSP上实现此滤波器功能,则需要对滤波器的结构、系数等参数进行改进。下面以一个低通IIR数字滤波器在DSP芯片TMS320VC5416上的实现为例,叙述其实现过程。
  TMS320VC5416是DSP芯片的主要供应商TI公司最近推出的5000系列中的高性能DSP,该处理器为16位定点DSP,最高运算速度可达160MIPS,内带256KB的RAM,有128KB的数据空间,最大程序容量高达16MB,有3个McBSP和6个DMA通道并且支持外部DMA,内核电压低至1.5V。其CPU由于运算速度快、内部资源充足、接口灵活、功耗低,非常适合做复杂算法运算。
  低通IIR数字滤波器的参数如下:采样率为16000Hz,截止频率为500Hz,采用butterworth模型设计时阶数为7阶,在MATLAB6.5环境下得到的b系数和a系数如表1所示。


  从理论上说,可以用高阶" title="高阶">高阶IIR数字滤波器实现良好的滤波效果。但由于DSP本身有限字长和精度的因素,加上IIR滤波器在结构上存在反馈回路,是递归型的,再者高阶滤波器参数的动态范围很大。这样一来造成两个后果:结果溢出和误差增大,从而导致算法无法在DSP上实现。
  解决此问题的有效方法是把高阶IIR数字滤波器简化成几个2阶滤波器来设计,即采用级联结构。因此系统函数为:
  H(z)=H1(z)H2(z)…Hn(z)      (3)
  上述7阶IIR数字滤波器采用级联的结构后变成4个滤波器级联的形式,每个滤波器的系数如表2所示。


  TMS320VC5416是16位DSP。在CCS下,它的浮点数格式占用两个字,即32bit。通过CCS的数据输入输出功能和RTDX功能,可以随时观察DSP结果和理论仿真结果之间的差异,及时发现数据的溢出和计算误差。对表2的系数取7个有效位(在CCS下浮点数的有效位为7位),计算结果如图1所示。


  图中为输入和滤波后的波形,信号频率为500Hz。从图中可以看出,滤波没有产生溢出现象且滤波效果满足设计要求。


  程序流程如图2。采用间接寻址指向数据存储单元,主要指令为加法、乘法和循环实现,这些都可以通过MAC等指令直接实现。需注意的是要对乘法运算结果进行溢出保护。另外,因为主程序框架采用C结构,而算法由汇编语言实现,所以要注意不同环境下寻址方式的区别,当从C环境进入直接寻址时,要先确定DP值,以免带来不确定的计算结果。数据采集时要先通过DSP的DMA功能将输入数据保存在外部SRAM中,采样结束后再将要滤波的数据通过DMA载入内部RAM中,从而提高处理速度。考虑到IIR数字滤波器的运算特点,某一时刻的输入数据参加一次运算后不再参与下次运算,只有各级滤波器输出结果需要参与多次运算,因此滤波结果和输入数据可以共用同一存储地址,从而节省存储空间。
  除此之处,还要注意以下问题:
  (1)IIR数字滤波器是针对采样率固定的系统设计的,更改系统或系统采样率改变时应重新设计。
  (2)用到的数据存储单元,程序开始时应对这些单元进行初始化。如果要进行连续滤波,应保存上一次滤波的结果。
  (3)IIR数字滤波器的滤波结果会引起相位的延迟,故对相位严格要求的场合,需加全通网络进行较正,或选用FIR滤波器实现滤波功能。
  IIR数字滤波器以它优越的性能,在电力、通信和测控等领域得到广泛应用。本文针对TI公司的TMS320VC5416 DSP,叙述了IIR数字滤波器的理论设计及在DSP上的实现过程。根据其实现思路,可以很方便设计出符合要求的滤波器。该方法具有很强的实用性,对FIR滤波器的设计及滤波器在嵌入式系统中的实现也有很好的参考价值。通过“变压器绝缘套管介损在线监测”等测控系统中的滤波器设计和实现表明,设计方法简单、方便、实现灵活,满足工程实际要求。
参考文献
1 邢培育,崔克清.一种基于TMS320C5402的数字IIR滤波器设计[J].数据采集与处理,2002;17(2):227~230
2 张雄伟,曹铁勇.DSP芯片的原理与开发应用(第2版)[M].北京:电子工业出版社,2001
3 高宇晨,戴居丰.改进的IIR滤波器避免运算溢出和定点DSP的实现[J]. 天津通信技术,2001;(3):31~34
4 陈爱萍,胡晓东.基于MATLAB的IIR数字滤波器的设计[J]. 湖南工程学院学报,2004;14(3):8~10
5 成跃乐,李东兴,王文畅. MATLAB6.1环境下IIR数字滤波器的设计[J]. 山东理工大学学报(自然科学版),2003;17(5):82~85

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。