FIR数字滤波器的Matlab实现.docx
《FIR数字滤波器的Matlab实现.docx》由会员分享,可在线阅读,更多相关《FIR数字滤波器的Matlab实现.docx(11页珍藏版)》请在冰点文库上搜索。
FIR数字滤波器的Matlab实现
FIR数字滤波器的Matlab实现
第7章FIR数字滤波器的Matlab实现
7.1实验目的
●学习用窗函数法设计FIR数字滤波器的原理及其设计步骤;
●学习编写数字滤波器的设计程序的方法,并能进行正确编程;
●根据给定的滤波器指标,给出设计步骤。
7.2实验原理及实例分析
FIR低通数字滤波器的设计原理
如果系统的冲激响应
为已知,则系统的输入/输出关系为:
对于低通滤波器,只要设计出低通滤波器的冲激响应函数,就可以由上式得到系统的输出了。
假设所希望的数字滤波器的频率响应为
,它是频域的周期函数,周期为2
,那么它与
相对应的傅立叶系数为
以
为冲激响应的数字滤波器将具有频域响
。
但是将
作为滤波器脉冲响应有两个问题:
(1)它是无限长的,与FIP滤波器脉冲响应有限长这一前提不一致
(2)它是非因果的,
对此,要采取以下的措施,
(1)将
截短
(2)将其往右平移,
由此得到
的实际频域响应
,与理想频域响应
相近,但不完全一致。
理论证明上述现象是对
进行简单截短处理的必然结果,一般称为吉布斯现象,为尽可能的减少吉布斯现象,应对
进行加窗截取,即以
作为FIR滤波器的系数。
常用的窗函数有矩形窗、海明窗和布莱克曼窗等。
用窗函数法设计FIR滤波器
Matlab设计FIR滤波器有多种方法和对应的函数,见表7-1。
表7-1matlab设计FIR滤波器的方法和函数
方法
描述
函数
窗方法
使用窗函数和逆傅立叶变换实现
fir1,fir2,kaiserord等
多带方法
包含子带频率域
firls,remez等
最小二乘法
使用最小二乘法将整个频率域上的错误几率压缩到最小
fircls,fircls1等
任意响应法
使用任意响应,包括非线性相位以及复滤波器
cremez等
余弦法
使用三角函数的低通响应
firrcos等
窗函数方法不仅在数字滤波器的设计中占有重要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs现象所带来的影响。
窗函数设计线性相位FIR滤波器步骤如下:
(1)确定数字滤波器的性能要求,临界频率
,滤波器单位脉冲响应长度N
(2)根据性能要求,合理选择单位脉冲响应h(n)的奇偶对称性,从而确定理想频率响应
的幅频特性和相频特性
(3)求理想单位脉冲响应
,在实际计算中,可对
采样,并对其求IDFT的
,用
代替
(4)选择适当的窗函数w(n),根据
求所需设计的FIR滤波器单位脉冲响应
(5)求
,分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述设计过程,以得到满意的结果
FIR1.m
调用格式:
a)b=fir1(N,wn)
b)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】设计一个34阶的高通滤波器,截止频率为0.48
,使用具有30dB波纹的chebyshev窗。
解:
源程序如下:
b=fir1(34,0.48,'high',chebwin(35,30));
freqz(b,1,512)
其响应波形如图7-1所示。
图7-1带通FIR滤波器
【实例7-2】设计一个24阶FIR带通滤波器,通带频率
。
解:
源程序如下:
wn=[0.350.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;%滤波器长度
ifrem(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时,m为0,下式分母为0,不能执行
hd=sin(wc*m)./(pi*m);%理想滤波器的冲激响应
%生成hamming窗
w_ham=(hamming(Nw))';
%频域图像的绘制
h=hd.*w_ham;%滤波器实际冲激响应
freqz(h,[1])
figure
(2);
subplot(2,2,1),stem(n,hd);title('理想脉冲响应')
axis([0Nw-1-0.30.3]);xlabel('n');ylabel('hd(n)')
subplot(2,2,2),stem(n,w_ham);title('hamming窗')
axis([0Nw-1-0.31.2]);xlabel('n');ylabel('w(n)')
subplot(2,2,3),stem(n,h);title('实际脉冲响应')
axis([0Nw-1-0.30.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;
ifrem(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('idaelimpulseresponse')
axis([0Nw-1-0.40.5]);xlabel('n');ylabel('hd(n)')
subplot(2,2,2),stem(n,w_bla);title('blackmanwindow')
axis([0Nw-101.1]);xlabel('n');ylabel('w(n)')
subplot(2,2,3),stem(n,h);title('actualimpulseresponse')
axis([0Nw-1-0.40.5]);xlabel('n');ylabel('h(n)')
其响应波形如图7-4所示。
图7-4blackman窗函数设计FIR滤波器
7.3编程练习
1.设计一个48阶FIR带阻滤波器,通带频率
。
2.用窗函数设计一个线性相位FIR高通滤波器,并满足性能指标:
通带边界频率
阻带边界频率
,阻带衰减不小于40db。
提示:
参考例7-3,4;首先根据阻带衰减,选择合适的窗函数,见课本P342,表7-3。
再根据P345,式7-74写出理想滤波器的冲激响应hd。