利用MATLAB窗函数法设计一个可实现的FIR低通滤波器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
1.掌握在MATLAB中窗函数的使用方法,了解不同窗函数之间的差别。
2.使用窗函数法设计一个可实现的FIR低通滤波器。
3.观察在相同长度下,不同的窗函数设计出来的滤波器有什么差别。
4.观察同一个窗在不同长度下设计出来的滤波器有什么差别。
二、实验条件
PC机,MATLAB7.0
三、实验内容
1)通过help查找窗函数在MATLAB中如何实现
通过example了解MATLAB中窗函数的实现,并且利用矩形窗,汉宁窗,哈明窗,布莱克曼窗和凯塞窗来进行接下来的实验。
2)设计物理可实现的低通滤波器
设计思路:因为要设计FIR有限脉冲响应滤波器,通常的理想滤波器的单位脉冲响应h是无限长的,所以需要通过窗来截断它,从而变成可实现的低通滤波器。程序如下:clc;clear all;
omga_d=pi/5;
omga=0:pi/30:pi;
for N=3:4:51;
w1= window(@blackman,N);
w2 = window(@hamming,N);
w3= window(@kaiser,N,2.5);
w4= window(@hann,N);
w5 = window(@rectwin,N);
M=floor(N/2);
subplot(311);plot(-M:M,[w1,w2,w3,w4,w5]); axis([-M M 0 1]);
legend('Blackman','Hamming','kaiser','hann','rectwin');
n=1:M;
hd=sin(n*omga_d)./(n*omga_d)*omga_d/pi;
hd=[fliplr(hd),1/omga_d,hd];
h_d1=hd.*w1';h_d2=hd.*w2';h_d3=hd.*w3';h_d4=hd.*w4';h_d5=hd.*w5';
m=1:M;
H_d1=2*cos(omga'*m)*h_d1(M+2:N)'+h_d1(M+1);
H_d2=2*cos(omga'*m)*h_d2(M+2:N)'+h_d2(M+1);
H_d3=2*cos(omga'*m)*h_d3(M+2:N)'+h_d3(M+1);
H_d4=2*cos(omga'*m)*h_d4(M+2:N)'+h_d4(M+1);
H_d5=2*cos(omga'*m)*h_d5(M+2:N)'+h_d5(M+1);
subplot(312);plot(omga,[H_d1,H_d2,H_d3,H_d4,H_d5]);
legend('Blackman','Hamming','kaiser','hann','rectwin');
subplot(313);plot(abs([fft(h_d1);fft(h_d2);fft(h_d3);fft(h_d4);fft(h_d5)] )');
pause();
end
程序分析:
整个对称窗的长度为N,然而为了在MATLAB中看到窗函数在负值时的形状需将N 变为它的一半,即为2M+1个长度。窗长设置为从3开始以4为间隔一直跳动51。则长度相同的不同窗函数在时域[-M,M]的形状如第一个图所示。
对窗函数进行傅里叶变换时,将零点跳过去先构造一个一半的理想滤波器的脉冲响应hd,再将零点位置求导得出的数赋值进去。将生成的hd左右颠倒形成了一个理想的滤波器的脉冲响应。将构造的理想滤波器的脉冲响应依次与之前定义的窗函数相乘,相乘出来的为列向量,用转置将其变成行向量,形成的h_d就是非理想的低通滤波器的脉冲响应序列。因为h_d为对称奇数长度序列,它的DTFT可以是二倍的离散余弦变化,而零点的位置则直接带入求出,两者相加则是H_d。
则第二个图表示的是五个矩阵向量在频域的变化,而第三个图表示的是五个非理想低
通滤波器的傅里叶变换,图三FFT给出的结果永远是对称的,因为它显示了DFT的周期性。
四、实验结论和讨论
1.不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的,但是我们可以通过选择不同的窗函数对它们的影响进行抑制。
通过实验所得的图形可以发现,当窗口长度N值相等时,矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,形成的低通滤波器的截断效应影响较大,从而影响滤波器的通带的平稳性和阻带的衰减;汉宁窗的旁瓣互相抵消,能量集中在主瓣,能较好的实现低通滤波器的设计;海明窗能量集中于主瓣,截断效应小,更接近于理想低通滤波器;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高。
2.随着N值得变化,通过图像的变化可以看出,窗函数在N值较低时,阻带特性不满足设计要求,只有滤波器阶数较高时,使用海明窗和凯塞窗可以达到阻带衰耗要求。通过图像观察得出随着N的增大,滤波器会越来越逼近理想滤波器。其中,布莱克曼窗最接近理想滤波器。
3.通过这次实验和老师的讲解,掌握了利用MATLAB设计物理可实现的FIR低通滤波器的方法;知道了在不同情况下,如何选用最合适的窗函数来设计滤波器;了解了不同窗函数之间的差别;N的长度不同对滤波器的影响。
4.虽然知道实验的原理和思想,但是如果不是老师后来给出程序,自己并不能独立的将程序写出来。可以发现自己的编程的能力还有思想还不够成熟,还需要通过许多实践来提高和完善自己。