Ch ngătrìnhăMatlab:

Một phần của tài liệu Thiết kế bộ lọc thông thấp IIR, sử dụng bộ lọc ButterWorth và biến đổi song tuyến tính (Trang 25 - 37)

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 ca 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 Lp 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 Lp 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 Lp 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 Lp 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 Lp 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 Lp 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 Lp 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 bng simulink:

εai Vũ Quốc Bình Lp 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 Lp 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 Lp 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 Lp 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 độ bng phng 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 thc 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.

Một phần của tài liệu Thiết kế bộ lọc thông thấp IIR, sử dụng bộ lọc ButterWorth và biến đổi song tuyến tính (Trang 25 - 37)

Tải bản đầy đủ (PDF)

(37 trang)