实验六用窗函数设计FIR滤波器附思考题程序修订版.docx
《实验六用窗函数设计FIR滤波器附思考题程序修订版.docx》由会员分享,可在线阅读,更多相关《实验六用窗函数设计FIR滤波器附思考题程序修订版.docx(6页珍藏版)》请在冰豆网上搜索。
实验六用窗函数设计FIR滤波器附思考题程序修订版
IBMTstandardizationoffice【IBMT5AB-IBMT08-IBMT2C-ZZT18】
实验六用窗函数设计FIR滤波器附思考题程序修订版
实验六用窗函数设计FIR滤波器
1.实验目的
(1)熟悉FIR滤波器设计的方法和原理
(2)掌握用窗函数法设计FIR滤波器的方法和原理,熟悉滤波器的特性
(3)了解各种窗函数滤波器特性的影响
2.实验原理
FIR滤波器的设计方法主要有三种:
窗函数法、频率取样法、切比雪夫等波纹逼近法。
FIR滤波器的设计是要寻求一系统函数
,使其频率响应
逼近滤波器要求的理想频率响应
,其对应的单位脉冲响应
。
(1)用窗函数设计FIR滤波器的基本方法
在时域用一个窗函数截取理想的
得到
,以有限长序列
近似逼近理想的
;在频域用理想的
在单位圆上等角度取样得到h(k),根据h(k)得到H(z)将逼近理想的Hd(z)。
设理想滤波器
的单位脉冲响应为
。
以低通线性相位FIR数字滤波器为例。
一般是无限长的、非因果的,不能直接作为FIR滤波器的单位脉冲响应。
要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断
,即截取为有限长因果序列,并用合适的窗函数进行加权作为FIR滤波器的单位脉冲响应。
按照线性相位滤波器的要求,h(n)必须是偶对称的。
对称中心必须等于滤波器的延时常数,即
用矩形窗设计的FIR低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,(现象称为吉布斯(Gibbs)效应)。
(2)典型的窗函数
(a)矩形窗(RectangleWindow)
其频率响应和幅度响应分别为:
,
在matlab中调用w=boxcar(N)函数,N为窗函数的长度
(b)三角形窗(BartlettWindow)
其频率响应为:
在matlab中调用w=triang(N)函数,N为窗函数的长度
(c)汉宁(Hanning)窗,又称升余弦窗
其频率响应和幅度响应分别为:
在matlab中调用w=hanning(N)函数,N为窗函数的长度
(d)汉明(Hamming)窗,又称改进的升余弦窗
其幅度响应为:
在matlab中调用w=hamming(N)函数,N为窗函数的长度
(e)布莱克曼(Blankman)窗,又称二阶升余弦窗
其幅度响应为:
在matlab中调用w=blackman(N)函数,N为窗函数的长度
(f)凯泽(Kaiser)窗
其中:
β是一个可选参数,用来选择主瓣宽度和旁瓣衰减之间的交换关系,一般说来,β越大,过渡带越宽,阻带越小衰减也越大。
I0(·)是第一类修正零阶贝塞尔函数。
在matlab中调用w=kaiser(N,beta),函数N为窗函数的长度,beta为窗函数的参数。
(3)利用窗函数设计FIR滤波器的具体步骤如下:
(a)根据具体的性能要求通过对过渡带宽度△ω及阻带衰减AS,等参数的分析选择合适的窗函数,并估计滤波器的长度N。
(b)由给定的滤波器的幅频响应参数求出理想的单位脉冲响应
。
(c)确定延时值,计算滤波器的单位取样响应
,
.
(d)验证技术指标是否满足要求。
分析所设计的滤波器的幅频特性。
3.实验内容及其步骤
(1)实验前认真复习有关FIR滤波器设计的有关知识,尤其是窗函数的有关内容,熟悉窗函数及FIR滤波器的特性,掌握窗函数设计滤波器的具体步骤。
(2)编制窗函数设计FIR滤波器的主程序及相应子程序。
绘制幅频和相位曲线,观察幅频和相位特性曲线的变换情况,注意长度N对曲线的影响。
(3)用窗函数法设计滤波器,并满足一定的性能指标。
例一:
利用fir1设计标准频率响应的FIR滤波器,包括低通、带通、高通、带阻等类型的滤波器。
b=fir1(n,Wn,’ftype’)
通带边界频率
,阻带边界频率
,阻带衰减不小于40dB,通带波纹不大于3dB。
参考:
根据对滤波器的指标要求,阻带衰减不小于40dB,选择汉宁窗。
%基于窗函数设计FIR滤波器
wp=0.5*pi;ws=0.66*pi;%性能指标
wdelta=ws-wp;%过渡带宽度
N=ceil(3.11*pi/wdelta);%滤波器长度
Nw=2*N+1;%窗口长度
wc=(ws+wp)/2;%截止频率
win=hanning(Nw);%汉宁窗的时域响应
b=fir1(Nw-1,wc/pi,win);%fir1是基于加窗的线性相位FIR数字滤波器设计函数。
N-1为滤波器的阶数。
Win为窗函数,是长度为N的列向量,默认是函数自动取hamming。
freqz(b,1,512)%为求取频率响应。
分子为b,分母为1
实验结果图如图所示:
例二:
fir2设计任意响应的数字滤波器
滤波器的幅度频率响应在不同的频段范围有不同的幅度值。
fir2函数用法:
b=fir2(n,f,m,npt,lap,window)
n是所设计滤波器的阶数;f是0到1的正数向量,对应滤波器的频率,其中0对应于频率0,1对应于信号采样频率的一半;m是一个所有元素都是正实数向量,对应于m向量中频率点的幅度;window是窗函数,fir2默认为海明窗;npt默认值为512;lap默认值为25;b是设计出来的滤波器的系数组成的一个长度为n+1的向量。
要求设计一个多带滤波器:
其在0到pi/8的幅度响应为1,在pi/8到2pi/8幅度响应为1/2,在2pi/8到4pi/8幅度响应为1/4,在4pi/8到6pi/8幅度响应为1/6,在6pi/8到pi幅度响应为1/8,并且滤波器的阶数为60。
画出理想滤波器和设计得到的滤波器的幅度频率响应进行比较。
参考:
%多带滤波器的设计
f=[00.1250.1250.2500.2500.5000.5000.7500.7501.00];
m=[110.50.50.250.251/61/60.1250.125];
b=fir2(60,f,m);
[h,w]=freqz(b);
plot(f,m,w/pi,abs(h))
gridon;
legend('‘理想滤波器','设计滤波器');
另外,还有一个比较直观的设计滤波器的方法,利用MATLAB里的FilterDesign&AnalysisTools设计滤波器比较直观。
FliterType选择低通,高通,带通或者带阻滤波器。
DesignMethod选择IIR还是FIR滤波器,后面下拉菜单选择类型,程序里采用的是加窗类型。
FliterOrder选择滤波器的阶数。
WindowsSpecifications是选择窗函数类型。
然后设置抽样频率和截至频率,然后点击DesignFliter就设计完成。
4.实验用MATLAB函数介绍
在实验过程中,MATLAB函数命令FIR滤波器设计函数:
fir1,fir2,kaiserord,remez,remezord,kaiser,hanning,hamming,blackman,freqz等在不同的情况下具体表述也有所不同,应该在实验中仔细体会其不同的含义。
5.思考题
(1)在实验中窗长和形状对滤波器性能有何影响。
(2)利用窗函数法设计一个线性相位FIR低通滤波器,性能指标为:
通带截止频率为0.2pi,带阻截止频率为0.3pi,阻带衰减不小于40dB,通带衰减不大于3dB。
编写程序实现,并绘制图形。
>>wp=0.2*pi;ws=0.3*pi;
>>wdelta=ws-wp;
>>N=ceil(3.11*pi/wdelta);
>>Nw=2*N+1;
>>wc=(ws+wp)/2;
>>win=hanning(Nw);
>>b=fir1(Nw-1,wc/pi,win);
>>freqz(b,1,512)
>>[h,w]=freqz(b);
(3)设计一个带阻滤波器,带阻为0.4到0.65,阶数为34,并且使用一个切比雪夫窗,并与默认的窗函数进行比较。
>>f=[00.40.40.650.651.0];
>>m=[110011];
>>win=chebwin(35);
>>b1=fir2(34,f,m,win);
>>[h1,w]=freqz(b1);
>>b2=fir2(34,f,m);
>>[h2,w]=freqz(b2);
>>plot(f,m,w/pi,abs(h1),w/pi,abs(h2));gridon;
>>legend('理想滤波器','切比雪夫窗设计','默认海明窗设计');
6.实验报告要求
(1)明确实验目的以及实验的原理。
(2)通过实验内容进一步了解滤波器的设计方法。
(3)完成思考题的内容,对实验结果及其波形图进行分析对比,总结主要结论。