x(n)H(0)y(n)1N?z?N0WNz?1H(1)?1WNz?1H(N-1)?N?1WNz?1
图2-5 FIR滤波器的频率采样结构
频率采样结构的优点:
1)在频率采样点?k,H(ej?k)?H(k),只要调整H(k)就可以有效地调整频响特性。
2)只要h(n)长度N相同,对于任何频响,其梳状滤波器部分和N个一阶网络部分完全相同,只是各支路增益H(k)不同。相同部分便于标准化、模块化。
缺点:
1)寄存器长度都是有限的,零、级点可能不能正好抵消,造成系统不稳定。2)当N很大时,其结构很复杂,需要的乘法器和延时单元很多。
8
3 FIR数字滤波器设计
FIR数字滤波器的设计方法有窗函数法、频率采样法和基于firls函数和
remez函数的最优化方法。MATLAB语言中的数字信号处理工具箱,提供了一些滤波器的函数,使FIR滤波器的运算更加方便和快捷。在MATLAB中提供的滤波函数有fir1(),此函数以经典的方法实现加窗线性相位FIR数字滤波器设计,可以设计出低通、高通、带通和带阻滤波器;fir2函数设计的FIR滤波器,其滤波的频率特性由矢量f和m决定,f和m分别为滤波器的期望幅频响应的频率相量和幅值相量。Firls()和remez()的基本格式用于设计I型和II型线性相位FIR滤波器,I型和II型的区别是偶函数还是奇函数。freqz()用于求数字滤波器的频率响应。并且提供了各种窗函数的函数,比如,hamming()是海明窗函数,hanning()是汉宁窗函数,kaiser()是凯泽窗函数,使在设计的过程中,不用自己重新设计窗函数。
Simulink是MATLAB众多工具包中的一员,对于建模,Simulink提供了一个图形化的用户界面(GUI)。Simulink包括一个复杂的由接收器、信号源、线性和非线性组件以及连接件组成的模块库。定义完一个模型后,就可以通过Simulink的菜单或者在MATLAB的命令窗口输入命令对它进行仿真。使用Scopes或者其他的显示模块,可以在运行仿真时观察到仿真的结果。另外,还可以在仿真时改变参数,并且立即就可看到变化。
3.1 窗函数法设计FIR数字滤波器
设我们所要设计的FIR滤波器的传输函数是Hd(ej?),hd(n)是与其对应的单位脉冲响应,因此
?Hd(ej?)?n????j?nh(n)e (3-1) ?d1hd(n)?2?????Hd(ej?)ej?nd? (3-2)
如果我们能够在Hd(ej?)已知的情况下,求出hd(n),经过Z变换可得到滤波器的系统函数。通常情况下理想数字滤波器的单位脉冲相应hd(n)是无限长的,且是非
9
因果序列。获得有限脉冲响应滤波器的一种可能方法是对hd(n)截取一段h(n)来近似代替hd(n),可是这样会改变原来的滤波器指标,出现吉布斯效应误差。
窗函数法就是用被称为窗函数的有限加权序列w(n)来修正式(1)的傅里叶基数以求得要求的有限脉冲响应序列h(n),即
h(n)?hd(n)w(n) (3-3)
w(n)是有限长序列,当n<0或n>N-1时,w(n)=0。
这种方法的重点在于选择某种合适的窗函数。要求窗函数主瓣宽度尽可能窄,以获得最小的过渡带;旁瓣相对值尽可能小,以使得通带波纹小,并且阻带衰减大。
下面介绍几种常用的窗函数:
1.矩形窗(Rectangle Window)
wR(n)?RN(n)(3-4)
其频率函数为:
N?1?j?sin(N?/2)2WR(ej?)?e (3-5)
sin(?/2)
2.三角形窗(Bartlett Window)
1?2n,0?n?(N?1)??N?12wBr(n)?? (3-6)
2n1?2?,(N?1)?n?N?1?N?12?其频率函数为:
N?1?j(???)??2sin(N?/4)j?2WBr(e)??e (3-7) ?N?sin(?/2)?23.汉宁(Hanning)窗,又称升余弦窗
1?2n??wHn(n)??1?cos()?RN(n) (3-8)
2?N?1?利用傅里叶变换得到频率函数为:
?2?2????j?N2?1?W(e)??0.5WR(?)?0.25?WR(??)?WR(??)??eN?1N?1????j??WHn(?)eN?1?j?2 (3-9)
当N?1时,N?1?N,所以窗函数的幅度函数为
2?2???WHn(?)?0.5WR(?)?0.25?WR(??)?WR(??)? (3-10)
NN??4.汉明(Hamming)窗,又称改进的升余弦窗
10
2n???wHm(n)??0.54?0.46cos()?RN(n) (3-11)
N?1??其幅度函数为:
2?2???WHm(?)?0.54WR(?)?0.23?WR(??)?WR(??)? (3-12)
N?1N?1??5.布莱克曼(Blankman)窗,又称二阶升余弦窗
2n?4n???wBl(n)??0.42?0.5cos()?0.08cos()?RN(n) (3-13)
N?1N?1??其幅度函数为:
2?2???WBl(?)?0.42WR(?)?0.25?WR(??)?WR(??)?N?1N?1?? (3-14)
4?4????0.04?WR(??)?WR(??)?N?1N?1??6.凯泽(Kaiser)窗
I0(?1?[1?2n/(N?1)]2)wk(n)?,I0(?)上述窗函数的基本参数如下表
窗函数 矩形窗 三角形窗 汉宁窗 汉明窗 布莱克曼窗 凯泽窗 旁瓣峰值幅度/db -13 -26 -31 -40 -57 -57 0?n?N?1 (3-15)
其中:β是一个可自由选择的参数,I0( x)是第一类修正零阶贝塞尔函数[10].
过渡带宽 4?/N 8?/N 8?/N 8?/N 12?/N 10?/N 阻带最小衰减/db -21 -25 -44 -53 -74 -80 窗函数法设计滤波器的步骤:
1)根据技术要求确定待求滤波器的单位取样响应hd(n)。
2)根据对过渡带和阻带衰减的要求,选择窗函数的形式,并估计窗口长度N。 3)计算滤波器的单位取样响应h(n):
h(n)?hd(n)?(n) (3-16)
式中,?(n)是前面所选择好的窗函数。
4)检验技术指标是否满足要求。根据下式计算:
11
H(e)??h(n)e?j?nj?n?0N?1 (3-17)
如果H(ej?)不满足要求,根据具体情况重复步骤(2)(3)(4)步,直到满足要求为止。
本文以一个FIR滤波器的设计为例说明如何使用MATLAB设计数字滤波器 设计实例:用窗函数法设计线性相位FIR低通数字滤波器,要求通带截止频率Wp=0.4*?,阻带截止频率Ws=0.5*?, 通带衰减不大于3db,阻带衰减不小于40db。 1.程序如下: Wp=0.4*pi; Ws=0.5*pi; Wdel=Ws-Wp; N=ceil(8*pi/Wdel); Wn=(0.4+0.5)*pi/2; window=hanning(N+1); b=fir1(N,Wn/pi,window); freqz(b,1,512)
程序执行后得幅频和相频如下图所示:
50Magnitude (dB)0-50-100-15000.10.20.30.40.50.60.70.8Normalized Frequency (?? rad/sample)0.910Phase (degrees)-1000-2000-3000-400000.10.20.30.40.50.60.70.8Normalized Frequency (?? rad/sample)0.91
12