Tải bản đầy đủ (.docx) (9 trang)

Exam Final DSP Bài Tập Xử Lý Tín Hiệu Số Cuối Kỳ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (213.16 KB, 9 trang )

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.


×