资源描述
基于MATLAB的数字滤波器的设计
1 引言
数字滤波器是指完成信号滤波处理功能的,用有限精度算法实现的离散线性非时变系统,其输入是一组(由模拟信号取样和量化的)数字量,其输出是经过变换或说处理的另一组数字量。数字滤波器具有稳定性高、精度高、灵活性大等突出优点。这里所说的数字滤波器是指理想带通,低通等的频率选择数字滤波器。
数字滤波器设计的一个重要步骤是确定一个可实现的传输函数H(z),这个确定传输函数H(z)的过程称为数字滤波器设计。数字滤波器的一般设计过程为:(1)按照实际需要,确定滤波器的性能要求(通常在频域内给定数字滤波的性能要求)。(2)寻找一满足预定性能要求的离散时间线性系统。(3)用有限精度的运算实现所设计的系统。(4)通过模拟,验证所设计的系统是否符合给定性能要求。
2 数字滤波器的设计
滤波器分为两种,分别为模拟滤波器和数字滤波器。数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化的过程中,使信号按预定的形式变化。数字滤波器有多种分类,从数字滤波器功能上分可分为低通、高通、带阻、带通滤波器,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应滤波器(IIR)和有限长冲激响应滤波器(FIR)。
数字滤波器指标:一般来说,滤波器的幅频特性是分段常数的,以低通为例,在通带内逼近于1,阻带内逼近与0,实际设计的滤波器并非是锐截止的通带和阻带两个范围,两者之间总有一个过渡带。在设计滤波器时事先给定幅频特性允许误差,在通带范围内幅度响应以误差逼近于1,在阻带内幅度响应以误差逼近于0。
(1)
式中wc和wr分别为通带边界频率和阻带边界频率,wr-wc为过渡带。在具体的技术指标中往往用通带波动来表示,用最小阻带衰减At来表示,其具体的对应公式这里就不详述了。
2.1 IIR数字滤波器设计
IIR DF的冲激响应h(n)是无限长的,其输入输出的关系为:
(2)
系统函数为
= (3)
设计无限长单位脉冲响应(IIR)数字滤波器一般可有三种方法。
第一种方法,先设计一个合适的模拟滤波器,然后将其数字话,即将S平面映射到Z平面得到所需的数字滤波器。模拟滤波器的设计技巧非常成熟,不仅得到的是闭合形式的公式,而且设计系数已经表格化了。因此,由模拟滤波器设计数字滤波器的方法准确,简便,得到普遍采用。对于这种方法,工程上有两种常见得变换法——脉冲响应不变法及双线性变换法。
第二种方法,在Z平面直接设计IIR数字滤波器,给出闭合形式的公式,或者以所希望的滤波器响应作为依据,直接在Z平面上通过多次选定极点和零点的位置,以逼近该响应。
第三种方法,利用最优化技术设计参数,选定极点和零点在Z平面上的合适位置,在某种最优化准则意义上逼近所希望的响应。但一般不能得到滤波器的系数(即零,极点的位置)作为给定响应的闭合形式函数表达式。优化设计需要完成大量的迭代运算,这种设计法实际上也是IIR滤波器的直接设计。
本文着重介绍由模拟滤波器设计相应的IIR数字滤波器的方法。
(1)脉冲响应不变法
脉冲响应不变法是使数字滤波器的单位脉冲响应序列h(n)逼近模拟滤波器的冲激响应,让h(n)正好等于的采样值。设已有满足要求的模拟滤波器, 则可
®®®
{因为:},
公式导出:
具体转换如下:设(以一阶极点为例)
(4)
作拉氏反变换,得
采样得
作Z变换,得
(5)
与极点关系为: (6)
一般对应关系
(7)
图1 S平面到Z平面变换示意图
所以, 模拟系统稳定因果®数字系统稳定因果。
按照脉冲响应不变法,从S平面到Z平面的映射不是单值关系,而是先将在S平面沿虚轴作周期严拓,再按照映射关系将映射到Z平面,得到,因此,脉冲响应不变法只适用于带限的滤波器(如低通、带通)。
在Matlab中利用M文件impinvar可以对模拟传输函数实行脉冲响应不变法。
(2)双线性变换法
脉冲响应不变法不适带阻和高通滤波器的设计,因为高频带为通带,前述方法易引起混频。故希望:平面虚轴Ûz平面单位圆一周, 且应有
,
,
因为, 所以选变换
(8)
其中可取任意正常数, 后面将导出.
设计思路: .®设计出模拟滤波器®转化成数字滤波器.
图2 数字域频率与模拟域频率的对应关系
转化公式推导如下:
因只关心频率转换, 故可设,, 则有
, (称为双线性变换) (9)
所以模拟滤波器转换成数字滤波器的公式为
(10)
由双线性变换公式, 可得, 视为两复平面变换, 再由
.
可得
(11)
从上式可得:
时,, 上虚轴Û上单位圆周。
时,, 上左半平面Û 上单位圆内。
时,, 上右半平面Û上单位圆外。
故若模拟滤波器稳定,则双线性变换后数字滤波器也稳定。
由于双线性变换法是一种单值映射,因此消除了频率混叠的现象。双线性变换法的缺点是模拟频率与数字频率间的非线性,这种非线性关系要求被变换的连续系统的幅度响应是分段常数型的(某一频率范围内幅度响应近似于某一常数),不然所映射出的数字频率响应相对于原来的模拟频率响应会产生变形。为解决双线性变换中的频率非线性关系,我们采用预畸的方法,即
,其中K=2/T。
在Matlab中利用M文件bilinear可以对模拟传输函数实行双线性变换法。
MATLAB中IIR数字滤波器的设计过程包括两步。第一步,根据给定指标,确定滤波器的阶数N和频率缩放因子Wn。第二步,利用这些参数和给定的波纹参数,确定传输函数的关系。阶数估计:利用双线性变换法设计数字滤波器时,首先要对IIR数字滤波器的阶数进行估计,相应的M文件为:buttord用于巴特沃斯滤波器,cheb1ord用于切比雪夫1型滤波器,cheb2ord用于切比雪夫2型滤波器,ellipord用于椭圆滤波器。滤波器的设计:对于基于双线性变换法的IIR滤波器设计,对应于四种逼近技术(即巴特沃斯、切比雪夫1型和2型及椭圆逼近),MATLAB工具箱中有相应的函数。特别地可以用到下面的M文件:butter用于巴特沃斯滤波器的设计,cheby1用于切比雪夫1型滤波器的设计,cheby2用于切比雪夫2型滤波器的设计,ellip用于椭圆滤波器的设计。这些函数的输出可以是滤波器传输函数分子和分母的系数向量,也可以是滤波器的零极点向量和标量增益因子。同时,利用zp2tf可以由滤波器的零极点向量和标量增益因子得到传输函数分子和分母的系数向量。相应地,利用函数zp2sos可以得到传输函数分子和分母系数向量的二次项因子。在计算出传输函数的系数之后,可以利用M文件freqz来计算频率响应。
2.2 FIR数字滤波器设计
FIR DF的冲激响应h(n)是有限长的,M阶FIR DF可以表示为:
(12)
其系统函数为:
(13)
与IIR数字滤波器的设计不同,FIR滤波器的设计与模拟滤波器的设计没有任何联系。因此,FIR滤波器的设计基于对指定幅度响应的直接逼近,并通常要求其具有线性相位响应。为了保证滤波器具有线性相位特性,滤波器系数必须满足条件:h(n)=h(M-1-n)。
目前关于FIR滤波器的设计方法主要有三种,即窗函数法,频率取样法和切比雪夫等波纹逼近的最优化设计方法。一般应用较多的是第一种和第三种方法。这是因为窗函数法比较简单,可应用现成的窗函数公式,在技术指标要求不严格的情况下市比较灵活的。最优化设计法必须借助计算机计算,但是它能得到最佳的等波纹的线性相位FIR滤波器。目前切比雪夫等波纹的线性相位FIR滤波器的计算机机助设计程序已经比较完善,由于采用了REMEZ迭代算法,所以设计效率也很高,在应用中越来越占优势。
(1) 窗函数法
一般设计过程总是先给定一理想的滤波器频率响应,然后设计一个FIR滤波器,用它的频率响应来逼近理想的。这种逼近中最直接的方法,是在时域中用FIR滤波器的单位脉冲响应h(n)去逼近理想的单位脉冲响应。因而,先由的IDTFT导出
(14)
由于是矩形频率特性,故一定是无限长的序列,且是非因果的。然而FIR滤波器是有限长的,所以用有限长的h(n)来逼近无限长的,最简单的方法是截取中最重要的一段,将无限长的截取成长度为M的有限长序列,等效于再上施加了一个长度为M的矩形窗口,更为一般的,可以用一个长度为M的窗口函数w(n)来截取,即
(15)
这一方法通常称为窗函数法,窗口函数的形状及长度M的选择是窗函数法的关键。
下面我们一低通为例,了解一下窗函数法的运用:
①提出希望频率响应函数(低通)
图3 理想低通滤波器的频响
线性相位, 具有片断特点, 即
②算出
(无限长)
图4 理想低通的单位脉冲响应(无限长的一部分)
③加窗,长, 得
(*)
要线性相位, 就要关于偶对称,而关于偶对称, 故要求
所以要求关于偶对称.
图5 窗函数 图6 加窗后的单位脉冲响应
再回过来检验是否满足精度要求.
图7 图4的脉冲响应的频响 图8 理想频响与实际频响的对比
若基本满足, 则依截取的, 制硬件, 编软件.
为便于选择使用, 将5种常见的窗函数基本参数如表1所示。
表1 5种常见的窗函数基本参数
类型
窗函数的
旁瓣峰
过渡带宽度
加窗后滤波器的
阻带最小衰减
rectwin
-13
4p/N
-21
bartlet三角
-25
8p/N
-25
hanning
-31
8p/N
-44
hamming
-41
8p/N
-53
blackman
-57
12p/N
-74
(2) 频率取样法
窗口设计法事从时域出发,把理想的用一定形状的窗口函数截取成有限长的h(n),以此h(n)来近似理想的,从而频率响应也近似于理想的频率响应。我们知道一个有限长序列可以通过其频谱的相同长度的等间隔采样值准确地恢复原有的序列。频率采样法便是从频域出发,对理想的频率响应加以等间隔采样
(16)
然后以此作为实际FIR滤波器的频率特性的离散样本H(k),即
(17)
由H(k)通过IDFT可求出有限长序列h(n)为
(18)
利用M个频率的离散样本H(k)同样可求出FIR滤波器的系统函数H(z)及频率响应。 (19)
令可得到滤波器的频率响应。如果设计的是线性相位的FIR数字滤波器,其采样值H(k)的相位的幅度一定要满足特定的约束条件,这个设计时一定要注意。
(3) 最优化设计法
最优化设计法事以最佳一致逼近(最大误差最小化)理论为基础,利用雷米兹算法设计的具有等波纹特性的设计方法。具体设计步骤如下:
①对设计指标进行归一化处理。
②确定remezord函数所需要的参数。包括归一化边界频率、各频带的幅度要求和波纹要求等。归一化边界频率总是从0开始到1结束,故只需递增列出中间的边界频率;频带幅度要求不含过渡区,个数是边界频率个数的一半加1;波纹要求是频带内幅度允许的波动要求,与分贝间的关系是:
(20)
③利用remezord函数确定remez所需参数。
④调用remez函数进行设计。
⑤利用freqz函数验算技术指标是否满足要求。
2.3 数字滤波器类型的选择
IIR和FIR各有优缺点,在实际运用中如何选择它们,这里做一个简单的比较。
表2 IIR与FIR的比较
IIR
FIR
设计方法
利用AF的设计图表,可简单,有效的完成设计
一般无解析的设计公式,要借助计算机程序完成
设计结果
只能得到幅频特性,相频特性未知(缺点),如需要线性相位,需用全通网络校准,但增加滤波器的阶数和复杂性
可得到幅频特性(可以多带)和线性相位(优点)
稳定性
有稳定性问题
极点全部在原点(永远稳定),无稳定性问题
因果性
总是满足,任何一个非因果的有限长序列,总可以通过一定的延时,转变为因果序列
结构
递归系统
非递归
运算误差
有反馈,由于运算中的四舍五入会产生极限环
一般无反馈,运算误差小
快速算法
无快速运算方法
可用FFT减少运算量
从以上简单的比较可以得到,IIR与FIR滤波器各有所长,所以应根据实际应用要求,从多方面考虑加以选择。
3 数字滤波器的MATLAB设计
(1)IIR的直接程序设计法
例如欲设计一数字(IIR)带阻滤波器,其数字域指标为:数字阻带边缘频率分别为0.4和0.7,数字通带边缘频率为0.25和0.8,通带波动为1db最小阻带衰减为40db。
此题的MATLAB程序为:
ws=[0.4*pi 0.7*pi]; %数字阻带边缘频率
wp=[0.25*pi 0.8*pi]; %数字通带边缘频率
rp=1 ; %通带波动(db)
as=40; %阻带衰减
[n,wn]=cheb2ord(wp/pi,ws/pi,rp,as);
%根据给定指标,确定滤波器的阶数N和频率缩放因子Wn
[b,a]=cheby2(n,as,ws/pi,'stop');%返回的b,a分别为H(z)的分子、分母。
[h,w]=freqz(b,a,512);%返回的h,w分别为滤波器的频率响应及其频率
plot(w/pi,abs(h));%画出频率响应(以w/pi为横轴)
grid;
xlabel('w/pi');
ylabel('幅值');
title('频率响应');
程序运行结果为:
图9 所设计的带阻滤波器的频率响应
在设计中如果该滤波器的特性不满足要求,原有的参数必须做相应的调整,在程序中只需对参数做新的设定就可以得到所需的滤波器。接下来我们来看看此题所设计的滤波器的滤波效果:S为含有3个频率成分的信号(归一化频率(w/2)分别为0.1、0.3、0.45),用所设计的滤波器滤除归一化频率为0.3的成分。
n=0:100;
s1=sin(pi*0.2*n);
s2=sin(pi*0.6*n);
s3=sin(pi*0.9*n);
s4=s1+s3;
s=s1+s2+s3;
sf=filter(b,a,s);
subplot(311)
stem(n,s);title('滤波前的信号');
subplot(312);
stem(n,sf);title('滤波后的信号');
subplot(313);
stem(n,s4);title('想要保留的信号');
程序运行的结果为:
图10 采用filter函数进行数字滤波前后信号比较示意图
由图可以看出,滤波后的信号与想要保留的信号基本一致(相位有些许偏差,但基本一致),所以我们可以说该滤波器基本满足了以上所提出的滤波要求。
(2)FIR的直接程序设计法
例如欲设计一个线性相位数字(FIR)带通滤波器,其数字域指标为:数字通带边界频率为0.35和0.65,数字阻带边界频率为0.2和0.8,通带波动为1db,最小阻带衰减为60db。
① FIR数字滤波器的窗函数法
此题的MATLAB程序为:
ws1=0.2*pi;
wp1=0.35*pi;
wp2=0.65*pi;
ws2=0.8*pi;
as=60;
tr=min((wp1-ws1),(ws2-wp2));
M=ceil(11*pi/tr)+1;
%滤波器的阶数,程序运行后M=75
n=[0:1:M-1];
r=(M-1)/2;
%r为群时延
wc1=(ws1+wp1)/2;
wc2=(wp2+ws2)/2;
hd=sin(wc2*((n-r)+eps))./(pi*((n-r)+eps))-sin(wc1*((n-r)+eps))./(pi*((n-r)+eps));
%hd为理想滤波器的脉冲响应
w_bla=(blackman(M))';
%长度为M的blackman窗
h=hd.*w_bla;
%h为滤波器的实际脉冲响应
stem(n,h);
title('滤波器的实际单位脉冲响应');
freqz(h,1,512);
title('幅度响应和相位响应');
图11 所设计的滤波器的实际单位脉冲响应
由上图可知滤波器的实际脉冲响应h是偶对称的,即h(n)=h(M-1-n),故该滤波器满足FIR线性相位的条件,该滤波器是线性相位的FIR滤波器。
图12 所设计的带通滤波器的幅度和相位响应
由滤波器的相位特性也可以看出该滤波器是线性相位的FIR滤波器。接下来我们来看看此题所设计的滤波器的滤波效果:S为含有3个频率成分的信号(归一化频率(w/2)分别为0.05、0.2、0.45),用所设计的滤波器滤除归一化频率为0.05和0.45的成分。
l=0:100;
s1=sin(0.1*pi*l);s2=sin(0.4*pi*l);s3=sin(pi*0.9*l);
s=s1+s2+s3;
sf=filter(h,1,s);
subplot(311)
stem(l,s);title('滤波前的信号');
subplot(312);
stem(l,sf);title('滤波后的信号');
subplot(313);
stem(l,s2);title('想要保留的信号');
图13 采用filter函数进行数字滤波前后信号比较示意图
由上图可知滤波后的信号和想要保留的信号的幅度和频率基本一致(滤波后的信号相对于想要保的信号有一个相位延迟,这是线性相位FIR滤波器的群延迟引起的,此滤波器留的群延迟r=(M-1)/2=37),所以我们可以说该滤波器基本满足了以上所提出的滤波要求。
② FIR数字滤波器的频率采样法
此题的MATLAB程序为:
M=40;
%取滤波器的阶数为40
al=(M-1)/2;
%群时延
n=0:M-1;
T2=0.59417456;
T1=0.109021;
Hrs=[zeros(1,5),T1,T2,ones(1,7),T2,T1,zeros(1,9),T1,T2,ones(1,7),T2,T1,zeros(1,4)];
%采样值的幅值
k1=0:floor((M-1)/2);k2=floor((M-1)/2)+1:M-1;
angH=[-al*(2*pi)/M*k1,al*(2*pi)/M*(M-k2)];
%采样值的相位
H=Hrs.*exp(j*angH);
h=real(ifft(H,M));
%长度为M的单位脉冲响应
stem(n,h);
title('滤波器的实际单位脉冲响应');
freqz(h,1,512);
title('幅度响应和相位响应');
图14 所设计的滤波器的实际单位脉冲响应
由图14可知滤波器的实际脉冲响应h是偶对称的,即h(n)=h(M-1-n),故该滤波器满足FIR线性相位的条件,该滤波器是线性相位的FIR滤波器。
图15 所设计的带通滤波器的幅度和相位响应
由滤波器的相位特性也可以看出该滤波器是线性相位的FIR滤波器。此滤波器的群延时为al=(M-1)/2=19.5。接下来我们来看看此题所设计的滤波器的滤波效果:S为含有3个频率成分的信号(归一化频率(w/2)分别为0.05、0.2、0.45),用所设计的滤波器滤除归一化频率为0.05和0.45的成分。
l=0:100;
s1=sin(0.1*pi*l);s2=sin(0.4*pi*l);s3=sin(pi*0.9*l);
s=s1+s2+s3;
sf=filter(h,1,s);
subplot(311)
stem(l,s);title('滤波前的信号');
subplot(312);
stem(l,sf);title('滤波后的信号');
subplot(313);
stem(l,s2);title('想要保留的信号');
图16 采用filter函数进行数字滤波前后信号比较示意图
同上面分析相似,滤波后的信号和想要保留的信号的幅度和频率基本一致(滤波后的信号相对于想要保的信号有一个相位延迟,这是线性相位FIR滤波器的群延迟引起的,此滤波器留的群延迟(r=(M-1)/2=19.5),所以我们可以说该滤波器基本满足了以上所提出的滤波要求。
③ FIR数字滤波器的最优设计法
此题的MATLAB程序为:
%设计指标
ws1=0.2*pi;
wp1=0.35*pi;
wp2=0.65*pi;
ws2=0.8*pi;
rp=1;
as=60;
%设置边界频率和幅度要求
F=[ws1/pi,wp1/pi,wp1/pi,ws2/pi];
A=[0,1,0];
%设置各频带的波纹要求
devp=(10^(rp/20)-1)/(10^(rp/20)+1);
devs=10^(-as/20);
dev=[devs,devp,devs];
%确定remez参数,其中滤波器的阶数为(N+1),程序运行后得到N=26
[N,Fo,Ao,W]=remezord(F,A,dev);
%调用remez函数进行设计
h=remez(N,Fo,Ao,W);
n=0:N;
stem(n,h);
title('滤波器的单位冲激响应');
freqz(h,1,512);
title('幅度响应和相位响应');
图17 所设计的滤波器的实际单位脉冲响应
由图17可知滤波器的实际脉冲响应h是偶对称的,即h(n)=h(N-n),故该滤波器满足FIR线性相位的条件,该滤波器是线性相位的FIR滤波器。
图18 所设计的带通滤波器的幅度和相位响应
由滤波器的相位特性也可以看出该滤波器是线性相位的FIR滤波器。此滤波器的群延时为al=(N)/2=13。接下来我们来看看此题所设计的滤波器的滤波效果:S为含有3个频率成分的信号(归一化频率(w/2)分别为0.05、0.2、0.45),用所设计的滤波器滤除归一化频率为0.05和0.45的成分。
l=0:100;
s1=sin(0.1*pi*l);s2=sin(0.4*pi*l);s3=sin(pi*0.9*l);
s=s1+s2+s3;
sf=filter(h,1,s);
subplot(311)
stem(l,s);title('滤波前的信号');
subplot(312);
stem(l,sf);title('滤波后的信号');
subplot(313);
stem(l,s2);title('想要保留的信号');
图19采用filter函数进行数字滤波前后信号比较示意图
同上面分析相似,滤波后的信号和想要保留的信号的幅度和频率基本一致(滤波后的信号相对于想要保的信号有一个相位延迟,这是线性相位FIR滤波器的群延迟引起的,此滤波器留的群延迟r=(N)/2=13),所以我们可以说该滤波器基本满足了以上所提出的滤波要求。
4 Simulink仿真
本文通过调用Simuink中的功能模块构成数字滤波器的仿真框图,在仿真过程中,可以双击各功能模块,随时改变参数,获得不同状态下的仿真结果。在Simulink环境下,通过设置滤波器功能模块的参数(digital filter design模块的参数)来直接设计滤波器。
我们先设计满足上述带阻IIR滤波器参数的滤波器,再进行仿真。找到Simuink功能模块,communications blockset/comm filters/filter designs link/digital filter design,找到digital filter design模块。分别在sources和sinks中找到正玄信号示波器,再在math operation中找到相加器。信号n=0:100;s1=sin(pi*0.2*n);s2=sin(pi*0.6*n);s3=sin(pi*0.9*n);s4=s1+s3;
s=s1+s2+s3;修改正玄信号的参数sine type/time based、frequency分别改为0.2*pi,0.6*pi,0.9*pi,sample time改为1。其他模块的参数根据上述要求进行调整。将下图分别是仿真框图和滤波前后信号的波形:
图34 仿真框图
图35 滤波前后信号的比较
由上图可以看出信号s经过滤波后大致分离出了归一化频率为0.3的信号,即滤波后的信号与s4大致相同(与前面两种方法的结果相比较可知三种方法所得结果大致相同)。
同理我们设计满足上述带通FIR滤波器参数的滤波器,再进行仿真。输入
l=0:100;s1=sin(0.1*pi*l);s2=sin(0.4*pi*l);s3=sin(pi*0.9*l);s=s1+s2+s3
下图分别是仿真框图和滤波前后信号的波形:
图36 仿真框图
图37 滤波前后信号的比较
由上图可以看出信号s经过滤波后大致分离出了归一化频率为0.05和0.45的信号,即滤波后的信号与s2大致相同(与前面两种方法的结果相比较可知三种方法所得结果大致相同)。
5 结论
利用MATLAB的强大运算功能,基于MATLAB信号处理工具性的数字滤波器设计法可以快速有效的设计由软件组成的常规数字滤波器,设计方便、快捷,大大地减轻了工作量。在设计过程中可以对比滤波器特性,随时更改参数,以达到滤波器设计的最优化。
展开阅读全文