数字信号处理实验报2.docx
《数字信号处理实验报2.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验报2.docx(11页珍藏版)》请在冰豆网上搜索。
数字信号处理实验报2
数字信号处理实验报告
实验项目名称用窗函数法设计FIR数字滤波器
所属课程数字信号处理
实验类型探究性
实验日期2012-12-17
班别
学号
姓名
实验三
用窗函数法设计FIR数字滤波器
一、实验题目
用窗函数法设计FIR数字滤波器
二、实验目的
(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。
(2)熟悉线性相位FIR数字滤波器特性。
(3)了解各种窗函数对滤波特性的影响。
三、实验原理
要设计出的滤波器的理想频率响应函数为
,则对应的单位脉冲响应为
窗函数设计法的基本原理是用有限长单位脉冲响应序列h(n)逼近hd(n)。
由于hd(n)往往是无限长序列,且是非因果的,所以用窗函数ω(n)将hd(n)截断,并进行加权处理,得到
h(n)就作为实际设计的FIR数字滤波器的单位脉冲响应序列,其频率响应函数
为
式中,N为所选窗函数ω(n)的长度。
根据上式中的正、负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。
要根据所设计的滤波特性正确选择其中一类。
例如,要设计线性相位低通特性,可选择h(n)=h(N-1-n)一类,而不能选h(n)=-h(N-1-n)一类。
(3)上机实验内容。
a、用升余弦窗设计一线性相位低通FIR数字滤波器,截止频率Wc=pi/4rad。
窗口N=15,33。
要求在两种窗口长度情况下,分别求出h(n),打印出相应的幅频特性和相频曲线。
观察3db带宽和20db带宽,总结窗口N对滤波特性的影响。
设计低通FIR数字滤波器时,一般以理想低通滤波特性为逼近函数即
b、N=33,Wc=pi/4rad,用四种窗函数设计线性相位低通滤波器。
绘制相应的幅频特性曲线,观察3dB带宽和20dB带宽以及阻带最小衰减,比较四种窗函数对滤波特性的影响。
四、实验程序
(a)b=1;
closeall;
i=0;
while(b);
temp=menu('选择窗函数长度N','N=10','N=15','N=20','N=25','N=30','N=33','N=35','N=40','N=45','N=50','N=55','N=60','N=64');
menu1=[10,15,20,25,30,33,35,40,45,50,55,60,64];
N=menu1(temp);
temp=menu('选择逼近理想低通滤波器截止频率Wc','Wc=pi/4','Wc=pi/2','Wc=3*pi/4','Wc=pi','Wc=0.5','Wc=1.0','Wc=1.5','Wc=2.0','Wc=2.5','Wc=3.0');
menu2=[pi/4,pi/2,3*pi/4,pi,0.5,1,1.5,2,2.5,3];
w=menu2(temp);
n=[0:
(N-1)];
alpha=(N-1)/2;
m=n-alpha+eps;
hd=sin(w*m)./(pi*m);
k=menu('请选择窗口类型:
','boxcar','hamming','hanning','blackman');
ifk==1
B=boxcar(N);
string=['Boxcar','N=',num2str(N)];
elseifk==2
B=hamming(N);
string=['Hamming','N=',num2str(N)];
elseifk==3
B=hanning(N);
string=['Hanning','N=',num2str(N)];
elseifk==4
B=blackman(N);
string=['Blackman','N=',num2str(N)];
end
end
end
end
h=hd.*(B)';%得到FIR数字滤波器
[H,m]=freqz(h,[1],1024,'whole');%求其频率响应
mag=abs(H);%得到幅值
db=20*log10((mag+eps)/max(mag));
pha=angle(H);%得到相位
i=i+1;
figure(i)
subplot(2,2,1);
n=0:
N-1;
stem(n,h,'.');
axis([0,N-1,-0.1,0.3]);
holdon;
n=0:
N-1;
x=zeros(N);
plot(n,x,'-');
xlabel('n');
ylabel('h(n)');
title('实际低通滤波器的h(n)');
text((0.3*N),0.27,string);
holdoff;
subplot(2,2,2);
plot(m/pi,db);
axis([0,1,-100,0]);
xlabel('w/pi');
ylabel('dB');
title('衰减特性(dB)');
grid;
subplot(2,2,3);
plot(m,pha);
holdon;
n=0:
7;
x=zeros(8);
plot(n,x,'-');
title('相频特性');
xlabel('频率(rad)');
ylabel('相位(rad)');
axis([0,3.15,-4,4]);
subplot(2,2,4);
plot(m,mag);
title('频率特性');
xlabel('频率W(rad)');
ylabel('幅值');
axis([0,3.15,0,1.5]);
text(0.9,1.2,string);
b=menu('DoYouwantToContinue?
','Yes','No');
ifb==2
b=0;
end
end
temp=menu('CloseAllFigure?
','Yes','No');
iftemp==1
closeall
end
(b)实验主程序:
N=input('窗宽度N=');
k=input('窗型:
1.矩形窗,2.hanning(升余弦窗),3.hamming(改进的升余弦窗),4.Blackman请选择:
');
subplot(2,2,1);
w=pi/5;
a=(N-1)/2;
n=0:
(N-1);
m=n-a+eps;
h=sin(w*m)./(pi*m);
ifk==1
B=bartlett(N);
elseifk==2
B=hanning(N);
elseifk==3
B=hamming(N);
elseifk==4
B=blackman(N);
end
end
end
end
hd=h.*(B');
stem(n,hd,'.');
xlabel('n');
ylabel('h(n)');
title('在矩形窗下的N=33时h(n)函数');
subplot(2,2,2);
[H,m]=freqz(hd,[1],1024);
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
plot(m/pi,db);
xlabel('w/п');
ylabel('20log[H(ejw)]');
title('h(n)的幅频特性');
grid;
pha=angle(H);
subplot(2,2,3);
plot(m,pha);
xlabel('n');
ylabel('φ');
title('h(n)的相频特性');
subplot(2,2,4);
plot(m,mag);
xlabel('w');
ylabel('H(ejw)');
title('h(n)的幅频特性');
五、实验结果及分析
a)改变N和w的值,然后run即可得到每种窗函数设计的实际FIR低通数字滤波器的实际低通滤波器h(n),衰减特性,相频特性和频率特性,升余弦窗如下:
(N=15,pi/4)
(N=33,pi/4)
b)每次从四种窗函数类型中选一种(注释掉其他的三种),也可以改变N和w的值,然后run即可得到每种窗函数设计的实际FIR低通数字滤波器的实际低通滤波器h(n),衰减特性,相频特性和频率特性,如下:
图8矩形窗(N=33,pi/4)
图9汉明窗(N=33,pi/4)
图3汉宁窗(N=33,pi/4)
图4布莱克曼窗(N=33,pi/4)
从图中可以看出用各种窗函数设计的FIR滤波器的阻带最小衰减及过渡带均符合课本给出的要求,而且在通带内均为严格线性相位。
六、思考题
1、如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器,写出设计步骤。
答:
将模拟频率转换成数字频率,确定理想滤波器的特性;根据上述参数选择适当的窗函数w(n),并根据线性相位条件确定窗函数的长度N,由h(n)=hd(n)w(n),0≤n≤N-1,得出单位脉冲响应h(n)。
2、如果要求用窗函数法设计带通滤波器,而且给定上、下边带截止频率为W1和W2,试求理想带通的单位脉冲响应。
答:
(1)由W1、W2求其理想线性相位带通滤波器频率响应;
(2)用IDTFT求出hd(n)。