您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > FIR数字滤波器的Matlab实现
第7章FIR数字滤波器的Matlab实现7.1实验目的学习用窗函数法设计FIR数字滤波器的原理及其设计步骤;学习编写数字滤波器的设计程序的方法,并能进行正确编程;根据给定的滤波器指标,给出设计步骤。7.2实验原理及实例分析7.2.1FIR低通数字滤波器的设计原理如果系统的冲激响应)(nhd为已知,则系统的输入/输出关系为:)()()(nhnxnyd对于低通滤波器,只要设计出低通滤波器的冲激响应函数,就可以由上式得到系统的输出了。假设所希望的数字滤波器的频率响应为)(jwdeH,它是频域的周期函数,周期为2,那么它与)(jwdeH相对应的傅立叶系数为dweeHnhjnwjwdd)(21)(以)(nhd为冲激响应的数字滤波器将具有频域响)(jwdeH。但是将)(nhd作为滤波器脉冲响应有两个问题:(1)它是无限长的,与FIP滤波器脉冲响应有限长这一前提不一致(2)它是非因果的,0,0)(nnhd对此,要采取以下的措施,(1)将)(nhd截短(2)将其往右平移,由此得到)(2nh的实际频域响应jnwNnjwdenheH102)()(,与理想频域响应)(jwdeH相近,但不完全一致。理论证明上述现象是对)(nhd进行简单截短处理的必然结果,一般称为吉布斯现象,为尽可能的减少吉布斯现象,应对)(nhd进行加窗截取,即以)()()(nWnhnhNd作为FIR滤波器的系数。常用的窗函数有矩形窗、海明窗和布莱克曼窗等。7.2.2用窗函数法设计FIR滤波器Matlab设计FIR滤波器有多种方法和对应的函数,见表7-1。表7-1matlab设计FIR滤波器的方法和函数方法描述函数窗方法使用窗函数和逆傅立叶变换实现fir1,fir2,kaiserord等多带方法包含子带频率域firls,remez等最小二乘法使用最小二乘法将整个频率域上的错误几率压缩到最小fircls,fircls1等任意响应法使用任意响应,包括非线性相位以及复滤波器cremez等余弦法使用三角函数的低通响应firrcos等窗函数方法不仅在数字滤波器的设计中占有重要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs现象所带来的影响。窗函数设计线性相位FIR滤波器步骤如下:(1)确定数字滤波器的性能要求,临界频率}{kw,滤波器单位脉冲响应长度N(2)根据性能要求,合理选择单位脉冲响应h(n)的奇偶对称性,从而确定理想频率响应)(jwdeH的幅频特性和相频特性(3)求理想单位脉冲响应)(nhd,在实际计算中,可对)(jwdeH采样,并对其求IDFT的)(nhM,用)(nhM代替)(nhd(4)选择适当的窗函数w(n),根据)()()(nWnhnhNd求所需设计的FIR滤波器单位脉冲响应(5)求)(jwdeH,分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述设计过程,以得到满意的结果FIR1.m调用格式:a)b=fir1(N,wn)b)b=fir1(N,wn,’hign’)N为滤波器的阶次,wn是通带截止频率,其值在0~1之间,1对应抽样频率的一半;b是设计好的滤波器系数h(n)。对于格式a),若wn是标量,则用来设计低通滤波器,若wn是1×L的向量,则用来设计带通(带阻)滤波器。其格式为:b=fir1(N,wn,’DC-1’)或b=fir1(N,wn,’DC-0’),其中,前者保证第一个带为通带,后者保证第一个带为阻带。b)用来设计高通滤波器。用于产生窗函数的matlab文件有如下8个:bartlett.m(巴特利特窗)blackman.m(布莱克曼窗)rectangle.m(矩形窗)hamming.m(汉明窗)hanning.m(汉宁窗)triang.m(三角窗)chebwin.m(切比雪夫窗)Kaiser.m(凯泽窗)【实例7-1】设计一个34阶的高通滤波器,截止频率为0.48,使用具有30dB波纹的chebyshev窗。解:源程序如下:b=fir1(34,0.48,'high',chebwin(35,30));freqz(b,1,512)其响应波形如图7-1所示。图7-1带通FIR滤波器【实例7-2】设计一个24阶FIR带通滤波器,通带频率0.350.65w。解:源程序如下:wn=[0.350.65];N=24;b=fir1(2*N,wn,'DC-0');%DC-0表示第一个带为阻带,这样设计出来的滤波器为带通滤波器。freqz(b,1,512)图7-2带通FIR滤波器【实例7-3】设计具有下面指标的低通FIR滤波器dBAwdBRwSspp50,3.0,25.0,2.0由于其最小阻带衰减为50dB,因此可以选择hamming窗来实现这个滤波器,因为它具有较小的过渡带。解:MATLAB源程序为%数字滤波器指标wp=0.2*pi;ws=0.3*pi;tr_width=ws-wp;%通带宽度N=ceil(6.6*pi/tr_width)+1;%滤波器长度ifrem(N,2)==0N=N+1;endNw=N;%滤波器长度为奇数n=[0:1:Nw-1];wc=(ws+wp)/2;%截止频率alpha=(Nw-1)/2;m=n-alpha+0.00001;%如果不加0.00001,当n=alpha时,m为0,下式分母为0,不能执行hd=sin(wc*m)./(pi*m);%理想滤波器的冲激响应%生成hamming窗w_ham=(hamming(Nw))';%频域图像的绘制h=hd.*w_ham;%滤波器实际冲激响应freqz(h,[1])figure(2);subplot(2,2,1),stem(n,hd);title('理想脉冲响应')axis([0Nw-1-0.30.3]);xlabel('n');ylabel('hd(n)')subplot(2,2,2),stem(n,w_ham);title('hamming窗')axis([0Nw-1-0.31.2]);xlabel('n');ylabel('w(n)')subplot(2,2,3),stem(n,h);title('实际脉冲响应')axis([0Nw-1-0.30.3]);xlabel('n');ylabel('h(n)')其响应波形如图7-2所示。图7-3hamming窗函数设计FIR滤波器【实例7-4】设带通滤波器的指标为dBA选择Blackman窗来实现这个滤波器。解:MATLAB源程序为%数字滤波器指标ws1=0.2*pi;wp1=0.35*pi;ws2=0.65*pi;wp2=0.8*pi;As=60;tr_width=min((wp1-ws1),(wp2-ws2));%过渡带带宽N=ceil(11*pi/tr_width)+1;ifrem(N,2)==0N=N+1;endNw=N;n=[0:1:Nw-1];wc1=(ws1+wp1)/2;wc2=(ws2+wp2)/2;alpha=(Nw-1)/2;m=n-alpha+0.00001;%如果不加0.00001,当n=alpha时,m为0,下式分母为0,不能执行hd=sin(wc2*m)./(pi*m)-sin(wc1*m)./(pi*m);%理想滤波器的冲激响应%生成blackman窗w_bla=(blackman(M))';h=hd.*w_bla;%频域图像的绘制freqz(h,[1])figure(2);subplot(2,2,1),stem(n,hd);title('idaelimpulseresponse')axis([0Nw-1-0.40.5]);xlabel('n');ylabel('hd(n)')subplot(2,2,2),stem(n,w_bla);title('blackmanwindow')axis([0Nw-101.1]);xlabel('n');ylabel('w(n)')subplot(2,2,3),stem(n,h);title('actualimpulseresponse')axis([0Nw-1-0.40.5]);xlabel('n');ylabel('h(n)')其响应波形如图7-4所示。图7-4blackman窗函数设计FIR滤波器7.3编程练习1.设计一个48阶FIR带阻滤波器,通带频率00.35,0.65ww。2.用窗函数设计一个线性相位FIR高通滤波器,并满足性能指标:通带边界频率0.66wp,阻带边界频率0.5ws,阻带衰减不小于40db。提示:参考例7-3,4;首先根据阻带衰减,选择合适的窗函数,见课本P342,表7-3。再根据P345,式7-74写出理想滤波器的冲激响应hd。
本文标题:FIR数字滤波器的Matlab实现
链接地址:https://www.777doc.com/doc-6196613 .html