一种改进型的FIR数字滤波器设计
曹斌芳,何怡刚,胡惟文,傅祖清
在数字信号处理中,滤波占有极其重要的作用,数字滤波器是谱分析、雷达信号处理、通信信号处理应用中的基本处理算法。目前常用的滤波器设计方法普遍采用Matlab仿真,DSP实现。但这一传统设计方法需要的开发周期较长,且设计过程反复进行,非常不便。
针对这一问题,出现了系统级设计方法的构想将Matlab算法仿真和DSP的实现融合在一起。文中应用Matlab Link For CCS Development Tools进行系统级设计,来完成FIR滤波器的设计。
1 FIR数字滤波器设计的基本步骤
数字滤波器根据其冲激响应函数的时域特性,可分为2种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。FIR系统不像IIR系统那样易取得较好的通带和阻带衰减特性,要取得较好的衰减特性,一般要求H(z)阶次要高,也即M要大。FIR系统有自己突出的优点:系统总是稳定的;易实现线性相位;允许设计多通带(或多阻带)滤波器,后两项都是IIR系统不易实现的。FIR数字滤波器的设计方法有多种,如窗函数设计法、频率采样法和Chebyshev逼近法等。随着Matlab软件尤其是Matlab的信号处理工作箱的不断完善,不仅数字滤波器的计算机辅助设计有了可能,而且还可以使设计达到化。
FIR数字滤波器设计的基本步骤如下[1]:
(1)确定技术指标
在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指标。在很多实际应用中,数字滤波器常被用来实现选频操作。因此,指标的形式一般在频域中给出幅度和相位响应。幅度指标主要以2种方式给出。种是指标。他提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。第二种指标是相对指标。他以分贝值的形式给出要求。本文中滤波器的设计就以线性相位FIR滤波器的设计为例。
(2)逼近
确定了技术指标后,就可以建立一个目标的数字滤波器模型(通常采用理想的数字滤波器模型)。之后,利用数字滤波器的设计方法(窗函数法、频率采样法等),设计出一个实际滤波器模型来逼近给定的目标。
(3)性能分析和计算机仿真
上两步的结果是得到以差分或系统函数或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。
2 FIR数字滤波器的传统设计方法
传统的FIR数字滤波器设计流程分为2个部分:开发设计和产品实现。在开发设计部分完成方案设计和算法设计与验证,一般用Matlab语言进行仿真,当仿真结果满意时,再进入产品的实现阶段。在实现阶段,将开发设计的阶段的算法用C/C++或者汇编语言实现,在硬件的单片机或DSP目标板上实现。
下面以电力系统中的用于滤除高次谐波的低通滤波器为例,介绍设计线性相位FIR低通数字滤波器的传统设计方法。
2.1 FIR滤波器的Matlab仿真[2]
在电力分析实验仪中,只要求分析20次以下的谐波,30次以上的谐波由抗混叠滤波器滤波,20-30次的谐波则由数字滤波器滤除。所以电力系统的低通滤波器的技术指标如下:通带截止频率为1 000Hz,阻带截止频率为1 500Hz,通带波纹为0.001,阻带波纹为0.001,采样频率为4 000Hz,阻带衰减小于50 dB,因此设计中采用汉明窗比较合适。
FIR滤波器的设计用Matlab数字信号处理软件包提供的专用函数来直接求取是非常方便的。
先求出滤波器的阶数N:N=ceil(n)+1,通过相关程序仿真可以计算出N=28。
滤波器h(n)的系数和他的幅频特性:
调用格式为:b=fir1(N,wc,’ftype’,window)或b=fir2(N,wc,m,window);编制程序并运行,表1为计算所得滤波器系数,图1所示为设计的低通滤波器频率响应曲线。由此可见基本满足性能指标。h(n)的系数见表1。
输入一混叠信号来测试所设计滤波器的功能:输入信号是频率为f1=400Hz和f2=1 800Hz的正弦交流信号。
S1=sin(400×2πt);
S2=sin(1800×2πt);
S=S1+S2
图2为混叠信号波形S=S1+S2。
图3经滤波器滤波后的波形。由此可见,仿真结果基本令人满意。然后用DSP来实现系统。
将上述系统存盘,建立一个数据文件fir01.txt,将Matlab中产生的fir01.txt文件,通过执行转换命令,将自动变换为Firdata.inc滤波器系数文件。转换命令为(在Matlab下):!firdata fic01.txt
2.2 FIR数字滤波器的C54实现
TMS320C5416有很强的数据处理功能[3],带数据移位的加法指令MACD在循环执行时,一但流水线启动,该指令就变为单周期指令。可以快速完成滤波器的设计和运算。
下面讨论上述仿真得到的FIR滤波器的设计[4],程序流程图如图4所示。
根据上述运算和流程图编制对称FIR低通滤波器程序,源程序清单略。在CCS5000上进行仿真调试运行,利用观察窗口可以看到如下图形,并分析输入信号和输出信号的频谱,结果如图5,图6所示。
输入信号是频率为f1=400Hz和f2=1 800Hz的正弦交流信号的叠加。通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则被滤除。滤波器实现了目标要求。
这种方法尽管能设计出较好的滤波器。但需要用CCS把目标DSP程序运行的中间结果保存到PC机的硬盘上,然后调到Matlab工作空间,与Matlab算法的中间结果进行比较,可以发现DSP程序中由于设计或者导致的结果偏差。如此过程反复进行,非常不便。
下面提出了一种改进型的设计方法。
3 滤波器设计的改进方法
目前提出了一种系统级设计方法的构想[5]。系统级设计方法的是将算法设计与系统级设计仿真在统一的环境中进行,进而将开发流程的两个部分有效地结合在一起。进行系统级设计需要一个统一的开发环境,且在该开发环境中可以对系统结构、算法进行描述,还能够对系统不同层次、不同组件和不同数据类型进行建模。Matlab Link for CCS Development Tools就是为了完成系统级设计出现的。
3.1 Matlab Link for CCS Development Tools简介
Mathworks公司和TI公司联合开发的Matlab Link for CCS Development Tools(CCS Link)提供了Matlab 和CCS的接口,即把Matlab和TI CCS及目标DSP连接起来。利用此工具可以像操作Matlab变量一样来操作TI DSP的存储器或寄存器,即整个目标DSP对于Matlab好像是透明的,开发人员在Matlab环境中就可以完成对CCS的操作。Matlab Link for CCS Development Tools可以支持CCS能够识别的任何目标板,包括TI公司的DSP,EVM板和用户自己开发的目标DSP(C2000,C5000,C6000)板。
3.2 系统级设计探讨
CCS Link向用户提供的3种接口如图7,可以完成系统级设计。
3.3 数字滤波器的系统级设计方法
利用Link for CCS IDE接口实现CCSIDE和Matlab之间的连接来设计FIR数字滤波器,利用此连接可以在Matlab控制下操作DSP的应用程序,利用Matlab中强大计算分析、可视化工具来分析和对比目标程序运行中的结果,大大缩短调试开发系统的周期。
具体设计步骤如下[6]:
(1)选择DSP型号:实验中用TMS320C5416DSP;
(2)创建CCS IDE连接对象;
(3)利用Matlab把文件加载到CCS IDE中;
(4)在Matlab环境下对CCS IDE连接对象进行操作;
(5)关闭CCS IDE连接对象。
从这个设计步骤中可以看出,在Matlab环境下操作DSP中变量或者寄存器是很方便的。这样就可以在Matlab环境下完成DSP程序的仿真调试。而不用像传统的开发要把DSP运行结果调回PC机验证,方便了开发设计,缩短了开发周期。
用这种方法所设计滤波器结果和上面基本相同,只是设计过程得到了很大简化,方便了开发设计。
4.结语
应用Matlab对DSP进行系统级的设计极大地改进了传统的设计方法。Matlab系统级的设计环境,有助于在设计早期发现错误和应对系统复杂性不断增加的挑战,方便了复杂DSP应用系统的设计。所设计的数字滤波器和传统设计的滤波器比较,速度提高了很多,设计过程得到了很大的简化,方便了开发设计。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。