- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
以MATLAB仿真和DSP设计为基础,实现FIR数字滤波器
1、数字滤波器原理
对于数字滤波器,描述系统特性用差分方程。设其输入序列为x(k),输出序列为y(k),则它们之间的关系可以用差分方程来表示:
y(k})+b1y(k-1)+…+bMy(k-M)=a0x(k)+a1x(k-1)+…+anx(k-N) (1)
其中,y(k)系数一般取1;b1,…bM及a0,…aN为常系数;对于特定的系统,M和N为常数,分别代表输出最高阶数和输入最高阶数。
2、FIR数字滤波器设计方案
数字滤波器的设计有无限冲激响应滤波器(IIR)和有限冲激响应滤波器(FIR)两种选择。无限冲激响应滤波器的设计是借助模拟滤波器转换的设计方法,一般有公式和图表可查询,另外还有一些典型模拟滤波器可供选择,这种方法相对比较简单。有限冲激响应滤波器主要采用非递归结构,可以保证绝对的稳定,这有利于对谐波相位的分析。
在数字滤波器差分方程的基础上,如果全部ak=0(k=0,1,…,N),此时系统的输出只和输入x(n-k)有关系,则以上公式成为没有反馈的递归结构。设FIR滤波器的单位冲激响应h(r)为一个N点有限长序列,其中0≤r≤N-1。
则FIR数字滤波器的传递函数可以表示为
从FIR数字滤波器传递函数表达式可以看出,其传递函数是一个Z-1的N-1次多项式,它在z平面上有N-1个零点,没有极点(有时认为在原点上有N-1个重极点)。其传递函数实际上就是单位抽样序列的z变换。当数字滤波器的技术指标确定后,可以用一定的方法去逼近,目前FIR滤波器设计主要有3种方法:窗函数法、频率抽样法和切比雪夫最佳一致逼近法。
FIR滤波器的设计任务是根据给定的技术指标确定一个传递函数H(z),使其频率响应满足给定的要求。这些方法设计出的滤波器特性都是在不同意义上对理想频率特性的逼近。
3、FIR数字滤波器的设计
若信号高频分量很小,信号大部分能量集中在低频处,那么谐波测量仪只要求测到20次谐波就可以了,截止频率为1 000 Hz左右,20次以上的谐波需要由滤波器滤除,为了达到更好的滤波效果,在硬件滤波的基础上又增加了数字滤波器。这里以有闭合公式可循的窗函数法为例来介绍FIR滤波器设计。
3.1 滤波系数确定方法
首先,各技术指标如下:
FIR滤波器的设计采用MATLAB数字信号处理软件包提供的专用函数来直接求取FIR滤波器系数。在MATEAB中,提供了设计滤波器的函数。采用窗函数方法的函数firl,调用格式为:b=firl(n,ωn、window)或b=firl(n,ωn),其中n是滤波器阶数,ωn是0~1的数,ωn=ωc/2π=0.25,window为窗函数类型。由于滤波器长度N为34,因此阶数n=N-1=33,则求取滤波系数的表达式为b=firl(33,0.25)。表1为利用MATLAB计算所得的滤波系数表。
3.2 FIR数字滤波器MATLAB仿真设计
在满足各技术指标的前提下,经MATLAB仿真,图1为频率响应曲线,阻带衰减小于50 dB。图2为S=S1+S2+S3的波形,其中S1=sin(50x 2xπxt),S2=0.15xsin(25x50x2xπxt),S3=0.1xsin(20x50x2xπxt)。图3为滤除掉25次谐波S2和20次谐波S3后的波形图。
由滤波前后两个波形对比可以看出,该滤波器对20次以上谐波的滤除效果比较理想。
3.3 FIR数字滤波器的DSP实现
实现FIR滤波的核心器件是美国德州仪器公司生产的TMS320F2812DSP芯片。芯片内12位精度的A/D转换单元对输入的模拟信号进行采样,DSP读取采样值后对每一点进行FIR滤波处理,将数据存入内部存储器,为下一步进行FFT运算做准备。以下为FIR滤波器流程图。
下面对程序流程作详细说明:
首先初始化DSP寄存器,分配存储单元,并定义一些变量名称,接着在数据存储区中开辟一个N单元的缓冲区,存放由MATLAB设计出的N个滤波系数。接下来读入采样值,并存入相应存储器A,然后开始滤波运算。
具体运算步骤如下:
1)累加器ACC清零,初始化两个准备相乘的存储单元A与B的计数值K和L;
2)将第K个采样值AK与滤波器系数序列第L个数BL相乘(K+L=N+1),并将乘积送入累加器进行累加;
3)将第K-1个采样值AK-1存入AK单元,此时AK中的原数值被覆盖;
4)重复(2)~(3)直至共完成N次乘加运算;
5)输出处理结果。
滤波运算采用FFT算法。DSP控制器特有的反序间接寻址,为FFT算法的实现提供了方便。间接寻址方式还可以实现增/减l或增/减一个变址量,这就很容易实现各种查表方法。
Matlab仿真能够轻松设计出具有严格线性相位要求的滤波器,在应用中只需对程序中滤波器的起始频率、截止频率、采样频率和窗函数等参数进行修改就可实现需要的滤波功能,实用性强。采用DSP控制器来实现FFT运算从而使设计实现实时控制。利用Matlab辅助DSP实现FIR滤波器的设计是解决滤波器从设计到实现的有效办法,可以缩短DSP应用程序的开发时间,提高了设计效率,具有很强的实用性。