1课程名称:数字信号实验项目:用窗函数法设计FIR数字滤波器指导教师:韩晶专业班级:10电科姓名:冯冬冬学号:201000804044时间:2013-6-14成绩:一、实验目的(1)熟悉基本的窗函数,及其特点。(2)掌握用窗函数法设计FIR数字滤波器的原理和方法。(3)熟悉线性相位FIR数字滤波器特性。二.实验原理(一)FIR滤波器的设计FIR滤波器具有严格的相位特性,这对于语音信号处理和数据传输是很重要的。目前FIR滤波器的设计方法主要有三种:窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。本实验中的窗函数法比较简单,可应用现成的窗函数公式,在技术指标要求不高的时候是比较灵活方便的。它是从时域出发,用一个窗函数截取一个理想的)(nhd得到h(n),以有限长序列h(n)近似理想的)(nhd:如果从频域出发,用理想的)(jwdeh在单位圆上等角度取样得到H(k),根据h(k)得到H(z)将逼近理想的)(zHd这就是频率取样法。(二)窗函数设计法同其它的的数字滤波器设计的方法一样,用窗函数设计滤波器也是首先要对滤波器提出性能指标。一般是给定一个理想的频率响应)(jwdeh,使所设计的FIR滤波器的频率响应)(jweh去逼近所要求的理想的滤波器的响应)(jwdeh窗函数设计的任务在于寻找一个可实现(有限长单位脉冲响应)的传递函数。10)()(NnjwjwnenheH去逼近)(jwdeh。我们知道,一个理想的频率响应)(jwdeh的傅里叶变换20)(21)(dweeHnhjwnjwdd所得到的理想的单位脉冲响应)(nhd往往是一个无限长序列,对)(nhd经过适当的加权、截取处理才得到一个所需要的有限长脉冲响应序列。对应不同的加权、截断,就有不同的窗函数。所要寻找的滤波器脉冲响应就等于理想脉冲响应和窗函数的乘积。即:)()()(nwnhnhd由此可见,窗函数的性质就决定了滤波器的品质。例如:窗函数的主瓣宽度决定了滤波器的过渡带宽;窗函数的旁瓣代销决定了滤波器的阻带衰减。以下是几种常见的窗函数:1、矩形窗)()(nRnwN22、Hanning窗)()]12cos(1[5.0)(nRNnnwN3、Hamming窗)()]12cos(46.054.0[)(nRNnnwN4、Blackman窗)()]14cos(08.0)12cos(5.042.0[)(nRNnNnnwN5、Kaiser窗)(]1))1(2[(1()(020INnInw其中)(0I是零阶贝塞尔函数。Kaiser窗可以通过改变参数,改变其主瓣宽度和旁瓣大小。在MATLAB中产生窗函数十分简单:(1)矩形窗(RectangleWindow)调用格式:w=boxcar(n),根据长度n产生一个矩形窗w。(2)三角窗(TriangularWindow)调用格式:w=triang(n),根据长度n产生一个三角窗w。(3)汉宁窗(HanningWindow)调用格式:w=hanning(n),根据长度n产生一个汉宁窗w。(4)海明窗(HammingWindow)调用格式:w=hamming(n),根据长度n产生一个海明窗w。(5)布拉克曼窗(BlackmanWindow)调用格式:w=blackman(n),根据长度n产生一个布拉克曼窗w。(6)恺撒窗(KaiserWindow)调用格式:w=kaiser(n,beta),根据长度n和影响窗函数旁瓣的β参数产生一个恺撒窗w。表1各种窗函数的性能指标窗函数矩形窗Hanning窗Hammin窗Blackma窗Kaise窗过渡带宽4/N8/N8/N12/N10/N旁瓣峰值(dB)-13-31-47-57不确定加窗后过渡带宽1.8/N6.2/N6.6/N11/N不确定加窗后最大衰减(dB)-21-44-53-74-80(三)Matlab提供了基于窗函数法的FIR滤波器的设计函数fir1和fir2Matlab中,函数fir1()和fir2()利用加窗傅里叶级数法设计FIR滤波器。函数fir1()用来设计传统的LP(低通)、HP(高通)、BP(带通)、BS(带阻)和多频带FIR滤波器;而函数fir2()用来设计具有任意幅度响应的的FIR滤波器。1.fir1:基于窗函数的FIR滤波器设计-标准频率响应形状hn=fir1(M,wc),返回6dB截止频率为wc的M阶(单位脉冲响应h(n)长度N=M+1)FIR低通(wc为标量)滤波器系数向量hn,默认选用哈明窗。滤波器单位脉冲响应h(n)与向量hn的关系为h(n)=hn(n+1),n=0,1,2,3,……,M3B=fir1(M,wc,’ftype’,window)调用格式:n为阶数、wc是归一化截止频率(0Wn1)(如果输入是形如[W1W2]的矢量时,本函数将设计带通滤波器,其通带为W1ωW2)、ftype是滤波器的类型(低通-省略该参数、高通-ftype=high、带阻-ftype=stop)、Window是窗函数。应当注意,在设计高通和带阻滤波器时,阶数N只能取偶数(h(n)长度N+1为奇数)。不过,当用户将N设置为奇数时,fir1会自动对N加1。2.fir2:于窗函数的FIR滤波器设计-标准频率响应形状B=fir2(N,f,m,window)例题1:利用fir1函数设计为信号f=2*sin(2*pi*20*t)+4*sin(2*pi*60*t)设计一低通滤波器滤除频率为60Hz的信号。clear,closeall;fs=200;N1=200;n=0:N1-1;f=n*fs/N1;t=0:1/fs:(N1-1)/fs;x=2*sin(2*pi*20*t)+4*sin(2*pi*60*t);X=abs(fft(x));X1=X/(N1/2);X1(1)=X1(1)/2;plot(f(1:N1/2),X1(1:N1/2));title('原始信号f');N=11;%滤波器节点个数wc=0.5;%归一化截止频率hd=fir1(N,wc);%基于加窗函数的FIR滤波器设计,系统默认窗为hanningft=filter(hd,1,x);%也可以采用ft=fftfilt(hd,f),或ft=conv(f,hd);figure;Y=abs(fft(ft));N2=length(Y);Y1=Y/(N2/2);Y1(1)=Y1(1)/2;plot(f(1:N2/2),Y1(1:N2/2));title('滤波后信号ft');函数fftfilt的调用格式为y=fftfilt(b,x)该格式是利用基于FFT的重叠相加法对数据进行滤波,这种频域滤波技术只对FIR滤波器有效。该函数是通过向量b描述的滤波器对x数据进行滤波。x是等待滤波的信号;b是FIR滤波器的H(z)的分子多项式系数例题2:调用fir2函数逼近截止频率wc=0.6的理想高通30阶FIR数字滤波器设计f=[00.60.61];m=[1100];b=fir2(30,f,m);figure(1);4stem(n,b,'.'),title('h(n)');grid[h,w]=freqz(b,1,128);figure(2)plot(f,m,w/pi,abs(h))legend('Ideal','fir2Designed')title('ComparisonofFrequencyResponseMagnitudes')例题3:利用窗函数法设计一个线性相位的低通滤波器,性能指标为:通带截止频率为0.2pi,阻带起始频率为0.3pi,通带最大衰减为3dB,阻带最小衰减为40dB,编写程序实现,并绘制滤波器的幅频响应与相频响应。wp=0.2*pi;ws=0.3*pi;wdelta=ws-wp;N=ceil(8*pi/wdelta);wc=(wp+ws)/2;b=fir1(N-1,wc/pi,hanning(N));freqz(b,1,512)%求得频率响应,分子为b,分母为1(四)FDATool设计数字滤波器:在MATLAB命令窗口中输入fdatool,即可启动FDATool工具,出现一个综合、操作简单的图形用户界面。FDATool界面分为上下两大区域,一是设计区:用于设置待设计的数字滤波器各种参数,位于界面的下半部分;二是显示区:用于显示所设计的数字滤波器各种特性,位于界面的上半部分。1、在FDATool界面设计区的ResponseType选项中选择Lowpass,在DesignMethod选项中选择FIR,Window选择。然后,在FilterOrder选项中选择11。最后,分别在FrequencySpecifications选项中设置Units为normalized(0to1),wc为0.6。设置完毕后,点击DesignFilter按钮即可完成FIR低通数字滤波器的设计,并在FDATool的FilterSpecifications显示区呈现出滤波器的幅频响应三、实验内容1、利用fir1和三角窗(triang)和汉宁窗(hanning)窗函数分别设计一个N=51,截止频率为wc=0.5的低通滤波器,分别画出冲激响应曲线和幅频响应曲线。三角窗(triang)冲激响应曲线:幅度响应曲线:5频率响应曲线:汉宁窗(hanning)冲激响应曲线:幅度响应曲线频率响应曲线:62、利用fir1及blackman窗设计一个N=53,ws1=0.3、ws2=0.4带阻滤波器,画出幅频响应及相频响应。程序:N=53;%滤波器节点个数ws=[0.3,0.4]h=fir1(N-1,ws,'stop',blackman(N));freqz(h,1,512)%求得频率响应,分子为h,分母为1对应的幅频响应曲线:3、s=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30),信号中包含了5Hz、15Hz、30Hz频率分量,对其采样的频率取100Hz,带通滤波器要把低频5Hz分量滤掉,因此取样频率为fs=100H由wp1=0.35*pi;wp2=0.65*pi;ws1=0.2*pi;ws2=0.8*pi程序:wp1=0.35*piwp2=0.65*pi;ws1=0.2*pi;ws2=0.8*pi;wdelta=min((wp1-ws1),(ws2-wp2));wc1=(wp1+ws1)/2/pi;wc2=(wp2+ws2)/2/pi;N=ceil(8*pi/wdelta);b=fir1(N-1,[wc1,wc2],hanning(N));freqz(b,1,512)%求得频率响应,分子为b,分母为1幅频响应曲线:7四.实验结论通过此次实验我熟悉了基本的窗函数及其特点。掌握了用窗函数法设计FIR数字滤波器的原理和方法,熟悉了线性相位FIR数字滤波器特性。