BÀI TẬP XỬ LÝ TÍN HIỆU SỐ 2
SVTH: Lê Thành Phú. Lớp 11DT1. Nhóm 39. MSSV: 106110097
Yêu cầu:
Thiết kế bộ lọc số IIR thông cao thõa mãn các ràng buộc sau:
wp = 0.65π; ws = 0.45π; Rp = 1dB; As = 15dB.
Sinh viên thực hiện những yêu cầu sau:
1. Thiết kế bằng cách sử dụng bộ lọc Chebyshev-I, phép biến đổi song tuyến tính (bilinear
transform), hàm zmapping (để chuyển từ bộ lọc số thông thấp sang thông cao).
2. Làm lại yêu cầu 1 nhưng với bộ lọc Butterworth, Chebyshev-II, và Elliptic (trong trường
hợp này , để biểu diễn kết quả, có thể chỉ cần vẽ đồ thì biên độ theo dB). Nhận xét.
Chú ý: Các đồ thị cần đươc biểu diển rõ ràng.
Thực hiện:
1. Bộ lọc Chebyshev-I
% Highpass digital:
% whp=0.65*pi
% whs=0.45*pi
% Rp=1dB
% As=15dB
% 1. Use chebyshev I design lowpass, bilinear transform
% function zmapping (convert lowwpaas to highpass
% Chon tan so cat bo loc thong thap wc=0.2*pi
%CODE:
%Chương trình chính:
wp = 0.65*pi;
ws= 0.45*pi;
Rp = 1; % Passband ripple in dB
As=15; %Stopband attenuation in dB
[b,a] = cheb1hpf(wp,ws,Rp,As);
[C,B,A] = dir2cas(b,a)
[db,mag,pha,grd,w] = freqz_m(b,a);
magRp = (10^(-Rp/20));
%plot
%Amplitude Response
subplot(2,2,1); plot(w/pi,mag);
axis([0,1,0,1.2]); grid
title('Amplitude Response');
xlabel('frequency in pi units');
ylabel('|Hr(w)|');
set(gca,'XTickMode','manual','Xtick',[0;ws/pi;wp/pi;1]);
set(gca,'YTickMode','manual','Ytick',[0;magRp;1]);
%Magnitude Response
subplot(2,2,2); plot(w/pi,db);
axis([0,1,-30,10]); grid
title('Magnitude Response');
xlabel('frequency in pi units');
ylabel('Decibels');
set(gca,'XTickMode','manual','Xtick',[0;ws/pi;wp/pi;1]);
set(gca,'YTickMode','manual','Ytick',[-30;-As;-1;0]);
%Phase Response
subplot(2,2,3); plot(w/pi,pha/pi);
axis([0,1,-1,1]); grid
title('Phase Response');
xlabel('frequency in pi units');
ylabel('Angle(Hr(w))');
set(gca,'XTickMode','manual','Xtick',[0;ws/pi;wp/pi;1]);
set(gca,'YTickMode','manual','Ytick',[-1; 0; 1]);
%Các hàm sử dụng trong code
%Hàm thiết kế bộ lọc thông cao theo Chebyshev-I
function [b,a] = cheb1hpf(wp,ws,Rp,As)
% IIR Highpass filter design using Chebyshev-1 prototype
% function [b,a] = cheb1hpf(wp,ws,Rp,As)
% b=Numerator polynomial of the highpass filter
% a=Denominator polynomial of the highpass filter
%wp=Passband frequency in radians
%ws=Stopband frequency in radians
%Rp=Passband ripple in dB
%As=Stopband attenuation in dB
%
% Determine the digital lowpass cutoff frequencies:
wplp = 0.2*pi;
alpha = -(cos((wplp+wp)/2))/(cos((wplp-wp)/2));
wslp = angle(-(exp(-j*ws)+alpha)/(1+alpha*exp(-j*ws)));
%
% Compute Analog lowpass Prototype Specifications:
T=1;Fs=1/T;
OmegaP = (2/T)*tan(wplp/2);
OmegaS = (2/T)*tan(wslp/2);
% Design Analog Chebyshev Prototype Lowpass Filter:
[cs,ds] = afd_chb1(OmegaP,OmegaS,Rp,As);
% Perform Bilinear transformation to obtain digital lowpass
[blp,alp] = bilinear(cs,ds,Fs);
% Transform digital lowpass into highpass filter
Nz = -[alpha,1]; Dz = [1,alpha];
[b,a] = zmapping(blp,alp,Nz,Dz);
%Hàm Analog Lowpass Filter Design: Chebyshev-1
function [b,a] = afd_chb1(Wp,Ws,Rp,As);
% Analog Lowpass Filter Design: Chebyshev-1
%
% [b,a] = afd_chb1(Wp,Ws,Rp,As);
% b=Numerator coefficients of Ha(s)
% a=Denominator coefficients of Ha(s)
%Wp=Passband edge frequency in rad/sec; Wp > 0
%Ws=Stopband edge frequency in rad/sec; Ws > Wp > 0
%Rp=Passband ripple in +dB; (Rp > 0)
%As=Stopband attenuation in +dB; (As > 0)
%
if Wp <= 0
error('Passband edge must be larger than 0')
end
if Ws <= Wp
error('Stopband edge must be larger than Passband edge')
end
if (Rp <= 0) | (As < 0)
error('PB ripple and/or SB attenuation ust be larger than 0')
end
ep = sqrt(10^(Rp/10)-1); A = 10^(As/20);
OmegaC = Wp; OmegaR = Ws/Wp; g = sqrt(A*A-1)/ep;
N=ceil(log10(g+sqrt(g*g-1))/log10(OmegaR+sqrt(OmegaR*OmegaR-1)));
fprintf('\n*** Chebyshev-1 Filter Order = %2.0f \n',N)
[b,a]=u_chb1ap(N,Rp,OmegaC);
% Unnormalized Chebyshev-1 Analog Lowpass Filter Prototype
function [b,a] = u_chb1ap(N,Rp,Omegac);
% Unnormalized Chebyshev-1 Analog Lowpass Filter Prototype
%
% [b,a] = u_chb1ap(N,Rp,Omegac);
% b=numerator polynomial coefficients
% a=denominator polynomial coefficients
% N=Order of the Elliptic Filter
% Rp=Passband Ripple in dB; Rp > 0
% Omegac = Cutoff frequency in radians/sec
%
[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;
% Frequency band Transformation from Z-domain to z-domain
% Chuyen tu bo loc thong thap sang thong cao
function [bz,az] = zmapping(bZ,aZ,Nz,Dz)
% Frequency band Transformation from Z-domain to z-domain
%
% [bz,az] = zmapping(bZ,aZ,Nz,Dz)
% performs:
% b(z) b(Z)|
% = | N(z)
% a(z) a(Z)|@Z =
% D(z)
%
bNzord = (length(bZ)-1)*(length(Nz)-1);
aDzord = (length(aZ)-1)*(length(Dz)-1);
bzord = length(bZ)-1; azord = length(aZ)-1;
bz = zeros(1,bNzord+1);
for k = 0:bzord
pln = [1];
for l = 0:k-1
pln = conv(pln,Nz);
end
pld = [1];
for l = 0:bzord-k-1
pld = conv(pld,Dz);
end
bz = bz+bZ(k+1)*conv(pln,pld);
end
az = zeros(1,aDzord+1);
for k = 0:azord
pln = [1];
for l = 0:k-1
pln = conv(pln,Nz);
end
pld = [1];
for l = 0:azord-k-1
pld = conv(pld,Dz);
end
az = az+aZ(k+1)*conv(pln,pld);
end
%Hàm freqz_m
function [db,mag,pha,grd,w] = freqz_m(b,a);
% Modified version of freqz subroutine
%
% [db,mag,pha,grd,w] = freqz_m(b,a);
% db = Relative magnitude in dB computed over 0 to pi radians
% mag = absolute magnitude computed over 0 to pi radians
% pha = Phase response in radians over 0 to pi radians
% grd = Group delay over 0 to pi radians
% w = 501 frequency samples between 0 to pi radians
% b = numerator polynomial of H(z) (for FIR: b=h)
% a = denominator polynomial of H(z) (for FIR: a=[1])
%
[H,w] = freqz(b,a,1000,'whole');
H = (H(1:1:501))'; w = (w(1:1:501))';
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
pha = angle(H);
% pha = unwrap(angle(H));
grd = grpdelay(b,a,w);
% grd = diff(pha);
% grd = [grd(1) grd];
% grd = [0 grd(1:1:500); grd; grd(2:1:501) 0];
% grd = median(grd)*500/pi
% Hàm Cascade Form direct2
function [b0,B,A]=dir2cas(b,a);
b0=b(1);b=b/b0;
a0=a(1);a=a/a0;
b0=b0/a0;
M=length(b);
N=length(a);
if N>M
b=[b zeros(1,N-M)];
elseif M>N
a=[a zeros(1,M-N)];N=M;
else
NM=0;
end
K=floor(N/2);
B=zeros(K,3);
A=zeros(K,3);
if K*2==N;
b=[b 0];
a=[a 0];
end
broots=cplxpair(roots(b));
aroots=cplxpair(roots(a));
for i=1:2:2*K
Brow=broots(i:1:i+1,:)
Brow=poly(Brow)
B(fix((i+1)/2),:)=Brow;
Arow=aroots(i:1:i+1,:);
Arow=real(poly(Arow));
A(fix((i+1)/2),:)=Arow;
end
Kết quả:
a.
*** Chebyshev-1 Filter Order = 3
C =
0.0518
B =
1.0000 -2.0000 1.0000
1.0000 -1.0000 0
A =
1.0000 0.7477 0.6387
1.0000 0.5351 0
Suy ra Hàm H(z).
H(z)=
b. Đồ thị:
2.Trường hợp sử dụng bộ lọc Butterworth, Chebyshev-II, và Elliptic
Cách thiết kế tương tự với bộ lọc Chebyshev-I nhưng cần sử dụng bộ các hàm tương ứng với
mỗi bộ lọc.
Kết quả:
a.Bộ lọc Butterworth.
*** Butterworth Filter Order = 4
b.Bộ lọc Chebyshev-II.
*** Chebyshev-2 Filter Order = 3
c. Bộ lọc Elliptic
*** Elliptic Filter Order = 2
Nhận xét:
- Các bộ lọc số thu được thỏa các chỉ tiêu thiết kế.
-Các phương pháp đều thỏa mãn As=15dB
- Đáp ứng của bộ lọc Butterworth là đơn điệu trong dải thông.
-Sử dụng bộ lọc Chebyshev-II đáp ứng gợn trong dải chắn và đơn điệu trong dải thông.
-Bộ lọc Elliptic có bậc nhỏ nhất. Là bộ lọc tối ưu, nhưng nghiên cứu và thiết kế phức tạp.