图5-9 椭圆模拟原型滤波器平方幅频图
程序运行结果见图5-9。可见阶数为4的椭圆滤波器的过渡带已相当窄(陡),但这种特性的获得是以牺牲通带和阻带的单调平滑特性为代价的。可以看到滤波器的阶数越高平方幅频响应越接近于矩形。
5.3.5Bessel滤波器
前面讲过的各类原型滤波器均没有绘出其相位随频率的变化特性(相频特性)。在后面的数字信号处理学习中将会看到它们的相位特性是非线性的。本节所介绍的Bessel滤波器就能最大限度地减少相频特性的非线性,使得通带内通过的信号形状不变(拷贝不走样)。
Bessel模拟低通滤波器的特点是在零频时具有最平坦的群延迟,并在整个通带内群延迟几乎不变。在零频时的群延迟为。由于这一特点,Bessel模拟滤波器通带内保持信号形状不变。但数字Bessel滤波器没有平坦特性,因此MATLAB信号处理工具箱只有模拟Bessel滤波器设计函数。
函数besselap用于设计Bessel模拟低通滤波器原型,调用格式为:
[z,p,k]=besselap(N)
式中,N为滤波器的阶数,应小于25。z,p,k为滤波器的零点、极点和增益。
滤波器的传递函数无零点,具有与(5-10)式相同的形式。下面用实例观看Bessel滤波器的幅频和相频特性。
【例5-5】绘制5阶和10阶Bessel低通滤波器原型的平方幅频和相频图。
%Samp5_5
clf
n=0:0.01:2; %设置频率点
for ii=1:2
switch ii
case 1,pos=1;N=5;
case 2,pos=3;N=10;
end
[z,p,k]=besselap(N); %设计Bessel模拟滤波器
[b,a]=zp2tf(z,p,k); %将零点极点增益形式转化为传递函数形式
[H,w]=freqs(b,a,n); %求得传递函数的复数频率响应
magH2=(abs(H)).^2;
phaH=unwrap(angle(H));
%求得函数的相位角并进行解缠绕运算
phaH=phaH*180/pi;
%将相位角由弧度转化为度
posplot=['2,2,' num2str(pos)]; %设置绘图位置字符串
subplot(posplot);
plot(w,magH2); grid on
%绘出平方幅频响应
title(['N=' num2str(N)]);
xlabel('w/wc'); ylabel('Bessel
|H(jw)|^2');
grid on
subplot(['2,2,' num2str(pos+1)]);
plot(w,phaH);
xlabel('w/wc');ylabel('Bessel 相位/^o');
title(['N=' num2str(N)]);
grid on
end
图5-10
Bessel模拟原型滤波器相频图
可见,Bessel滤波器具有最优线性相频的特点,但这个特点的获得是以牺牲窄过渡带为代价的,即滤波器的幅频平方特性与矩形特性相差甚远。
对所有的模拟原型滤波器做一总结可知:Butterworth滤波器在通带和阻带内均具有平滑单调的特点,但在相同过渡带宽的条件下,该滤波器所需的阶数最多。Chebyshev I和II型滤波器在通带或阻带内具有波纹,但在相同过渡带宽的条件下,该滤波器所需的阶数比Butterworth滤波器要少。椭圆滤波器在通带和阻带内均有波纹出现,但在相同过渡带宽的条件下,该滤波器所需的阶数最少。Bessel滤波器具有最宽的过渡带,但具有最优的线性相频特性。因此没有绝对“好”的滤波器,要根据解决问题的不同选择不同的滤波器,因此,每一种滤波器的设计方法我们都要熟练掌握。
5.4 频 率 变
换
前面所讲的模拟原型滤波器均是截止频率为1的滤波器,在实际设计中是很难遇到的,然而它是设计其他各类滤波器的基础。我们通常遇到的是截止频率任意的低通滤波器、高通滤波器、带通滤波器和带阻滤波器。如何以由低通原型模拟滤波器为基础设计这些滤波器呢?这就要用到我们今天要讲的频率变换。所谓频率变换是指各类滤波器(低通、高通、带通、带阻)和低通滤波器原型的传递函数中频率自变量之间的变换关系。通过频率变换,我们可以从模拟低通滤波器原型获得模拟的低通滤波器、高通滤波器、带通滤波器和带阻滤波器,再借助于s域至z域的变换关系又可以设计各类后面所讲的无限冲激响应数字滤波器,这是滤波器设计的重要方法之一。
MATLAB信号处理工具箱有lp2lp,lp2hp,lp2bp,lp2bs四个频率变换函数。下面分别叙述其使用方法及各参量的意义。
(1)
函数lp2lp用于实现由低通模拟原型滤波器至低通滤波器的频率变换,调用格式为
[bt,at]=lp2lp(b,a,)
其中,a,b为模拟原型滤波器的分母和分子多项式的系数,为低通滤波器所期望的截止频率(rad/s),若给定的单位为Hz,应乘以2。bt,at为返回的低通滤波器的分母和分子多项式的系数。该函数将模拟原型滤波器传递函数执行下面变换:
(5-15)
式中,H(p)为低通原型滤波器传递函数,H(s)为低通滤波器传递函数。该项操作可以执行模拟原型滤波器由截止频率为1到指定截止频率的变换,其原理讨论已超出本课程的范围,可参看其他信号处理参考书。下面的例子说明如何进行模拟原型低通滤波器变换为截止频率不为1的模拟低通滤波器。
【例5-6】将4阶椭圆模拟原型滤波器变换为截止频率为0.5的椭圆模拟低通滤波器,其中通带波纹Rp=2dB,阻带衰减Rs=30dB。
%Samp5_6
Rp=2;Rs=30; %模拟原型滤波器的通带波纹为2dB,阻带衰减为30dB。
[z,p,k]=ellipap(4,Rp,Rs); %设计椭圆滤波器
[b,a]=zp2tf(z,p,k);
%由零点极点增益形式转换为传递函数形式
[H,w]=freqs(b,a,0:0.01:2); %给出复数频率响应
subplot(2,1,1),plot(w,abs(H).^2); %绘出平方幅频函数
xlabel('w/wc');ylabel('椭圆
|H(jw)|^2');
title('原型低通椭圆滤波器(wc=1)')
[bt,at]=lp2lp(b,a,0.5); %将模拟原型低通滤波器的截止频率变换为0.5
[Ht,wt]=freqs(bt,at,0:0.01:2); %给出复数频率响应
subplot(2,1,2),plot(wt,abs(Ht).^2); %绘出平方幅频函数
xlabel('w/wc');ylabel('椭圆 |H(jw)|^2');
title('低通椭圆滤波器(wc=0.5)')
图5-11 将4阶椭圆模拟原型滤波器变换为截止频率为0.5的椭圆模拟低通滤波器的结果
程序的运行结果见图5-11。清楚地表明将截止频率由1变换到0.5。
(2)
函数lp2hp用于实现由低通模拟滤波器至高通滤波器的频率变换。调用格式:
[bt,at]=lp2hp(b,a,)
式中,为高通模拟滤波器所期望的截止频率(rad/s),若给定的频率单位为Hz,应乘以2
。该函数将模拟原型滤波器传递函数执行下面变换:
(5-16)
【例5-7】将6阶Chebyshev I型原型滤波器变换为截止频率为0.8的模拟高通滤波器,其中通带波纹Rp=0.5dB。
%Samp5_7
Rp=0.5; %设置滤波器的通带波纹为0.5dB
[z,p,k]=cheb1ap(6,0.5); %设计Chebyshev
I型模拟原型滤波器
[b,a]=zp2tf(z,p,k);
%由零点极点增益形式转化为传递函数形式
[H,w]=freqs(b,a,0:0.01:2); %计算传递函数的复数频率响应
subplot(2,1,1),plot(w,abs(H).^2); %绘制传递函数的平方幅频响应
xlabel('w/wc');ylabel('Chebyshev I |H(jw)|^2');
title('Chebyshev I 低通原型滤波器(wc=1)')
[bt,at]=lp2hp(b,a,0.8); %由低通原型滤波器转换为截止频率为0.8的高通滤波器
[Ht,wt]=freqs(bt,at,0:0.01:2); %计算滤波器的复数频率响应
subplot(2,1,2),plot(wt,abs(Ht).^2); %绘制传递函数的平方幅频响应
xlabel('w/wc');ylabel('Chebyshev I |H(jw)|^2');
title('Chebyshev I 高通滤波器(wc=0.8)')
图5-12 将6阶Chebyshev I型原型滤波器变换为截止频率为0.8的模拟高通滤波器的结果图
程序运行结果见图5-12。可见实现了从低通滤波器到高通滤波器的转换,并且截止频率也符合例题要求。
(3)
函数lp2bp用于实现由低通模拟原型滤波器至带通滤波器的频率变换。调用格式:
[bt,at]=lp2bp(b,a,,Bw)
式中,为带通滤波器的中心频率(rad/s),Bw为带通滤波器带宽(rad/s)。而
(5-17)
式中, 为带通滤波器的下边界频率,
为带通滤波器上边界频率。若给定的边界频率为Hz需乘以2
。
该函数将模拟原型滤波器传递函数执行下面变换运算:
(5-18)
下面用例题说明截止频率和滤波器类型的转换。这里要注意,输出的带通滤波器阶数为模拟原型滤波器阶数的2倍。
【例5-8】将6阶Chebyshev
II型原型滤波器变换为模拟带通滤波器,其中上边界截止频率为0.8 rad/s,下边界截止频率为1.4 rad/s,阻带衰减Rs=20dB。
%Samp5_8
Rs=20;
%滤波器的阻带衰减为20dB
[z,p,k]=cheb2ap(6,Rs); %设计6阶阻带衰减为20dB的Chebyshev II型原型滤波器
[b,a]=zp2tf(z,p,k);
%将零点极点增益形式转换为传递函数形式
[H,w]