窗函数设计FIR数字滤波器.docx
《窗函数设计FIR数字滤波器.docx》由会员分享,可在线阅读,更多相关《窗函数设计FIR数字滤波器.docx(20页珍藏版)》请在冰豆网上搜索。
![窗函数设计FIR数字滤波器.docx](https://file1.bdocx.com/fileroot1/2023-2/11/2248e8eb-7ea9-44e9-b99e-857abd60505d/2248e8eb-7ea9-44e9-b99e-857abd60505d1.gif)
窗函数设计FIR数字滤波器
1.滤波简介
1.1数字滤波技术
数字滤波,就是通过一定的计算或判断程序减少干扰信号在有用信号中的比例,所以实质上是一种程序滤波。
与此对应的就是模拟滤波,模拟滤波主要无源滤波(由电阻、电容、电感等不外接电源的元件组成)与有源滤波(由运算放大器等需要外接电源的元件组成),其目的是将信号中的噪音和干扰信号滤去或者将希望得到的频率信号滤出为我所用。
数字滤波的出现克服了模拟滤波的很多不足,具有以下优点:
1.是用程序实现的,不需要增加硬设备,所以可靠性高,稳定性好。
2.可以对频率很低的信号实现滤波,克服了模拟滤波的缺陷。
3.可以根据不同信号采用不同的滤波方法或参数,具有灵活、方便、功能强的特点。
1.2FIR滤波器
FIR滤波器是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位冲激响应是有限的,没有输入到输出的反馈,是稳定的系统。
FIR滤波器具有以下主要优点:
1.FIR滤波器具有严格的线性相位;
2.FIR滤波器永远稳定;
3.FIR滤波器设计方法一般是线性的;
4.FIR滤波器在硬件上具有更高的运行效率;
5.FIR滤波器启动传输时间只需要有限时间。
FIR滤波器的主要缺点有:
1.FIR滤波器为达到同样的性能要求需要比IIR滤波器高得多的阶数;
2.相应的FIR滤波器的时延比同等性能的IIR滤波器高很多。
FIR滤波器的硬件实现主要有数字集成芯片,DSP芯片FIR滤波器,可编程FIR滤波器,后两者的实际方法主要通过MATLAB软件进行设计,其设计方法多样,形式灵活,能够满足各种要求,并且不受数字集成芯片规格的限制。
1.3设计方法
1.3.1MATLAB结合窗函数设计方法
MATLAB作为一款优秀的数值计算软件,本身就内置了丰富的函数,其中便有用于通信仿真的一系列函数,并且MATLAB中还集成了通信设计的工具箱,不管是内置的函数,还是通信工具箱,均有专用于滤波器设计的工具,常用的主要有用函数法设计和用通信工具箱设计。
1.3.2设计函数的选取
MATLAB信号处理工具箱提供了基于加窗的线性相位FIR滤波器设计函数fir1和fir2,fir1函数的调用格式为:
b=fir1(n,Wn)
b=fir1(n,Wn,'ftype')
b=fir1(n,Wn,window)
b=fir1(n,Wn,'ftype',window)
b=fir1(…..,'normalization')
函数参数说明如下:
1.n表示滤波器的阶数
2.'ftype'表示所设计滤波器的类型:
3.'high'表示高通滤波器
4.'stop'表示带阻滤波器
5.'DC-1'表示多通带滤波器,第一频带为通带
6.'DC-0'表示多通带滤波器,第一频带为阻带;默认时为低通或带通滤波器;
7.'window'为窗函数,是长度为n+1的列向量,默认时函数自动取hamming窗。
该函数实现加窗的线性相位FIR滤波器设计,可以设计标准低通、带通、高通和带阻滤波器
1.3.3窗函数的构造
MATLAB工具箱已经提供了各种窗函数的构造函数,因而窗函数的构造十分方便,下面给出几种常用窗函数的构造方法:
1.矩形窗:
利用w=boxcar(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。
‘w=boxcar(n)’等价于‘w=ones(1,n)’.
2.三角窗:
利用w=triang(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。
w=triang(N-2)等价于bartlett(N)。
3.汉宁窗:
利用w=hanning(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。
4.布莱克曼窗:
利用w=blackman(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。
它的主瓣宽度是矩形窗主瓣宽度的3倍,为12π/N,但是它的最大旁瓣值比主瓣值低57dB。
5.凯泽窗:
利用w=kaiser(n,beta)的形式得到窗函数。
1.3.4窗函数的设计条件
在使用窗函数设计滤波器时要满足以下两个条件:
(1)主瓣尽可能窄,以使设计出来的滤波器有较陡的过渡带。
(2)尽量减少最大旁瓣的相对幅度,也就是能量集中于主瓣,以减小带内、带外波动的最大幅度,增大阻带衰减。
一般来说,以上两点很难同时满足。
当选取主瓣宽度很窄时,旁瓣的分量势必增加,从而带内、带外的波动也增加了;当选取最小的旁瓣幅度时,降低了带内、带外的波动,但是过渡带的陡度减小了。
所以实际采用的窗函数其特性往往是它们的折中,在保证主瓣宽度达到一定要求的前提下,适当牺牲主瓣宽度来换取旁瓣波动的减小。
实际工程常用的窗函数有五种,即矩形窗、三角窗、汉宁窗、海明窗和凯泽窗。
这些窗函数之间的性能比较如下表所示。
表格1各窗函数性能
2.基本窗函数
2.1矩形窗
矩形窗(RectangularWindow)函数的时域形式可以表示为:
(公式2-1)
它的频域特性为:
(公式2-2)
2.2三角形窗
三角形窗(BartlettWindow)函数时域形式可表示为:
(公式2-3)
窗谱为:
(公式2-4)
式中,当N远大于1时,此时,窗谱主瓣宽度为8
/N。
2.3汉宁窗(升余弦窗)
汉宁窗(hanning)函数时域形式可表示为:
(公式2-5)
利用傅利叶变换的调制特性,由上式可得汉宁窗的频谱函数为:
(公式2-6)
式中,
(公式2-7)
当N远大于1时,上式可近似表示为:
(公式2-8)
这三部分之和使旁瓣互相抵消,能量更集中在主瓣,汉宁窗函数的最大旁瓣值比主瓣值低31dB,但是主瓣宽度比矩形窗函数的主瓣宽度增加了1倍,为8π/N。
hanning函数:
生成汉宁窗
调用方式:
(1)w=hanning(n):
输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量。
注意:
此函数不返回是零点的窗函数的首尾两个元素。
(2)w=hanning(n,'symmetric'):
与上面相类似。
(3)w=hanning(n,'periodic'):
此函数返回包括为零点的窗函数的首尾两个元素。
3.各类窗函数比较
3.1窗函数绘图比较
MATLAB程序源代码为:
n=50;
x=1:
50;
juxing=boxcar(n);%构造矩形窗
sanjiao=triang(n);%构造三角窗
hanming=hamming(n);%构造汉宁窗
bulaikeman=blackman(n);%构造布莱克曼窗
kaize=kaiser(n);%构造凯泽窗
plot(x,juxing,'b.',x,sanjiao,'gx',x,hanming,'r+',x,bulaikeman,'cd',x,kaize,'k*');
legend('矩形窗','三角窗','汉明窗','布莱克曼窗','凯泽窗');
3.2窗函数法设计步骤
实际利用窗函数法进行FIR滤波器设计时,依据所给的技术指标一般需要经过以下几个步骤进行设计:
1.给定理想的频率响应函数及技术指标;
2.求出理想的单位抽样响应;
3.根据阻带衰减选择窗函数w(n);
4.根据过渡带宽度确定N值;
5.求出所设计的FIR滤波器的单位抽样响应;
6.计算频率响应,验算指标是否满足要求。
图1各类窗函数绘图比较
最小阻带衰减仅由窗形状决定,不受N的影响;而过渡带的宽度则随窗宽的增加而减小。
3.3窗函数法设计比较
利用原理说明介绍的fir1函数进行设计,这种设计方法只需要给出滤波器的阶数,截止频率,窗函数等参数,MATLAB即可自行完成设计,并可通过freqz函数查看滤波器的幅频响应和相频响应,已验证滤波器是否满足设计要求,下面给出利用fir1函数设计的不同窗函数的数字带通滤波器。
1.利用矩形窗进行设计
MATLAB程序源代码为:
fs=20000;%设定采样频率
fp1=4500;fp2=6500;%第一截止频率
fs1=3000;fs2=7500;%第二截止频率
As=40;%最小阻带衰减
Ws1=(fp1+fs1)/fs;Ws2=(fp2+fs2)/fs;%截止频率归一化处理
w=(fp1-fs1)/fs;%求归一化过渡带
M=ceil((As-7.95)/(14.36*w))%计算所需滤波器的阶数
juxing=boxcar(M+1);%生成长度为M+1的矩形窗
boxb=fir1(M,[Ws1,Ws2],juxing);%生成矩形窗设计的fir滤波器
freqz(boxb,1,fs,fs);%绘制幅频和相频响应曲线
运行结果为:
图2用矩形窗设计的FIR滤波器的幅频和相频响应曲线
2.利用三角窗进行设计
利用三角窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用triang()函数生成三角窗,程序运行结果为:
3.利用汉宁窗进行设计
利用汉宁窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用hanning()函数生成三角窗,程序运行结果为:
图3用三角形窗设计的FIR滤波器幅频和相频响应曲线
图4用汉宁窗设计的FIR滤波器的幅频和相频响应曲线
4.利用布莱克曼窗进行设计
利用布莱克曼窗进行设计时,原理与矩形窗基本相同,只不过生成窗函数时采用blackman()函数生成三角窗,程序运行结果如下:
图5用布莱克曼窗设计的FIR滤波器幅频和相频响应曲线
5.利用凯泽窗进行设计
利用凯泽窗进行设计时,滤波器的参数可以用以下函数求得:
调用函数[n,wn,bta,ftype]=kaiserord(f,a,dev,fs)参数:
(1)f为对应的归一化频率
(2)a为由f指定的各个频带上的幅值向量,一般只有0和1,和f长度关系为(2*a的长度)—2=(f的长度)
(3)devs用于指定各个频带输出滤波器的频率响应与其期望幅值之间的最大输出误差或偏差,长度与a相等。
(4)fs为信号的采样频率。
利用该函数修改代码得到凯泽窗设计FIR滤波器的MATLAB程序源代码如下:
fs=20000;%设定采样频率
fp1=4500;fp2=6500;%第一截止频率
fs1=3000;fs2=7500;%第二截止频率
[n,wn,bta,ftype]=kaiserord([fs1,fp1,fp2,fs2],...
[0,1,0],[0.010.10870.01],fs)%求滤波器参数
b=fir1(n,wn,ftype,kaiser(n+1,bta));%生成fir滤波器
freqz(b,1,fs,fs);%绘制幅频和相频响应曲线
程序运行结果为:
图6用凯泽窗设计的FIR滤波器幅频和相频响应曲线
4.具体设计内容
4.1矩形窗设计
用矩形窗设计一个FIR线性相位数字低通滤波器,已知
。
求出并画出幅频响应特性曲线。
解:
MATLAB程序源代码为:
wn=0.25;
n=21;
N=n+1;
b=fir1(n,wn,'low',boxcar(N));%求滤波器的频率响应
t=0:
21;
subplot(211);%指定h(n)窗位置
stem(t,b,'.');
holdon;
plot(t,zeros(1,22));%绘出h(n)曲线
title('单位抽样响应h(n)');
grid;
M=128;
h=freqz(b,1,M);%计算离散系统频响特性
f=0:
0.5/M:
0.5-0.5/M;
subplot(212);%确定窗位置
plot(f,abs(h));%绘出幅频响应曲线
title('幅频响应');
grid;
xlabel('频率单位2pi');%x轴注释
ylabel('幅度/db');%y轴注释
运行结果为:
图7矩形窗幅频响应曲线
4.2三角窗设计
用三角形窗设计一个FIR线性相位数字低通滤波器,已知
;要求画出滤波器的
曲线。
解:
因为用三角形窗设计:
MATLAB程序源代码如下:
wc=0.5*pi;%截止频率
N=51;%窗的长度
n=[0:
1:
(N-1)];
a=(N-1)/2;%时延
m=n-a+eps;
hd=sin(wc*m)./(pi*m);%理想滤波器的冲激响应
wd=(triang(N))';%调用三角窗函数
h=hd.*wd;%设计的滤波器的冲激响应
[H,rad]=freqz(h);%对应的频率响应
plot(rad,20*log10(abs(H)));%绘出幅频响应曲线
xlabel('频率/hz');
ylabel('幅频响应/db');
gridon;
图8三角窗幅频响应曲线
4.3布莱克曼窗设计
用布莱克曼窗设计一个FIR线性相位
相移的数字带通滤波器
设
。
试求出
的表达式,并画出
曲线。
解:
可求得此滤波器的时域函数为:
采用布拉克曼窗设计时(N=51):
MATLAB程序原代码如下:
w0=0.6*pi;
wc=0.2*pi;
w1=blackman(51);%调用布莱克曼窗函数
n=1:
1:
51;
hd=i*(sin((w0+wc)*(n-25))-sin((w0-wc)*(n-25)))./(pi*(n-25)+eps);%希望设计的
滤波器的冲激响应
h1=hd.*rot90(w1);%实际设计的相移90度后的数字带通滤波器的冲激响应
[mag1,rad]=freqz(h1);%对应的频率响应
plot(rad,20*log10(abs(mag1)));%绘出幅频响应曲线
xlabel('频率/hz');ylabel('幅度/db');
gridon;
图990°移相的线性相位带通滤波器
这个滤波器是90°移相的线性相位带通滤波器(或称正交变换线性相位带通滤波器)。
4.4结果分析
经过利用三角窗、矩形窗和布莱克曼窗设计FIR滤波器所得到的幅频响应曲线图可以看出不同的窗函数所设计的滤波器频率响应有所不同。
三角窗和矩形窗设计的低通滤波器频率响应曲线比较相似,但可以看出三角窗的过渡带更宽,主瓣宽度也更宽,旁瓣峰值幅度绝对值更大,最小阻带衰减绝对值也更大。
布莱克曼窗设计的带通滤波器的频率响应曲线也基本符合教材中对布莱克曼窗理论的分析,它的旁瓣主瓣宽度、过渡带宽、最小阻带衰减均比三角窗和矩形窗大。
最小阻带衰减仅由窗的形状决定,不受窗的长度N的影响;而过渡带宽度随窗宽的增加而减少。
本次课设中虽没有针对某一种窗改变其宽度,但从设计的过程的分析中可以看出这一点。
5.课设心得
这一次的课程设计时间比较紧,任务重,在课程设计之初,我对暂时用窗函数法设计FIR数字滤波器这个题目没有想法和方案。
在课程设计的短短几天内,我不断搜集资料、设计方案、整理思路、编写程序、调试程序,这其中我遇到了很多的困难,在克服这些困难的同时,也学到了很多课本里学不到的知识,收获了很多课堂上讲不到的方法。
之前使用过MATLAB这个软件对于电路进行数学建模,我另外从网上获得了很多有关MATLAB设计滤波器的资料,也翻阅了很多书本,使我的设计思路渐渐明朗,最终弄明白了FIR滤波器的工作原理和FIR滤波器设计相关的一些函数的使用方法,并了解了其中的优劣。
在设计过程中,我也遇到了很多不懂的地方,程序经常出现错误,但经过自己的不断努力和尝试,最终还是解决了问题。
通过这次学习,我不但掌握了FIR数字滤波器窗函数的基本知识及其实际应用的技巧了,而且还学会了MATLAB编程语言,同时还培养了我的工程设计思想。
从收集资料、对比选择、确定方案到程序设计、程序调试,从中所获得的经验对今后的学习与工作都有很大的帮助,同时我也学会了如何在短时间之内对知识进行取舍与进行重点学习和突破。
虽然课程设计的过程是辛苦的,但结果确是令人振奋的。
我从中学到的知识、方法与积累的自信、经验都会在今后的学习和工作中对我有很大的帮助。
参考文献
[1]陈怀琛.《MATLAB及在电子信息课程中的应用》[M].电子工业出版社,2006
[2]刘泉.《数字信号处理原理与实现》[M].电子工业出版社,2005
[3]刘泉.《信号与系统》[M].高等教育出版社,2006
[4]徐以涛.《数字信号处理》[M].西安电子科技大学出版社,2009
[5]周开利,邓春辉.《MATLAB基础及其应用教程》[M].北京大学出版社,2007
[6]赵静,张瑾.《基于MATLAB的通信系统仿真》[M].北京航空航天大学出版社,2006
[7]宋寿鹏.《数字滤波器设计及工程应用》[M].江苏大学出版社,2007
本科生课程设计成绩评定表
姓名
性别
专业班级
课程设计题目:
课程设计答辩或质疑记录:
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日