OmegaS = (2/T)*tan(ws/2);
%设计 Chebyshev 低通滤波器原型 ep = sqrt(10^(Rp/10)-1); A = 10^(As/20); OmegaC = OmegaP; OmegaR = OmegaS/OmegaP; g = sqrt(A*A-1)/ep;
N=ceil(log10(g+sqrt(g*g-1))/log10(OmegaR+sqrt(OmegaR*OmegaR-1)));
[z,p,k] = cheb1ap(N,Rp); a = real(poly(p)); aNn = a(N+1); p = p*OmegaC; a = real(poly(p)); aNu = a(N+1); k = k*aNu/aNn; b0 = k;
B = real(poly(z)); b = k*B; % 双线性变换
[bz,az] = bilinear(b,a,FS); % 绘制结果
32
%获取零极点参数
%freqz(bz,az,200,FS,'whole'); H=freqz(bz,az,200,'whole'); plot(abs(H));
图2-14双线性变换法实现 Chebyshev低通(I 型) [1]
2.2.2 高通变换
有模拟低通滤波器至模拟高通滤波器的变换就是s变量的倒量变
21?z?1换。将这个关系用于高通滤波器的设计,只要将式子s?双线
T1?z?1性变换中的s用其倒数1/s代替,就可以得到数字高通滤波器,即
T1?z?1s?
21?z?1 (2-26)
由于倒量的变换没有改变模拟滤波器的稳定条件,因此,也不会
j?影响双线性变换后的稳定条件。令s?j?,z?e,代入(2-26)中,
可得
T?T??.cot(?/2) (2-27) ??.cot(?/2) 或
22 33
在MATLAB环境下用函数对用双线性变换法设计一个ChebyshevⅡ高通滤波器的实现如下:
s=2*pi*1kHz,Wp=2*pi*1.4kHz,在Ws处的最小衰减为15dB,在Wp处的最大衰减不超过0.3dB,抽样频率为20kHz[1]。
编程代码:
ws=2*pi*1000; ws1=ws*2*pi; wp=2*pi*1400; wp1=wp*2*pi; rp=0.3; rs=15; fs=20000;
[N,Wn]=cheb2ord(wp1,ws1,rp,rs,'s'); [z,p,k]=cheb2ap(N,rs); [A,B,C,D]=zp2ss(z,p,k);
[At,Bt,Ct,Dt]=lp2hp(A,B,C,D,Wn); [At1,Bt1,Ct1,Dt1]=bilinear(At,Bt,Ct,Dt,fs); [num,den]=ss2tf(At1,Bt1,Ct1,Dt1); freqz(num,den); [H,W]=freqz(num,den); plot(W*fs/(2*pi),abs(H)); grid;
34
xlabel('频率/Hz'); ylabel('幅值');
图2-15 ChebyshevⅡ高通滤波器的频率响应(基于MATLAB实现) 由图看出模拟滤波器在Ω趋于无穷处的三阶零点通过高通变换后出现在w=0(z=1)处,这正是高通滤波器所希望的。 2.2.3 带通变换
在已知模拟低通滤波器的系统函数G(s),则模拟低通滤波器s平面到数字带通滤波器的Z平面的变换公式:
1?2z?1coa?0?1 (2-28)s?2z?1令s?j?,z?ej? 代入(2-28),可得:
??cos?0?cos?
sin? (2-29)
在设计带通时,通过给定的上下边界频率?1和?2代入(2-29)式中就能得到
?1?cos?0?cos?1cos?0?cos?2 和 ?2?
sin?1sin?2 35
由于?1和?2是一对镜像频率即:?1=-?2将此关系式代入上面的两个等式可得
cos?0?sin(?1??2) (2-30)
sin?1?sin?2通过(2-30)式可以求得模拟低通边界?c:
?c?cos?0?cos?1sin?1 (2-31)
根据上式,将数字带通滤波器中所给出的边界频率映射到低通模拟滤波器的边界频率作为设计的指标设计的低通模拟滤波器,再通过(2-28)式,就能得出特定滤波器要求的数字带通滤波器。
下面在MATLAB环境下用函数对带通数字滤波器的仿真实现: 编程代码:
%采样频率 100Hz,Wpl=20Hz,Wph=30Hz,Wsl=15Hz,Wsh=35Hz,
% 频率/采样频率*2*pi
%Wpl=0.4*pi,Wph=0.6*pi,Wsl=0.2*pi,Wsh=0.8*pi, %Rp=1;As=20
T = 1; Fs = 1/T; % Set T=1 %T=2;
Wpl=tan(0.4/2/Fs*pi); Wph=tan(0.6/2/Fs*pi); Wsl=tan(0.3/2/Fs*pi); Wsh=tan(0.7/2/Fs*pi);
36