用窗函数法设计FIR数字滤波器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用窗函数法设计FIR 数字滤波器

一. 实验目的

(1)掌握用窗函数法设计FIR 数字滤波器的原理与方法。 (2)熟悉线性相位FIR 数字滤波器的特性。 (3)了解各种窗函数对滤波特性的影响。 二. 实验内容和要求

(1) 复习用窗函数法设计FIR 数字滤波器一节内容,阅读本实验原理,掌握设计步骤。

(2) 用升余弦窗设计一线性相位低通FIR 数字滤波器,截止频率

rad

c 4π

ω=

。窗口长度N =15,33。要求在两种窗口长度情况下,分别

求出()n h ,打印出相应的幅频特性和相频特性曲线,观察3dB 带宽和20dB 带宽。总结窗口长度N 对滤波器特性的影响。

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

(

)

⎪⎩⎪⎨⎧≤<≤=-π

ωωωωωαω

c c j j

d ,,

e e

H 0

其中2

1-=

N α

()(

)()[]

()

a n a n d e

e

d e

e

H n h c j j j j d d c

c

--=

=

=

⎰⎰-

--

πωωπ

ωπ

ωα

ωω

ωα

ω

π

π

ω

sin 2121

(3) 33=N ,4πω=c ,用四种窗函数设计线性相位低通滤波器,绘制相应的幅频特性曲线,观察3dB 带宽和20dB 带宽以及阻带最小衰减,

比较四种窗函数对滤波器特性的影响。

三. 实验方法、步骤及结果测试

如果所希望的滤波器的理想的频率响应函数为()ωj d e H ,则其对应的单位脉冲响应为

()()ω

π

ω

ω

π

π

d e

e H

n h j j d

d ⎰-

=

21 (4.1)

窗函数设计法的基本原理是用有限长单位脉冲响应序列()n h 逼近()n h d 。

由于()n h d 往往是无限长序列,而且是非因果的,所以用窗函数()n ω将()n h d 截断,并进行加权处理,得到:

()()()n n h n h d ω=

(4.2)

()n h 就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率响应函数()ωj e H 为

(

)()n

j N n j e

n h e

H ωω

∑-==1

(4.3)

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

我们知道,用窗函数法设计的滤波器性能取决于窗函数()n ω的类型及窗口长度N 的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的

要求选择合适的窗函数类型和窗口长度N 。各种类型的窗函数可达到的阻带最小衰减和过渡带宽度见表4.1。

表1 各种窗函数的基本参数

()()()n n h n h d ω∙=,并按照式(4.3)求出(

j e

H 。()ω

j e H 是否满足要求,

要进行演算。一般在()n h 尾部加零使长度满足2的整数次幂,以便用FFT 计算()ωj e H 。如果要观察细节,补零点数增多即可。如果()ωj e H 不满足要求,则要重新选择窗函数类型和长度N ,再次验算,直至满足要求。

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

()()n N h n h --±=1

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

()()n N h n h ---=1这一类。

主程序框图如图4.1所示。其中幅度特性要求用dB 表示。

)

()()()()()()]([)(2

2

k H k H k H k jH k H k H n h DFT k H I R I R +=

+==

画图时,用)(lg 20k H 打印幅度特性。第k 点对应的频率k

N k πω2=

为使曲线包络更接近()ωj e H 的幅度特性曲线,DFT 变换区间要选大些。例如窗口长度N=33时,可通过在()n h 末尾补零的方法,使长度变为64,再进行64点DFT ,则可以得到更精确的幅度衰减特性曲线。

图6-1 主程序框图

下面给出MATLAB主程序:

%实验四,用窗函数法设计FIR数字滤波器

b=1;

close all;

i=0;

while(b);

temp=menu('选择窗函数长度

N','N=10','N=15','N=20','N=25','N=30','N=33','N=35','N=40','N=4 5','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)];

hd=ideal(w,N); %得到理想低通滤波器

k=menu('请选择窗口类

型:','boxcar','hamming','hanning','blackman');

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

相关文档
最新文档