Bài Tập DSP2 (Xử Lý Tín Hiệu Số Cuối Kỳ) Trường Đại Học Bách Khoa Đà NẵngThiết Kế Bộ Lọc IIRĐiện Tử Viễn ThôngThiế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 ChebyshevI, 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, ChebyshevII, 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
Trang 1BÀ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
Trang 2%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)));
Trang 3% 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
%
Trang 4-% [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];
Trang 5for 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
Trang 6K=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ị:
Trang 72.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
Trang 8b.Bộ lọc Chebyshev-II.
*** Chebyshev-2 Filter Order = 3
c Bộ lọc Elliptic
*** Elliptic Filter Order = 2
Trang 9Nhậ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