您的当前位置:首页FIR数字滤波器的Matlab实现

FIR数字滤波器的Matlab实现

2022-08-09 来源:乌哈旅游
第7章 FIR数字滤波器的Matlab实现之杨若古兰创作

7.1 实验目的

学惯用窗函数法设计FIR数字滤波器的道理及其设计步调;

进修编写数字滤波器的设计程序的方法,并能进行准确编程;

根据给定的滤波器目标,给出设计步调.

7.2 实验道理及实例分析

FIR低通数字滤波器的设计道理

如果零碎的冲激呼应hd(n)为已知,则零碎的输入/输出关系为:

对于低通滤波器,只需设计出低通滤波器的冲激呼应函数,就可以由上式得到零碎的输出了.假设所但愿的数字滤

jwH(e),它是频域的周期函数,周期为d波器的频率呼应为

jwH(e)绝对应的傅立叶系数为 d2,那么它与

jwh(n)H(e). dd觉得冲激呼应的数字滤波器将具有频域响

但是将hd(n)作为滤波器脉冲呼应有两个成绩:

(1)

它是无穷长的,与FIP滤波器脉冲呼应无限长这一前

提纷歧致

(2)

它是非因果的,hd(n)0,n0

对此,要采纳以下的措施,

(1)

将hd(n)截短 (2)将其往右平移,

Hd(e)h2(n)ejnwjwn0N1由此得到h2(n)的实际频域呼应,与理想频

jwH(e)附近,但不完整分歧.理论证实上述景象是对d域呼应

hd(n)进行简单截短处理的必定结果,普通称为吉布斯景象,

为尽可能的减少吉布斯景象,应对hd(n)进行加窗截取,即以

h(n)hd(n)WN(n)作为

FIR滤波器的系数.

经常使用的窗函数有矩形窗、海明窗和布莱克曼窗等.

用窗函数法设计FIR滤波器

Matlab设计FIR滤波器有多种方法和对应的函数,见表7-1.

表7-1 matlab设计FIR滤波器的方法和函数

方法 窗方法 多带方法 最小二乘法 描述 使用窗函数和逆傅立叶变换实现 包含子带频率域 使用最小二乘法将全部频率域上的错误几率紧缩到最小 任意呼应法 使用任意呼应,包含非线性相位和复滤波器 余弦法 使用三角函数的低通呼应 函数 fir1,fir2,kaiserord等 firls,remez等 fircls ,fircls1等 cremez等 firrcos等 窗函数方法不但在数字滤波器的设计中据有主要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是清除由无穷序列的截短而惹起的Gibbs景象所带来的影响.

窗函数设计线性相位FIR滤波器步调如下:

{w}(1) 确定数字滤波器的功能请求,临界频率k,滤波

器单位脉冲呼应长度N

(2) 根据功能请求,合理选择单位脉冲呼应h(n)的奇偶

jwH(e对称性,从而确定理想频率呼应d)的幅频特性

和相频特性

h(n),在实际计算中,可对(3) 求理想单位脉冲呼应dHd(ejw)采样,并对其求IDFT的hM(n),用hM(n)代替

hd(n)

选择适当的窗函数w(n),根据h(n)hd(n)WN(n)求所需设计的FIR滤波器单位脉冲呼应

jwH(e),分析其幅频特性,若不满足请求,可适d(5) 求

当改变窗函数方式或长度N,反复上述设计过程,以得到满意的结果

(4)

调用格式:

a) b)

b=fir1(N,wn)

b=fir1(N,wn,’hign’)

N为滤波器的阶次,wn是通带截止频率,其值在0~1之间,1对应抽样频率的一半;b是设计好的滤波器系数h(n).

对于格式a),若wn是标量,则用来设计低通滤波器,若wn是1×L的向量,则用来设计带通(带阻)滤波器.其格式为:

b=fir1(N,wn,’DC-1’)或b=fir1(N,wn,’DC-0’),其中,前者包管第一个带为通带,后者包管第一个带为阻带. b)用来设计高通滤波器.

用于发生窗函数的matlab文件有如下8个: bartlett.m(巴特利特窗)

blackman.m(布莱克曼窗) rectangle.m(矩形窗) hamming.m(汉明窗) hanning.m(汉宁窗) triang.m(三角窗)

chebwin.m(切比雪夫窗) Kaiser.m(凯泽窗)

【实例7-1,使器具有30dB波纹的chebyshev窗. 解:源程序如下:

