中南大学数字信号处理实验四

  • 格式:doc
  • 大小:218.83 KB
  • 文档页数:9

实验报告

实验名称 用窗函数法设计FIR数字滤波器

课程名称 数字信号处理

姓名 成绩

班级 学号

日期 2014年5月24号 地点 综合实验楼机房

备注: 1.实验目的

(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。

(2)熟悉线性相位FIR数字滤波器的特性。

(3)了解各种窗函数对滤波特性的影响。

2.实验环境

应用MATLAB 6.5软件

操作系统:windows XP

3.实验原理

如果所希望的滤波器的理想频率响应函数为dH(jwe),则其对应的单位脉

冲响应为

1()()2jwjwnddhnHeedw (4-1)

窗函数设计法的基本原理时用有限长单位脉冲响应序列h(n)逼近()dhn。用窗函数()wn将()dhn截断,并进行加权处理,得到:

()()()dhnhnwn (4-2)

()hn就作为实际设计的FIR数字滤波器的单位脉冲响应序列,其频率响应函数()jwHe为

10()()NjwjwnnHehne (4-3)

式中,N为所选窗函数()wn的长度。

由书本第七章可知,用窗函数法设计的滤波器性能取决于窗函数()wn的类型及窗口长度N的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N。

这样选定窗函数类型和长度N后,求出单位脉冲响应()()()dhnhnwn,并按式(4-3)求出()jwHe。()jwHe是否满足要求,要进行验算。一般在h(n)尾部加零使长度满足2的整数次幂,以便用FFT计算()jwHe。如果要观察细节,补零点数增多即可。如果()jwHe补满足要求,则要重新选择窗函数类型和长度N,再次验算,直至满足要求。

如果要求线性相位特性,则h(n)还必须满足:

()(1)hnhNn

根据上式中的正负号和长度N的奇偶性又将线性相位FIR滤波器分为四类。要根据所设计的滤波器特性正确选择其中一类。例如,要设计线性相位低通特性,可选择()(1)hnhNn一类,而不能选择()(1)hnhNn一类。

4.实验内容

(1)用升余弦窗设计一线性相位低通FIR数字滤波器,截止频率4cwrad。窗口长度N=15,33。要求在两种窗口长度情况下,分别求出h(n),打印出相应的幅频特性和相频特性曲线,观察3dB带宽和20dB带宽。总结窗口长度N对滤波特性的影响。

设计低通FIR数字滤波器时,一般以理想低通滤波特性为逼近函数()jwdHe,即

,||()0,||jwnjwcdcewwHeww

其中

11()()22sin()()ccwjwjwnjwnjwnddwchnHeedweedwwnn

(2)n=33,4cw,用四种窗函数设计线性相位低通滤波器。绘制相应的

幅频特性曲线,观察3dB和20dB带宽以及阻带最小衰减,比较四种窗函数对滤波器特性的影响。

5.实验结果及分析

(1)N=15时的矩形窗:

051015-0.100.10.20.3nh(n)实际低通滤波器的h(n)BoxcarN=1500.51-100-500w/pi20log|H(jw)|衰减特性(dB)0123-4-2024相频特性频率w(rad)相位(rad)012300.511.5幅频特性频率W(rad)幅值|H(jw)|BoxcarN=15

N=33时的矩形窗:

010203040-0.100.10.20.3nh(n)实际低通滤波器的h(n)BoxcarN=3300.51-100-500w/pi20log|H(jw)|衰减特性(dB)0123-4-2024相频特性频率w(rad)相位(rad)012300.511.5幅频特性频率W(rad)幅值|H(jw)|BoxcarN=33

(2) N=15时的汉明窗:

010203040-0.100.10.20.3nh(n)实际低通滤波器的h(n)HammingN=3300.51-100-500w/pi20log|H(jw)|衰减特性(dB)0123-4-2024相频特性频率w(rad)相位(rad)012300.511.5幅频特性频率W(rad)幅值|H(jw)|HammingN=33

N=33时的汉明窗:

010203040-0.100.10.20.3nh(n)实际低通滤波器的h(n)HammingN=3300.51-100-500w/pi20log|H(jw)|衰减特性(dB)0123-4-2024相频特性频率w(rad)相位(rad)012300.511.5幅频特性频率W(rad)幅值|H(jw)|HammingN=33 (3) N=15时的汉宁窗:

051015-0.100.10.20.3nh(n)实际低通滤波器的h(n)HanningN=1500.51-100-500w/pi20log|H(jw)|衰减特性(dB)0123-4-2024相频特性频率w(rad)相位(rad)012300.511.5幅频特性频率W(rad)幅值|H(jw)|HanningN=15

N=33时的汉宁窗:

010203040-0.100.10.20.3nh(n)实际低通滤波器的h(n)HanningN=3300.51-100-500w/pi20log|H(jw)|衰减特性(dB)0123-4-2024相频特性频率w(rad)相位(rad)012300.511.5幅频特性频率W(rad)幅值|H(jw)|HanningN=33

(4) N=15时的布莱克曼窗:

051015-0.100.10.20.3nh(n)实际低通滤波器的h(n)BlackmanN=1500.51-100-500w/pi20log|H(jw)|衰减特性(dB)0123-4-2024相频特性频率w(rad)相位(rad)012300.511.5幅频特性频率W(rad)幅值|H(jw)|BlackmanN=15 N=33时的布莱克曼窗:

010203040-0.100.10.20.3nh(n)实际低通滤波器的h(n)BlackmanN=3300.51-100-500w/pi20log|H(jw)|衰减特性(dB)0123-4-2024相频特性频率w(rad)相位(rad)012300.511.5幅频特性频率W(rad)幅值|H(jw)|BlackmanN=33

(1)矩形窗的频率响应主瓣宽度为4π/N,第一副瓣比主瓣低13dB。

(2)哈明窗是改进的升余弦窗,能量更加集中在主瓣中,主瓣的能量约占99.96%,第一旁瓣的峰值比主瓣小40dB,但主瓣宽度和汉宁窗相同,为8π/N。

(3)汉宁窗的幅度函数由三部分相加,使能量更集中在主瓣中,但代价是主瓣宽度加宽到8π/N。

(4)布莱克曼窗的幅度函数由五部分组成,它们都是移位不同,且幅度也不同的函数,使旁瓣再进一步抵消,阻带衰减进一步增加,过渡带是矩形窗过渡带的3倍。

(5)调整窗口长度N可以有效低控制过渡带的宽度,减少带内波动以及加大阻带的衰减只能从窗函数的形状上找解决方法,如果能找到的窗函数形状,使其谱函数的主瓣包含更多的能量,相应旁瓣幅度就减小了,旁瓣的减小可使通带、阻带波动减小,从而加大阻带衰减,但这样总是以加宽过渡带为代价的。

6.思考题

(1)如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器?写出设计步骤。

答:

错误!未找到引用源。 首先确定模拟带通滤波器的技术指标。

错误!未找到引用源。 确定归一化低通技术要求

错误!未找到引用源。 设计归一化低通

错误!未找到引用源。 将低通转化为带通

(2)如果要求用窗函数法设计带通滤波器,且给定上、下边带截止频率为1w和2w,试求理想带通的单位脉冲响应()dhn。

答:可以通过1w和2w求出cw这样便可以利用公式求出nhd。

7.实验结论

用窗函数法设计FIR滤波器的主要特点:

设()jwdHe=FT[()dhn]为希望逼近的频响特性函数,H(jwe) =FT[h(n)]为用窗函数法设计的实际滤波器的频响函数。通常取H(jwe)相应的理想频响特性作为()jwdHe。

知识要点如下:

(1)希望逼近的理想滤波器频响函数()jwdHe的表达式。因为数字滤波器一般要求设计成线性相位特性,所以()jwdHe必须满足上述线性相位FIR滤波器的频域特点。

(2)熟悉各种常用窗函数的技术指标和加窗后对滤波特性的影响,这样才能根据设计指标正确选择窗函数类型及其长度N。

(3)检验设计结果:窗函数法的设计结果单位脉冲响应h(n)=()()dhnwn。而检验一般在频域进行。所以要计算()()()jwjwjwdHeHeWe•检验3dB截止频率cw和阻带最小衰减minsa,其计算量相当大,必须用计算机进行。

(4)熟悉窗函数设计法的特点:设计过程简单.方便实用。但边界频率不易精确控制。所以设计完以后,必须检验结果。

附件--实验代码

主程序:

s = -1;

while(s<0)

clc;

N=input('请输入窗函数长度 N=');

s=1;

end

close all;

i=0;wc=pi/4;

while(s)

n=0:N-1;

hd=ideal(wc,N);

k=input('请选择窗口类型:\n[1](boxcar)\n[2](hamming)\n[3](hanning)\n[4](blackman)\n请选择:','s');

k=str2num(k); if(k==1)

B=boxcar(N);

string=['Boxcar','N=',num2str(N)];

else

if(k==2)

B=hamming(N);

string=['Hamming','N=',num2str(N)];

else

if(k==3)

B=hanning(N);

string=['Hanning','N=',num2str(N)];

else

if(k==4)