实验四窗函数法设计FIR数字滤波器完整版.docx
- 文档编号:5860993
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:15
- 大小:57.32KB
实验四窗函数法设计FIR数字滤波器完整版.docx
《实验四窗函数法设计FIR数字滤波器完整版.docx》由会员分享,可在线阅读,更多相关《实验四窗函数法设计FIR数字滤波器完整版.docx(15页珍藏版)》请在冰豆网上搜索。
实验四窗函数法设计FIR数字滤波器完整版
HENsystemofficeroom【HEN16H-HENS2AHENS8Q8-HENH1688】
实验四窗函数法设计FIR数字滤波器
实验四窗函数法设计FIR数字滤波器
一、实验目的
1、掌握窗函数法设计FIR数字滤波器的原理及具体方法。
2、掌握频率取样法设计FIR数字滤波器的原理和基本方法。
3、学习利用窗函数法和频率取样法设计低通、带通、高通、带阻数字滤波器。
二、实验环境
计算机、MATLAB软件
三、实验基础理论
窗函数设计FIR滤波器
1.基本原理
窗函数设计法的基本思想为,首先选择一个适当的理想的滤波器
,然后用窗函数截取它的单位脉冲响应
,得到线性相位和因果的FIR滤波器。
这种方法的重点是选择一个合适的窗函数和理想滤波器,使设计的滤波器的单位脉冲响应逼近理想滤波器的单位脉冲响应。
2.设计步骤
(1)给定理想滤波器的频率响应
,在通带上具有单位增益和线性相位,在阻带上具有零响应。
一个带宽为
的低通滤波器由下式给定:
其中
为采样延迟,其作用是为了得到一个因果系统。
(2)确定这个滤波器的单位脉冲响应
为了得到一个
长度为N的因果的线性相位FIR滤波器,我们令
(3)用窗函数截取
得到所设计FIR数字滤波器:
3.窗函数的选择
常用的窗函数有矩形(Rectangular)窗,汉宁(Hanning)窗,海明(Hamming)窗、布莱克曼(Blackman)窗、凯瑟(Kaiser)窗等
表4-1MATLAB中产生窗函数的命令
MATLAB函数
窗函数
MATLAB函数
窗函数
Boxcar
矩形窗函数
Blackman
布莱克曼窗
Hanning
汉宁窗函数
Kaiser
凯瑟窗函数
Hamming
海明窗
表4-2常用窗函数的特性
窗函数
窗函数频率特性
加窗后滤波器指标
旁瓣峰值dB
主瓣宽度
过渡带宽
最小阻带衰减dB
矩形窗
-13
4π/N
π/N
-21
汉宁窗
-31
8π/N
π/N
-44
海明窗
-41
8π/N
π/N
-53
布莱克曼窗
-57
12π/N
11π/N
-74
凯瑟窗是一种广泛在实际中广泛应用的窗函数,它由下式给定:
其中
是修正的零阶贝塞尔函数,参数
控制最小阻带衰减,这种窗函数对于相同的N可以提供不同的过渡带宽。
由于贝塞尔函数比较复杂,这种窗函数的设计方程很难推导,然而幸运的是,有一些经验设计方程可以直接使用。
已知给定的指标
,滤波器长度N和凯瑟窗参数
可以按如下凯瑟窗方程给出
过渡带带宽:
频率取样设计FIR滤波器
1.基本原理
频率取样法从频域出发,把理想的滤波器
等间隔采样得到
将
作为实际设计滤波器的
:
得到
以后可以由
来确定唯一确定滤波器的单位脉冲响应
可以由
求得:
其中
为内插函数:
有
求得的频率响应
将逼近
。
如果我们设计的是线性相位FIR滤波器,则
的幅度和相位满足线性相位滤波器的约束条件。
我们将
表示为如下形式
当
为实数,则
由此得到
即
为中心偶对称。
在利用线性相位条件可知,对于1型和2型线性相位滤波器:
对于3型和4型线性相位滤波器
2.设计步骤
(1)由给定的理想滤波器给出
和
。
(2)由
求得
(3)根据
求得
或
四、实验内容
1、设计一个数字低通FIR滤波器,其技术指标如下:
分别采用矩形窗、汉宁窗、海明窗、布莱克曼窗、凯瑟窗设计该滤波器。
结合实验结果,分别讨论采用上述方法设计的数字滤波器是否都能满足给定指标要求。
(1)矩形窗
程序代码:
wp=*pi;wst=*pi;tr_width=wst-wp;
N=ceil*pi/tr_width)
n=0:
N-1;
wc=(wst+wp)/2;
alpha=(N-1)/2;
hd=(wc/pi)*sinc((wc/pi)*(n-alpha));
w_boxcar=boxcar(N)';
h=hd.*w_boxcar;
subplot(221);
stem(n,hd,'filled');
axistight;xlabel('n');ylabel('hd(n)');
[Hr,w1]=zerophase(h);
subplot(222);
plot(w1/pi,Hr);
axis;xlabel('\omega/\pi');ylabel('H(\omega)');
subplot(223);
stem(n,h,'filled');
axistight;xlabel('n');ylabel('h(n)');
[H,w]=freqz(h,1);
subplot(224);
plot(w/pi,20*log10(abs(H)/max(H)));
axistight;xlabel('\omega/\pi');ylabel('dB');
gridon;
MATLAB图形:
(2)汉宁窗
程序代码:
wp=*pi;wst=*pi;tr_width=wst-wp;
N=ceil*pi/tr_width)
n=0:
N-1;
wc=(wst+wp)/2;
alpha=(N-1)/2;
hd=(wc/pi)*sinc((wc/pi)*(n-alpha));
w_boxcar=hanning(N)';
h=hd.*w_boxcar;
subplot(221);
stem(n,hd,'filled');
axistight;xlabel('n');ylabel('hd(n)');
[Hr,w1]=zerophase(h);
subplot(222);
plot(w1/pi,Hr);
axis;xlabel('\omega/\pi');ylabel('H(\omega)');
subplot(223);
stem(n,h,'filled');
axistight;xlabel('n');ylabel('h(n)');
[H,w]=freqz(h,1);
subplot(224);
plot(w/pi,20*log10(abs(H)/max(H)));
axistight;xlabel('\omega/\pi');ylabel('dB');
gridon;
MATLAB图形:
(3)海明窗
程序代码:
wp=*pi;wst=*pi;tr_width=wst-wp;
N=ceil*pi/tr_width)
n=0:
N-1;
wc=(wst+wp)/2;alpha=(N-1)/2;
hd=(wc/pi)*sinc((wc/pi)*(n-alpha));
w_boxcar=hamming(N)';
h=hd.*w_boxcar;
subplot(221);
stem(n,hd,'filled');
axistight;xlabel('n');ylabel('hd(n)');
[Hr,w1]=zerophase(h);
subplot(222);
plot(w1/pi,Hr);
axis;xlabel('\omega/\pi');ylabel('H(\omega)');
subplot(223);
stem(n,h,'filled');
axistight;
xlabel('n');
ylabel('h(n)');
[H,w]=freqz(h,1);
subplot(224);
plot(w/pi,20*log10(abs(H)/max(H)));
axistight;xlabel('\omega/\pi');ylabel('dB');
gridon;
MATLAB图形:
(4)布莱克曼窗
程序代码:
wp=*pi;wst=*pi;tr_width=wst-wp;
N=ceil(11*pi/tr_width)
n=0:
N-1;
wc=(wst+wp)/2;alpha=(N-1)/2;
hd=(wc/pi)*sinc((wc/pi)*(n-alpha));
w_boxcar=blackman(N)';
h=hd.*w_boxcar;
subplot(221);
stem(n,hd,'filled');
axistight;xlabel('n');ylabel('hd(n)');
[Hr,w1]=zerophase(h);
subplot(222);
plot(w1/pi,Hr);
axis;xlabel('\omega/\pi');ylabel('H(\omega)');
subplot(223);
stem(n,h,'filled');
axistight;xlabel('n');ylabel('h(n)');
[H,w]=freqz(h,1);
subplot(224);
plot(w/pi,20*log10(abs(H)/max(H)));
axistight;xlabel('\omega/\pi');ylabel('dB');
gridon;
MATLAB图形为:
(5)凯瑟窗
程序代码:
wp=*pi;wst=*pi;tr_width=wst-wp;As=50;
N=ceil(/*tr_width))+1;
beta=*;
n=0:
N-1;
wc=(wst+wp)/2;alpha=(N-1)/2;
hd=(wc/pi)*sinc((wc/pi)*(n-alpha));
w_boxcar=kaiser(N,beta)';
h=hd.*w_boxcar;
subplot(221);
stem(n,hd,'filled');
axistight;xlabel('n');ylabel('hd(n)');
[Hr,w1]=zerophase(h);
subplot(222);
plot(w1/pi,Hr);
axis;xlabel('\omega/\pi');ylabel('H(\omega)');
subplot(223);
stem(n,h,'filled');
axistight;xlabel('n');ylabel('h(n)');
[H,w]=freqz(h,1);
subplot(224);
plot(w/pi,20*log10(abs(H)/max(H)));
axistight;xlabel('\omega/\pi');ylabel('dB');
gridon;
MATLAB图形:
2、设计一个数字带通FIR滤波器,其技术指标如下:
下阻带边缘:
下通带边缘:
上通带边缘:
上阻带边缘:
程序代码:
wp1=*pi;Rp1=1;
wst1=*pi;A1=60;
width1=wst1-wp1;
N1=ceil(11*pi/width1)+1;
n1=0:
(N1-1);
wc1=(wp1+wst1)/2;
alpha=(N1-1)/2;
wp2=*pi;Rp2=1;wst2=*pi;A2=60;
width2=wst2-wp2;
N2=ceil(11*pi/width2)+1;
n2=0:
(N2-1);
wc2=(wp2+wst2)/2;
alpha=(N2-1)/2;
hd=(wc2/pi)*sinc((wc2/pi)*(n2-alpha))-(wc1/pi)*sinc((wc1/pi)*(n1-alpha));
w_w=blackman(N1)';
h=hd.*w_w;
subplot(221);
stem(n1,h,'filled');
subplot(222);
[H,w]=freqz(h,1);
plot(w/pi,20*log10(abs(H)/max(abs(H))));
subplot(223);
[Hr,w1]=zerophase(h);
plot(w1/pi,Hr);
subplot(224);
stem(n1,hd,'filled');
[Hr,wl]=zerophase(h);
gridon;
MATLAB图形:
3.采用频率取样法设计FIR数字低通滤波器,满足以下指标
(1)取N=20,过渡带没有样本。
(2)取N=40,过渡带有一个样本,T=。
(3)取N=60,过渡带有两个样本,T1=,T2=。
(4)分别讨论采用上述方法设计的数字滤波器是否都能满足给定的指标要求。
(1)程序代码:
N=20;
alpha=(N-1)/2;
L=0:
N-1;wL=(2*pi/N)*L;
Hrs=[1,1,1,zeros(1,15),1,1];
Hdr=[1,1,0,0];
wdL=[0,,,1];
k1=0:
floor((N-1)/2);
k2=floor((N-1)/2)+1:
N-1;
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=ifft(H,N);
w=[0:
500]*pi/500;
[Hr,wr]=zerophase(h);
subplot(221);
plot(wdL,Hdr,wL(1:
N/2+1)/pi,Hrs(N/2+1));
axis([0,1,,]);
xlabel('\omega(\pi)');
ylabel('Hr(k)');
subplot(222);
stem(L,h,'filled');
axis([0,N-1,,]);
xlabel('n');
ylabel('h(n)');
subplot(223);
plot(wr/pi,Hr,wL(1:
N/2+1)/pi,Hrs(1:
N/2+1));
axis([0,1,,]);
gridon;
xlabel('\omega(\pi)');
ylabel('Hr(\omega)');
subplot(224);
plot(wr/pi,20*log10((abs(Hr)/max(abs(Hr)))));
axis([0,1,-50,5]);
gridon;xlabel('\omega(\pi)');ylabel('dB')
MATLAB图形如下:
(2)程序代码:
N=40;
alpha=(N-1)/2;
L=0:
N-1;
wL=(2*pi/N)*L;
Hrs=[1,1,1,1,1,,zeros(1,29),,1,1,1,1];
Hdr=[1,1,,0,0];
wdL=[0,,,,1];
k1=0:
floor((N-1)/2);
k2=floor((N-1)/2)+1:
N-1;
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=ifft(H,N);
w=[0:
500]*pi/500;
[Hr,wr]=zerophase(h);
subplot(221);
plot(wdL,Hdr,wL(1:
N/2+1)/pi,Hrs(N/2+1));
axis([0,1,,]);
xlabel('\omega(\pi)');
ylabel('Hr(k)');
subplot(222);
stem(L,h,'filled');
axis([0,N-1,,]);
xlabel('n');
ylabel('h(n)');
subplot(223);
plot(wr/pi,Hr,wL(1:
N/2+1)/pi,Hrs(1:
N/2+1));
axis([0,1,,]);
gridon;
xlabel('\omega(\pi)');
ylabel('Hr(\omega)');
subplot(224);
plot(wr/pi,20*log10((abs(Hr)/max(abs(Hr)))));
axis([0,1,-50,5]);
gridon;
xlabel('\omega(\pi)');
ylabel('dB')
gridon;
MATLAB图形如下:
3、程序代码:
N=60;
alpha=(N-1)/2;
L=0:
N-1;
wL=(2*pi/N)*L;
Hrs=[1,1,1,1,1,1,1,,,zeros(1,43),,,1,1,1,1,1,1];
Hdr=[1,1,,,0,0];
wdL=[0,,7/30,8/30,,1];
k1=0:
floor((N-1)/2);
k2=floor((N-1)/2)+1:
N-1;
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=ifft(H,N);w=[0:
500]*pi/500;
[Hr,wr]=zerophase(h);
subplot(221);
plot(wdL,Hdr,wL(1:
N/2+1)/pi,Hrs(N/2+1));
axis([0,1,,]);
xlabel('\omega(\pi)');
ylabel('Hr(k)');
subplot(222);
stem(L,h,'filled');
axis([0,N-1,,]);
xlabel('n');
ylabel('h(n)');
subplot(223);
plot(wr/pi,Hr,wL(1:
N/2+1)/pi,Hrs(1:
N/2+1));
axis([0,1,,]);
gridon;
xlabel('\omega(\pi)');
ylabel('Hr(\omega)');
subplot(224);
plot(wr/pi,20*log10((abs(Hr)/max(abs(Hr)))));
axis([0,1,-50,5]);gridon;xlabel('\omega(\pi)');ylabel('dB')
gridon;
MATLAB图形:
各阶数的通阻带指标如下表:
阶数
通带波动
阻带衰减50dB
是否满足指标
N=20
不满足
不满足
否
N=40
不满足
满足
否
N=60
满足
满足
是
4.采用频率取样技术设计下面的高通滤波器
对于高通滤波器,N必须为奇数(或1型滤波器)。
选择N=33,过渡带有两个样本,过渡带的最优值为T1=,T2=.
程序代码:
N=33;alpha=(N-1)/2;L=0:
N-1;wL=(2*pi/N)*L;
Hrs=[0,0,0,0,0,0,0,0,0,0,0,,,1,1,1,1,1,1,1,,,0,0,0,0,0,0,0,0,0,0,0];
Hdr=[0,0,,,1,1];
wdL=[0,,2/3,24/33,,1];
k1=0:
floor((N-1)/2);
k2=floor((N-1)/2)+1:
N-1;
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=ifft(H,N);
w=[0:
500]*pi/500;
Hr=h*cos((alpha-L)'*w);
subplot(221);
plot(wdL,Hdr,wL(1:
17)/pi,Hrs(1:
17));
axis([0,1,,]);
xlabel('\omega(\pi)');
ylabel('Hr(k)');
subplot(222);
stem(L,h,'filled');
axis([0,N-1,,]);
xlabel('n');
ylabel('h(n)');
subplot(223);
plot(w/pi,Hr,wL(1:
17)/pi,Hrs(1:
17));
axis([0,1,,]);
xlabel('\omega(\pi)');
ylabel('Hr(\omega)');
subplot(224);
plot(w/pi,20*log10((abs(Hr)/max(abs(Hr)))));
axis([0,1,-50,5]);xlabel('\omega(\pi)');ylabel('dB')
gridon;
MATLAB图形为:
五、实验心得与体会
通过这次实验,学习了运用窗函数法和频率取样法设计具有线性相位的数字低通、高通、带通、带阻滤波器。
同时也从图像上加深了对线性相位的理解和认识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 函数 设计 FIR 数字滤波器 完整版