数字信号处理第三次实验报告——FIR数字滤波器的设计姓名:印友进学号:04012540一、实验目的(1)掌握用窗函数法,频率采样法及优化设计法设计FIR滤波器的原理及方法,熟悉响应的matlab编程。(2)熟悉线性相位FIR滤波器的幅频特性和相频特性。(3)了解各种不同窗函数对滤波器性能的影响。二、实验原理(一)线性相位实系数FIR滤波器按其N值奇偶和h(n)的奇偶对称性分为四种(1)hn为偶对称,N为奇数;jHe的幅值关于0,,2成偶对称。(2)hn为偶对称,N为偶数;jHe的幅值关于成奇对称,不适合作高通。(3)hn为奇对称,N为奇数;jHe的幅值关于0,,2成奇对称,不适合作高通和低通。(4)hn为奇对称,N为偶数;0,20jHe,不适合作低通。(二)窗口法窗函数设计线性相位FIR滤波器步骤:(1)确定数字滤波器的性能要求:临界频率k,滤波器单位脉冲响应长度N;(2)根据性能要求,合理选择单位脉冲响应hn的奇偶对称性,从而确定理想频率响应jdHe的幅频特性和相频特性;(3)求理想单位脉冲响应dhn,在实际计算中,可对jdHe按M(M远大于N)点等距离采样,并对其求IDFT得Mhn,用Mhn代替dhn;(4)选择适当的窗函数wn,根据dhnhnwn求所需设计的FIR滤波器单位脉冲响应;(5)求jHe,分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述设计过程,以得到满意的结果。窗函数的傅式变换jWe的主瓣决定了jHe过渡带宽。jWe的旁瓣大小和多少决定了jHe在通带和阻带范围内波动幅度,常用的几种窗函数有:(1)矩形窗(RectangleWindow):)()(nRnwN(2)汉宁(Hanning)窗,又称升余弦窗:)()]12cos(1[21)(nRNnnwN(3)汉明(Hamming)窗,又称改进的升余弦窗:)()]12cos(46.054.0[)(nRNnnwN(4)布莱克曼(Blankman)窗,又称二阶升余弦窗:)()]14cos(08.0)12cos(5.042.0[)(nRNnNnnwN(5)凯塞(Kaiser)窗:10,)())]1/(21[1()(020NnINnInw其中,是一个可选参数,用来选择主瓣宽度和旁瓣衰减之间的交换关系,一般说来,越大,过渡带越宽,阻带越小衰减也越大。I0(·)是第一类修正零阶贝塞尔函数。若阻带最小衰减表示为ssA10log20,β的确定可采用下述经验公式:50)7.8(1102.05021)21(07886.0)21(5842.02104.0ssssssAAAAAA(三)频率采样法频率采样法是从频域出发,将给定的理想频率响应jdHe加以等间隔采样,然后以此dHk作为实际FIR数字滤波器的频率特性的采样值Hk,由Hk通过IDFT可得有限长序列hn,然后进行DTFT或Z变换即可得jHe。(四)FIR滤波器的优化设计FIR滤波器的优化设计是按照最大误差最小化准则,使所设计的频响与理想频响之间的最大误差,在通带和阻带范围均为最小,而且是等波动逼近的。为了简化起见,在优化设计中一般将线性相位FIR滤波器的单位脉冲响应)(nh的对称中心置于n=0处,此时,线性相位因子α=0。令N=2M+1,则10()(0)2()cos()()cos()MMjnnHehhnnann如希望逼近一个低通滤波器,这里M,c和r固定为某个值。在这种情况下有rcjdeH,00,1)(定义一逼近误差函数:()()[()()]jjdEWHeHe()E为在希望的滤波器通带和阻带内算出的误差值,()W为加权函数,rcKW,10,1)(K应当等于比值12/,1为通带波动,2为阻带波动。在这种情况下,设计过程要求()E在区间c0和r的最大值为最小,它等效于求最小2。根据数学上多项式逼近连续函数的理论,用三角多项式逼近连续函数,在一定条件下存在最佳逼近的三角多项式,而且可以证明这个多项式是唯一的。这一最佳逼近定理通常称作交替定理。在逼近过程中,可以固定K,M,c和r,而改变2,按照交替定理,首先估计出(M+2)个误差函数的极值频率i,i=0,1,...,M+1,共计可以写出(M+2)个方程10()[()(0)2()cos()]()[()()cos()](1)0,1,,1iiMjidnMjidniWHehhnnWHeanniM式中表示峰值误差。一般仅需求解出,接着便可用三角多项式找到一组新的极值频率点,并求出新的峰值误差。依此反复进行,直到前、后两次值不变化为止,最小的即为所求的2。这一算法通常称作雷米兹(Remez)交替算法。三、实验内容(1)N=45,计算并画出矩形窗、汉明窗、布莱克曼窗的归一化的幅度谱,并比较各自的主要特点。源程序:clc,clear;N=45;W1=boxcar(N);[h1,w1]=freqz(W1,1);W2=hamming(N);[h2,w2]=freqz(W2,1);W3=blackman(N);[h3,w3]=freqz(W3,1);plot(w1/pi,20*log10(abs(h1)),'-',w2/pi,20*log10(abs(h2)),'-.',w3/pi,20*log10(abs(h3)),'--');xlabel('归一化频率/pi');ylabel('幅度/dB');grid;legend('Rectangle','Hamming','Blackman');clc,clear;N=45;W1=boxcar(N);[h1,w1]=freqz(W1,1);subplot(3,1,1);plot(w1/pi,20*log10(abs(h1)));xlabel('归一化频率/pi');ylabel('幅度/dB');title('矩形窗');W2=hamming(N);[h2,w2]=freqz(W2,1);subplot(3,1,2);plot(w2/pi,20*log10(abs(h2)));xlabel('归一化频率/pi');ylabel('幅度/dB');title('汉明窗');W3=blackman(N);[h3,w3]=freqz(W3,1);subplot(3,1,3);plot(w3/pi,20*log10(abs(h3)));xlabel('归一化频率/pi');ylabel('幅度/dB');title('布莱克曼窗');运行结果:分析与结论:矩形窗函数具有最窄的主瓣宽度,但有最大的旁瓣峰值;汉明窗函数的主瓣稍宽,而旁瓣较小;布莱克曼窗函数则更甚之。矩形窗设计的滤波器过渡带最窄,但是阻带最小衰减也最差;布莱克曼窗设计的滤波器阻带衰减最好,过度带最宽,约为矩形窗设计的的三倍。汉明窗设计的滤波器处于矩形窗和布莱克曼窗之间。(2)N=15,带通滤波器的两个通带边界分别是3.01,5.02。用汉宁窗设计此线性相位带通滤波器,观察它的实际3dB和20dB带宽。N=45,重复这一设计,观察幅频和相位特性的变化,注意长度N变化的影响。源程序:clc,clear;N=15;h=fir1(N-1,[0.3,0.5],'bandpass',hanning(N));[h1,w1]=freqz(h,1);subplot(2,1,1);plot(w1/pi,20*log10(abs(h1)));xlabel('归一化频率/pi');ylabel('幅度/dB');grid;legend('N=15');subplot(2,1,2);plot(w1/pi,unwrap(angle(h1)));xlabel('归一化频率/pi');ylabel('相位');grid;legend('N=15');clc,clear;N=45;h=fir1(N-1,[0.3,0.5],'bandpass',hanning(N));[h1,w1]=freqz(h,1);subplot(2,1,1);plot(w1/pi,20*log10(abs(h1)));xlabel('归一化频率/pi');ylabel('幅度/dB');grid;legend('N=45');subplot(2,1,2);plot(w1/pi,unwrap(angle(h1)));xlabel('归一化频率/pi');ylabel('相位');grid;legend('N=45');运行结果:分析与结论:观察它的实际3dB和20dB带宽,发现:N=15时,其3DB带宽约为0.2pi,20db带宽约为0.45pi;N=45时,其3DB带宽约为0.16pi,20db带宽约为0.3pi可见N增大,其3db带宽和20db带宽分别减小,滤波器特性变好,过渡带变陡,幅频曲线显示其通带较平缓,波动小,阻带衰减大。相频特性曲线显示其相位随频率变化也变大。(3)分别改用矩形窗和Blackman窗,设计(2)中的带通滤波器,观察并记录窗函数对滤波器幅频特性的影响,比较三种窗的特点。源程序:clc,clear;N=15;h=fir1(N-1,[0.3,0.5],'bandpass',blackman(N));[h1,w1]=freqz(h,1);subplot(2,2,1);plot(w1/pi,20*log10(abs(h1)));xlabel('归一化频率/pi');ylabel('幅度/dB');grid;title('BlackmanN=15');subplot(2,2,2);plot(w1/pi,unwrap(angle(h1)));xlabel('归一化频率/pi');ylabel('相位');grid;title('BlackmanN=15');N=45;h=fir1(N-1,[0.3,0.5],'bandpass',blackman(N));[h1,w1]=freqz(h,1);subplot(2,2,3);plot(w1/pi,20*log10(abs(h1)));xlabel('归一化频率/pi');ylabel('幅度/dB');grid;title('BlackmanN=45');subplot(2,2,4);plot(w1/pi,unwrap(angle(h1)));xlabel('归一化频率/pi');ylabel('相位');grid;title('BlackmanN=45');clc,clear;N=15;h=fir1(N-1,[0.3,0.5],'bandpass',boxcar(N));[h1,w1]=freqz(h,1);subplot(2,2,1);plot(w1/pi,20*log10(abs(h1)));xlabel('归一化频率/pi');ylabel('幅度/dB');grid;title('BoxcarN=15');subplot(2,2,2);plot(w1/pi,unwrap(angle(h1)));xlabel('归一化频率/pi');ylabel('相位');grid;title('BoxcarN=15');N=45;h=fir1(N-1,[0.3,0.5],'bandpass',boxcar(N));[h1,w1]=freqz(h,1);subplot(2,2,3);plot(w1/pi,20*log10(abs(h1)));xlabel('归一化频率/pi');ylabel('幅度/dB');grid;title('BoxcarN=45');subplot(2,2,4);plot(w1/pi,unwr