b=fir1(34,0.48,'high',chebwin(35,30));

freqz(b,1,512)

其呼应波形如图7-1所示.

图7-1 带通FIR滤波器

【实例7-2】设计一个24阶FIR带通滤波器,通带频率

0.35w0.65.

解:源程序如下: wn=[0.35 0.65]; N=24;

b=fir1(2*N,wn,'DC-0');% DC-0暗示第一个带为阻带,如许设计出来的滤波器为带通滤波器. freqz(b,1,512)

图7-2 带通FIR滤波器

【实例7-3】 设计具有上面目标的低通FIR滤波器

因为其最小阻带衰减为50dB,是以可以选择hamming窗来实现这个滤波器,因为它具有较小的过渡带. 解:MATLAB源程序为 %数字滤波器目标 wp=0.2*pi; ws=0.3*pi;

tr_width=ws-wp;%通带宽度

N=ceil(6.6*pi/tr_width)+1;%滤波器长度 if rem(N,2)==0 N=N+1; end

Nw=N;%滤波器长度为奇数 n=[0:1:Nw-1];

wc=(ws+wp)/2;%截止频率 alpha=(Nw-1)/2;

m=n-alpha+0.00001;%如果不加0.00001,当n= alpha时,为0,下式分母为0,不克不及履行

hd=sin(wc*m)./(pi*m);%理想滤波器的冲激呼应 % 生成hamming窗 w_ham=(hamming(Nw))'; % 频域图像的绘制

mh=hd.*w_ham;% 滤波器实际冲激呼应 freqz (h,[1]) figure(2);

subplot(2,2,1),stem(n,hd);title('理想脉冲呼应') axis([0 Nw-1 -0.3 0.3]);xlabel('n');ylabel('hd(n)') subplot(2,2,2),stem(n,w_ham);title('hamming窗') axis([0 Nw-1 -0.3 1.2]);xlabel('n');ylabel('w(n)') subplot(2,2,3),stem(n,h);title('实际脉冲呼应') axis([0 Nw-1 -0.3 0.3]);xlabel('n');ylabel('h(n)') 其呼应波形如图7-2所示.

图7-3hamming窗函数设计FIR滤波器

【实例7-4】设带通滤波器的目标为 选择Blackman窗来实现这个滤波器. 解:MATLAB源程序为 % 数字滤波器目标 ws1=0.2*pi;wp1=0.35*pi; ws2=0.65*pi;wp2=0.8*pi; As=60;

tr_width=min((wp1-ws1),(wp2-ws2));% 过渡带带宽 N=ceil(11*pi/tr_width)+1; if rem(N,2)==0 N=N+1;

end Nw=N; n=[0:1:Nw-1]; wc1=(ws1+wp1)/2; wc2=(ws2+wp2)/2; alpha=(Nw-1)/2;

m=n-alpha+0.00001;%如果不加0.00001,当n= alpha时,m为0,下式分母为0,不克不及履行

hd=sin(wc2*m)./(pi*m)-sin(wc1*m)./(pi*m);%理想滤波器的冲激呼应

% 生成blackman窗 w_bla=(blackman(M))'; h=hd.*w_bla;

% 频域图像的绘制 freqz(h,[1]) figure(2);

subplot(2,2,1),stem(n,hd);title('idael impulse response') axis([0 Nw-1 -0.4 0.5]);xlabel('n');ylabel('hd(n)')

subplot(2,2,2),stem(n,w_bla);title('blackman window') axis([0 Nw-1 0 1.1]);xlabel('n');ylabel('w(n)')

subplot(2,2,3),stem(n,h);title('actual impulse response') axis([0 Nw-1 -0.4 0.5]);xlabel('n');ylabel('h(n)')

其呼应波形如图7-4所示.

图7-4blackman窗函数设计FIR滤波器

7.3

编程练习

1. 设计一个48阶FIR带阻滤波器,通带频率

0w0.35,0.65w.

2.用窗函数设计一个线性相位FIR高通滤波器,并满足功能目标:通带鸿沟频率wp0.66,阻带鸿沟频率ws0.5,阻带衰减不小于40db.

提示:参考例7-3,4;首先根据阻带衰减,选择合适的窗函数,见课本P342,表7-3.再根据P345,式7-74写出理想滤波器的冲激呼应hd.

因篇幅问题不能全部显示,请点此查看更多更全内容