Dạng khai triển (11.17) được thực hiện nhờ hàm MATLAB dirlcas.
Hàm này được định nghĩa như sau function[bO,B,A] = dir2cas(b,a);
bO=b(l); b=b/bO;
aO=a(l); a=a/aO;
bO=bO/aO;
M=length(b); N = length(a);
ifN > M
b= [b zeros(l,N-M)];
elseif M > N
a= [a zeros(l,M-N)];N=M;
else
NM -0;
end
K= noor(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));
fori=l:2:2*K
Brow = broots(i;l:i+l,:);
Brow = real(poly(Brow));
B(fix((i+l)/2),:)= Brow;
Arow = broots(i:l:i+l,0;
Arow = real(poly(Arow));
A(fix((i+l)/2),:)= Arow;
end
Trong đó b là véctơ hệ số của đa thức ở tử số của hàm truyền còn a lí vectơ hệ số của đa thức ở mẫu số. b(, là hệ số khuếch đại. B và A là các mí trận hệ số của mạch lọc phân tích.
218
Ví dụ Dùng hàm dir2cas vẽ cấu trúc mạch lọc FIR có hàm truyền sau đây thành các hệ thống bậc 2 ghép nối tiếp:
H ( z ) = 5 0 , 4 + 2 8 , 0 2 z ' + 1 3 ,8 9 z ^ + 7 , 4 2 z ' + 6 , 0 9 ? / + 3z-' + ( 1 .1 9 )
Chương trình tính các hệ sô khai triển sẽ là
% Chương trình P ll- 1
% Tính hệ số khai triển tích các hàm truyền bậc hai
ằ b=[50.4 28.02 13.89 7.42 6.09 3 1];
ằ a=[l];
ằ [bO,B,A]=dir2cas(b,a) Kết quả chương trình cho ta:
bO =
50.4000 B =
1.0000 0.8750 0.2500
1.0000 0 . 3 8 1 0 0.2381
1.0000 -0.7000 0.3333 A =
1 0 0
1 0 0
1 0 0
Như vậy ta hàm truyền trên được phân tích dưới dạng:
H(z) = 50,4(1+ 0,875z' + 0 ,2 5 z')(l + 0,381z‘ +
+ 0,2381 z ')( 1 - 0 ,7 z ' + 0,33333z-') (11.20) Hàm truyền này được thực thi trên hình 11.9.
Hình 11.9. Sơ đồ dòng tín hiệu của mạch lọc FIR có hàm truyền (11.20) ghép nối tiếp.
Bài tập
1. Dùng chương trình P ll-1 , vẽ sơ đồ dòng tín hiệu của mạch lọc FIR có hàm truyền dưới dạng các hệ thống bậc 2 ghép nối tiếp:
H,(z) = 2+ 10z' + 2 3 z ' + 3 4 z ' +31z" + 16z' + 4 z '’ (11.21) Mạch lọc có hàm truyền H|(z) này có pha tuyến tính không?
Vì sao?
2. Dùng chưofng trình P11-1 , vẽ sơ đồ dòng tín hiệu của mạch lọc FIR có hàm truyền dưới dạng các mạch lọc bậc 2 ghép nối tiếp :
H2(z) = 6 + 3 1z' + 7 4 z ' + 10z' +74z" + 3 1 z‘’ + 6z^-3 , H A „ - 4 .-5 . / - „ - 6 (11.22)
Hàm truyền H|(z) này có pha tuyến tính không? Vì sao? Hãy thực hiện H2(z) dưới dạng ghép nối tiếp chỉ sử dụng hai bộ nhân. Vẽ sơ đồ dòng tín hiệu của cấu trúc nối tiếp mới.
3. Cũng hỏi như câu 2 nhưng bây giờ mạch lọc có hàm truyền : H,(z) = 1 + 16 — z-‘’ + z*^
16 (11.23)
220
Để thực hiện mạch lọc FIR dưới dạng cấu trúc mắt cáo, trong MATLAB người ta sử dụng hàm dirHatc dưới đây
/ỉinction [Kì - dir2ỉatc(b) M = length(b);
K = zeros(l,M );
bl = b (l);
if bl==0
eiTor('b(l) is equal to zero') end
K (l) = b l; A = b /b l;
for m = M :-l:2 K(m) = A(m);
j = fliplr(A);
A = (Ã- K(m)*j)/(l-K(m)*K(m));
A = A(l;m -1);
end
11.2.2. Thực hiện cấu trúc FIR dạng mắt cáo
Ví dụ Một mạch lọc FIR được đặc trưng bởi phương trình sai phân :
y[n] = 2x[n] + ■— x [ n - l ] + —x [ n - 2 ] + —x [ n - 3 ] (11.24) Vẽ sơ đồ dòng tín hiệu thực thi phưcfng trình sai phân đó dưới dạng cấu trúc mắt cáo.
Chưcfng trình MATLAB sau đây cho phép thực hiện cấu trúc này.
%Chương trình p 11-2
% Xác định cấu trúc mắt cáo
ằ b=[2,13/12,5/4,2/3];
ằ K=dir21atc(b) K =
2.0000 0.2500 0.5000 0.3333
Sơ đồ dòng tín hiệu thực thi cấu trúc này cho trên hình 11.10.
Trong Signal Processing Toolbox của MATLAB, hàm tOlatc cũng có thể được sử dụng để thực hiện cấu trúc inắt cáo của các loại mạch lọc FIR; Trong đó có FIR pha cực tiểu, pha cực đại và các mạch lọc IIR. Hàm này có các phiên bản như sau:
K = TF2LATC(NUM) tìm các hệ số phản xạ K,„ cho mạch lọc FIR (MA) được chuẩn hoá bởi NUM( 1). Lưu ý rằng có thể có sai sô' nếu mạch lọc có điểm không nằm trên vòng tròn đơn vị.
K = TF2LATC(NUM,'max'); ở đây NUM tương ứng với mạch lọc FIR có pha cực đại, NUM lấy liên hợp phức và nghịch đảo trước khi chuyển về cấu trúc mắt cáo.
K = TF2LATC(NUM,'min') ; ở đây NUM tương ứng với mạch lọc FIR có pha cực tiểu.
K = TF2LATC(NUM,DEN,...); ở đây DEN là vô hưófng tương đương với K = TF2LATC(NUM/DEN,...).
[K,V] = TF2LATC(NUM,DEN) tìm các hệ số phản xạ và tham số thang V đối với cấu trúc thang - mắt cáo của mạch lọc IIR (ARMA) , được chuẩn hoá bởi DEN(l). Chú ý có sai số nếu hàm truyền có các điểm cực nằm trên vòng tròn đơn vị.
K = TF2LATC(1,DEN) tìm hệ số phản xạ K„ cho mạch lọc IIR toàn điểm cực. [K,V] = TF2LATC(B0,DEN) : ở đây BO là một vô hướng, sẽ in ra vector các hệ số thang (ladder) (hệ số V). Lưu ý rằng đối với trường hợp này chỉ phần tử đầu tiên của V là khác không.
Hình 11.10. Sơ đồ dòng tín hiệu của mạch lọc FIR (11.24) dưới dạng cấu trúc mắt cáo.
Bài tập
1. Viết chưong trình thực thi và vẽ các cấu trúc mắt cáo của các mạch lọc FIR có các hàm truyền cho trong (11.21), (11.22), (11.23) và (11.24). Sử
222
dụng hàm [num.den] - Ỉatc2tf(k) để xác định hàm truyền từ vectơ K. Hàm truyền thu được có giống hàm truyền gốc không?