1. Các hàm sử d ngătrongăch ngătrình:
Hàm [cs,ds] = afd_butt(OmegaP,OmegaS,Rp,As)
Để thiết kế bộ lọc thông thấp analog Butterworth, cho b i các chỉ tiêu của nó.
Hàm [b,a] = u_buttap(N,Omegac) (sử dụng bên trong hàm afd_butt)
Để thiết kế một bộ lọc Analog Butterworth chưa chuẩn hoá với ΩC tùy ý, bậc N. function [b,a] = u_buttap(N,Omegac);
% Unnormalized Butterworth Analog Lowpass Filter Prototype % --- % [b,a] = u_buttap(N,Omegac);
% b = numerator polynomial coefficients of Ha(s) % a = denominator polynomial coefficients of Ha(s) % N = Order of the Butterworth Filter
% Omegac = Cutoff frequency in radians/sec % [z,p,k] = buttap(N); p = p*Omegac; k = k*Omegac^N; B = real(poly(z)); b0 = k; b = k*B; a = real(poly(p));
function [b,a] = afd_butt(Wp,Ws,Rp,As);
% Analog Lowpass Filter Design: Butterworth % ---
% [b,a] = afd_butt(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
N = ceil((log10((10^(Rp/10)-1)/(10^(As/10)-1)))/(2*log10(Wp/Ws))); fprintf('\n*** Butterworth Filter Order = %2.0f \n',N)
OmegaC = Wp/((10^(Rp/10)-1)^(1/(2*N))); [b,a]=u_buttap(N,OmegaC);
εai Vũ Quốc Bình Lớp 09CLC2 Trang 24 Hàm [b,a] = bilinear(cs,ds,Fs)
Biến đổi song tuyến tính để chuyển Ha(s) thành H(z) b = các hệ số tử thức của H(z) a = các hệ số mẫu thức của H(z) cs = các hệ số tử thức của Ha(s) ds = các hệ số mẫu thức của Ha(s) Fs = tần số lấy mẫu Hàm [db,mag,pha,grd,w] = freqz_m(b,a);
Tính biên độ tương đôi (dB), biên độ tuyệt đối, pha, nhóm trễ, dải mẫu tần số từ
hàm hệ thống H(z) có hệ số tử thức là b, hệ số mẫu thức là a .
Hàm [C,B,A] = dir2cas(b,a): Chuyển đổi dạng trực tiếp thành dạng ghép tầng. function [b0,B,A] = dir2cas(b,a);
%DIRECT-form to CASCADE-form conversion (cplxpair version) %... %[b0,B,A]=dir2cas(b,a)
%b0=gain coefficient
%B= K by 3 matrix of real coefficient %A= K by 3 matrix of real coefficient
%b = numerator polynomial coefficient of DIRECT form %a = numerator polynomial coefficient of DIRECT form % compute gain coefficient b0
b0 = b(1); b = b/b0; a0 = a(1); a = a/a0; b0 = b0/a0;
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 % 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: a=h) % a=demonitor 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); grd=grpdelay(b,a,w);
εai Vũ Quốc Bình Lớp 09CLC2 Trang 25 M t s hàm khác:
Hàm [bz,az] = zmapping(bZ,aZ,Nz,Dz): Chuyển đổi băng tần đểthu được các bộ lọc chọn tần khác từ bộ lọc thông thấp số thiết kếđược.
Hàm [ha,x,t] = impulse(cs,ds): Đáp ứng xung ha(t) của bộ lọc Analog
Hàm y = filter(b,a,x)
Lọc tín hiệu x qua hệ thống H(z) có hệ số tử thức là b, hệ số mẫu thức là a.
y là tín hiệu thu được sau khi lọc
Hàm fft(x,n)
Biến đổi Fourier nhanh tín hiệu x với n điểm.
đây ứng dụng để phân tích phổ tín hiệu vào ra.
Hàm zplane(num,den): vẽđiểm zeros và điểm poles trên mặt phẳng phức Hàm freqz(b,a): vẽđáp ứng biên độ(dB) và đáp ứng pha (độ)
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 = real(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
εai Vũ Quốc Bình Lớp 09CLC2 Trang 26 2. Ch ngătrình: clear all close all clc % Nhập các thông số kỹ thuật
wp = input(' - Tan so cat canh dai thong wp = '); ws = input(' - Tan so cat canh dai chan ws = '); As = input(' - Suy hao dai chan As = ');
Rp = input(' - Do gon song dai thong Rp = ');
%% Thiết kế thông thấp %% Fs = 1000; T = 1/Fs; f_pass = wp*Fs/2/pi; f_stop = ws*Fs/2/pi;
fprintf('\nDai chuyen tiep: [%5.1f,%5.1f]Hz\n',f_pass,f_stop); OmegaP = (2/T)*tan(wp/2); OmegaS = (2/T)*tan(ws/2); [cs,ds] = afd_butt(OmegaP,OmegaS,Rp,As); %% Biến đổi song tuyến tính %% [b,a] = bilinear(cs,ds,Fs); [db,mag,pha,grd,w]=freqz_m(b,a); [C,B,A] = dir2cas(b,a) delta_w=pi/500; Asd = floor(-max(db(ws/delta_w+1:500))) Rpd = -min(db(1:wp/delta_w+1))
%% Dap ung xung
[ha,x,t] = impulse(cs,ds); [delta,n] = impseq(0,0,50); h=filter(b,a,delta); %% Các tín hiệu vào %% nth = 0:1/Fs:2; f1=150; f2=200; f3=280; f4=350; TH1 = 2*sin(2*pi*f1*nth); TH2 = 2*cos(2*pi*f2*nth); TH3 = 2*sin(2*pi*f3*nth); TH4 = 2*cos(2*pi*f4*nth); TH = TH1+TH2+TH3+TH4; %% Lọc tín hiệu y = filter(b,a,TH); % y là tín hiệu ra
εai Vũ Quốc Bình Lớp 09CLC2 Trang 27
%% Phân tích phổ tín hiệu
spec_in=abs(fft(TH,512)); spec_in = spec_in(1:257); % chỉ lấy 1 nửa
spec_out=abs(fft(y,512)); spec_out = spec_out(1:257); f = Fs*[0:256]/512;
%% Mat phang nghiem phuc
figure(1)
subplot(2,1,1); zplane(cs,ds); title('s-plane','fontsize',12); subplot(2,1,2); zplane(b,a); title('z-plane','fontsize',12);
%% Vẽ đáp ứng biên độ
figure(2); subplot(2,2,1);
plot(w/pi,mag,'Linewidth',2);grid
title('Magnitude Response','fontsize',12); ylabel('|H|'); xlabel('w/pi');
axis([0 1 -0.1 1.1]);
set(gca,'XTickMode','manual','XTick',[0;wp/pi;ws/pi;1]); set(gca,'YTickMode','manual','YTick',[0;1]);
subplot(2,2,2);
plot(w/pi,db,'Linewidth',2);grid ;
title('Magnitude in dB','fontsize',12); ylabel('Decibels'); xlabel('w/pi'); axis([0 1 -Asd-3 2]);
set(gca,'XTickMode','manual','XTick',[0;wp/pi;ws/pi;1]); set(gca,'YTickMode','manual','YTick',[-Asd;0]);
subplot(2,2,3); plot(t,ha);grid;
title('Impulse Response Analog','fontsize',12); axis([0 50*T floor(min(ha))-50 ceil(max(ha))+50]); subplot(2,2,4)
stem(n,h);grid
title('Impulse Response Digital','fontsize',12); axis([0 50*T -0.5 0.5]);
figure(3)
freqz(b,a); %Ve dap ung bien do va dap ung pha trên 1 cửa sổ
%% Vẽ tín hiệu đầu vào, đầu ra
figure(3) Sam = 100; subplot(2,2,1)
plot(nth(1:Sam),TH(1:Sam));
title('Input Signal','fontsize',12);
axis([0 nth(Sam) min(TH)-0.5 max(TH)+0.5]); subplot(2,2,2)
εai Vũ Quốc Bình Lớp 09CLC2 Trang 28
title('Output Signal','fontsize',12);
axis([0 nth(Sam) min(TH)-0.5 max(TH)+0.5]);
% Vẽ phổ tín hiệu
subplot(2,2,3)
plot(f,spec_in);%grid
title('Spectrum of the Input Signal','fontsize',12); xlabel('Frequency (Hz)');
ylabel('Magnitude');
axis([0 Fs/2 -1 max(spec_in)+2]);
set(gca,'XTickMode','manual','XTick',[0;f1;f2;f3;f4;Fs/2]); subplot(2,2,4)
plot(f,spec_out);%grid
title('Spectrum of the Output Signal','fontsize',12); xlabel('Frequency (Hz)');
ylabel('Magnitude');
axis([0 Fs/2 -1 max(spec_in)+2]);
set(gca,'XTickMode','manual','XTick',[0;f1;f2;f3;f4;Fs/2]);
3. K t qu :
- Tan so cat canh dai thong wp = 0.5*pi - Tan so cat canh dai chan ws = 0.6*pi - Suy hao dai chan As = 50
- Do gon song dai thong Rp = 0.5
Do rong dai tan chuyen tiep: [250.0, 300.0]Hz *** Butterworth Filter Order = 22
C = 4.4762e-006 B = 1.0000 3.3221 2.7806 1.0000 3.0243 2.4289 1.0000 2.6183 1.9509 1.0000 2.2487 1.5214 1.0000 1.9405 1.1696 1.0000 1.7669 0.8096 1.0000 1.6944 0.8903 1.0000 1.5088 0.6817 1.0000 1.3707 0.5307 1.0000 1.2765 0.4303 1.0000 1.2289 0.3802
εai Vũ Quốc Bình Lớp 09CLC2 Trang 29 A = 1.0000 0.0892 0.8670 1.0000 0.0788 0.6497 1.0000 0.0708 0.4825 1.0000 0.0646 0.3525 1.0000 0.0598 0.2511 1.0000 0.0560 0.1721 1.0000 0.0531 0.1113 1.0000 0.0509 0.0657 1.0000 0.0494 0.0331 1.0000 0.0484 0.0121 1.0000 0.0479 0.0018 As thuc te: Asd = 51 Rp thuc te: Rpd = 0.3844
εai Vũ Quốc Bình Lớp 09CLC2 Trang 31 Ta tính được tần số cắt của bộ lọc này là fc = 256.9Hz 2 c c S f F
Quan sát phổ của tín hiệu, ta thấy đầu vào tổ hợp gồm 4 thành phần có tần số lần lượt là 150Hz, 200Hz, 280Hz, 350Hz.
Bộ lọc thông thấp này có tần số cắt fc = 256.9Hz nên chỉ cho tín hiệu có tần số 150Hz
và 200Hz đi qua, hai tín hiệu còn lại bị chặn, ta có thể dễ dàng thấy điều này qua phổ của tín hiệu đầu ra.
4. Mô ph ng bằng simulink:
εai Vũ Quốc Bình Lớp 09CLC2 Trang 32
Các kh iătrongăs ăđồ trên:
- Kh i Lowpass filter (FDATool):
Ta dùng khối này để thiết kế bộ lọc IIR Butterworth có các thông số wp = 0.5*pi, ws = 0.6*pi, As = 60dB, Rp = 0.5dB
- Các kh i tín hiệu:
Tín hiệu 1: Tín hiệu sin r i rạc có tần số 350Hz, Fs = 1000sam/s
Tín hiệu 2: Tín hiệu sin r i rạc có tần số 150Hz, Fs = 1000sam/s
Tín hiệu 3: Tín hiệu r i rạc có tần số biến thiên liên tục trong khoảng 50Hz đến 400Hz, Fs = 1000sam/s.
- Cho 3 tín hiệu vào b c ng làm tín hiệuăđ u vào của b l c IIR
- Hai kh i phân tích tín hiệuăđ u vào và đ u ra
εai Vũ Quốc Bình Lớp 09CLC2 Trang 33
Tín hiệu đầu vào
Hình trên gồmăcóă3ăđồ th :
- Tín hiệu vào theo th i gian (s)
- Mật độ công suất phổ biên độ Mag2/(rad/s), do tín hiệu vào gồm có 3 thành phần với 3 tần số khác nhau, nhìn vào đồ thị ta thấy rõ ràng mật độ công suất phổ của 3 tín hiệu này
ứng với 3 giá trị tần số ( đây theo đơn vị rad/s).
350Hz ↔ 2199rad/s 150Hz ↔ 942.5rad/s
Tín hiệu còn lại có tần số biến thiên theo th i gian - Mật độ phổ pha
εai Vũ Quốc Bình Lớp 09CLC2 Trang 34
Tín hiệu đầu ra
Theo tính toán thì bộ lọc này có tần số cắt là fc = 256.9Hz do đó nó chỉ cho tín hiệu có tần số 150Hz qua, hai tín hiệu kia bị chặn lại…
Nhìn vào đồ thị ta thấy rõ ràng chỉ còn lại phổ của tín hiệu có tần số 150Hz, và dạng tín hiệu trong miền th i gian là dạng sin.
εai Vũ Quốc Bình Lớp 09CLC2 Trang 35
PH NăIV:
ĐÁNHăGIÁăK TăQU ă- K TăLU N I. Chỉ tiêu k thu t:
Đáp ứng được các thông số kỹ thuật như yêu cầu ( P, S,A RS, P)
Đáp ứng biên độ bằng phẳng tối đa và đòi hỏi bậc N cao hơn (nhiều điểm cực hơn) đểđạt được cùng một chỉ tiêu dải chắn. Tuy nhiên chúng có một đáp ứng pha không tuyến tính trong dải thông (nhìn vào đáp ứng pha vẽđược, ta thấy pha gần tuyến tính). Nh áp dụng phương pháp biến đổi song tuyến tính (phương pháp biến đổi tốt nhất)
nên bộ lọc sốthu được:
- Đáp ứng tốt các chỉ tiêu kỹ thuật.
- Không có aliasing (sai số lấy mẫu) trong miền tần số.
- Bộ lọc thiết kế là ổn định (các điểm cực đều nằm trong đư ng tròn đơn vị z-plane) - Tuy nhiên quan hệ giữa ω theo Ω là phi tuyến.
II. Ch tăl ng l c thực t :
Quan sát quá trình mô phỏng với tín hiệu vào trên, ta nhận thấy bộ lọc thiết kế hoạt
động tương đổi tốt.
Nh đáp ứng biên độ bằng phẳng trong cả hai dải nên hầu như không gây méo mó tín
hiệu đi qua dải thông cũng như làm suy giảm hoàn toàn (theo chỉ tiêu) tín hiệu qua dải chắn…
Tuy nhiên chúng ta vẫn quan sát thấy tín hiệu ra bị trễ pha so với tín hiệu vào…
III. K t lu n:
Tiểu luận đã tóm tắt các vấn đề lý thuyết cơ bản về thiết kế bộ lọc số IIR. Nêu các đặc tính bộ lọc số cần xác định và các phương pháp khi thiết kế bộ lọc: Sử dụng 4 kiểu Butterworth, Chebyshev 1-2, Ellipic. Tiểu luận đã đi sâu nghiên cứu phương pháp thiết kế bộ
lọc IIR thông thấp sử dụng bộ lọc Butterworth và phép biến đổi song tuyến tính.
Sau khi tìm hiểu lý thuyết cơ bản của phương pháp này, tiểu luận đã vận dụng
MATLAB để minh họa lý thuyết đồng th i nêu ra bài toán thiết kế và cách giải quyết, so sánh kết quảđạt được.
Tuy đã hết sức cố gắng nhưng chắc chắn tiểu luận vẫn còn nhiều thiếu sót, rất mong nhận được sự góp ý của Thầy để nội dung của tiểu luận được hoàn chỉnh hơn.