CƠ SỞ LÝ THUYẾT
Dẫn nhập
Việc thiết kế một bộ lọc số tiến hành theo 3 bước:
Trước khi thiết kế bộ lọc, việc xác định các chỉ tiêu là rất quan trọng Các chỉ tiêu này thường được quy định dựa trên các ứng dụng cụ thể khác nhau.
Khi đã xác định các chỉ tiêu, chúng ta sẽ áp dụng các khái niệm và công cụ toán học để biểu diễn và tính gần đúng cho bộ lọc dựa trên tập hợp các chỉ tiêu đã cho Đây chính là nội dung cốt lõi trong quá trình thiết kế lọc số.
Để thực hiện bộ lọc, chúng ta có thể mô tả kết quả dưới dạng phương trình sai phân, hàm hệ thống H(z) hoặc đáp ứng xung h(n) Từ những mô tả này, việc thi hành bộ lọc có thể được thực hiện qua phần cứng hoặc phần mềm mô phỏng trên máy tính.
Trong phần tiếp theo, chúng ta sẽ mô tả các chỉ tiêu của bộ lọc thông thấp, sử dụng thiết kế bộ lọc này làm ví dụ cơ bản Các chỉ tiêu được chia thành hai nhóm: chỉ tiêu tuyệt đối (Absolute Specifications) và chỉ tiêu tương đối (Relative Specifications - DB).
Trên hình 1.1 là mô tả các chỉ tiêu của bộ lọc FIR thông thấp ( Low Pass Filter ):
Band [0, wp ] được gọi là dải thông, và 1 là dung sai (gợn sóng) được chấp nhận trong đáp ứng dải thông lý tưởng.
Band [ ws , ] được gọi là dải chắn, và 2 là dung sai ở dải chắn.
Band [ wp , ws ] được gọi là dải chuyển tiếp, và không có ràng buộc nào về đáp ứng biên độ trong dải này
Các chỉ tiêu tương đối gồm có:
R p : Độ gợn sóng trong dải thông tính theo dB.
A s : Suy hao trong dải chắn tính theo dB.
Quan hệ giữa các chỉ tiêu này như sau:
Các chỉ tiêu này áp dụng cho bộ lọc FIR thông thấp và cũng tương tự cho các loại bộ lọc khác như bộ lọc thông cao (HPF) và bộ lọc thông dải (BPF).
1- 1 Độ gợn dải thông Độ gợn dải chắn
Bộ lọc FIR có các chỉ tiêu tuyệt đối và tương đối được định nghĩa tương tự, nhưng các tham số thiết kế quan trọng nhất là dung sai dải tần và tần số cạnh-dải Trong phần 1, chúng ta sẽ tập trung vào bộ lọc FIR thông thấp, trong khi thiết kế cụ thể cho bộ lọc FIR thông dải bằng kỹ thuật cửa sổ sẽ được phát triển từ bộ lọc thông thấp và được mô tả chi tiết trong phần 2 Việc thiết kế và thực hiện lọc FIR mang lại nhiều thuận lợi.
Đáp ứng pha là tuyến tính.
Dễ thiết kế do không gặp các vấn đề ổn định (lọc FIR luôn ổn định).
Việc thực hiện rất hiệu quả
Có thể sử dụng DFT để thực hiện Đáp ứng pha là tuyến tính ( linear phase response ) mang lại những thuận lợi sau:
Bài toán thiết kế chỉ gồm các phép tính số học thực chứ không cần phép tính số học phức.
Bộ lọc pha tuyến tính không có méo trễ nhóm và chỉ bị trễ một khoảng không đổi.
Đối với bộ lọc có chiều dài M (hoặc bậc M-1) số phép toán có bậc M/2 như đã khảo sát trong thực hiện bộ lọc có pha tuyến tính.
Cấu trúc của bộ lọc FIR
Một bộ lọc đáp ứng xung hữu hạn với hàm hệ thống có dạng:
Như vậy đáp ứng xung h(n) là:
Và phương trình sai phân là:
( y 0 1 M 1 (1.5) Đây chính là tích chập tuyến tính của các dãy hữu hạn.
Bộ lọc FIR có bậc M-1 và chiều dài M, tương ứng với số lượng hệ số Cấu trúc của bộ lọc FIR luôn ổn định và đơn giản hơn so với bộ lọc IIR Đặc biệt, bộ lọc FIR có thể được thiết kế để đạt được đáp ứng pha tuyến tính, điều này rất quan trọng trong một số ứng dụng.
Chúng ta sẽ xem xét lần lượt các cấu trúc của bộ lọc FIR sau đây: a Cấu trúc dạng trực tiếp
Phương trình sai phân được thực hiện bởi một dãy liên tiếp các bộ trễ do không có đường phản hồi:
Cấu trúc mẫu thức bằng đơn vị chỉ có một dạng trực tiếp duy nhất, như thể hiện trong hình 1.2 với M = 5 Ngoài ra, còn có cấu trúc dạng ghép tầng.
Hàm hệ thống H(z) có thể được phân tích thành các tích của các khâu bậc 2 với các hệ số thực Các khâu này được thực hiện theo dạng trực tiếp, và bộ lọc tổng thể được cấu trúc dưới dạng ghép tầng của các khâu bậc 2.
0 (1 B z B z ) b (1.7) trong đó K M 2 , Bk,1 và Bk,2 là các số thực đại diện cho các hệ số của các khâu bậc
2 Cấu trúc dạng ghép tầng được cho trong hình 1.3 với M = 7: b 0 z - 1 b 1 z - 1 b 2 z - 1 b 3 z - 1 b 4 y(n) x(n)
Hình 1.2 Cấu trúc lọc FIR dạng trực tiếp
Cấu trúc lọc FIR dạng ghép tầng c có đặc điểm là đáp ứng pha tuyến tính, điều này rất quan trọng đối với các bộ lọc chọn tần Để đạt được hiệu suất tối ưu, người ta mong muốn đáp ứng pha của bộ lọc là một hàm tuyến tính theo tần số.
và là một hằng số Đối với bộ lọc FIR nhân quả có đáp ứng xung trong khoảng [0, M-1], thì các điều kiện tuyến tính là:
Xét phương trình sai phân được cho trong phương trình (1.5) với đáp ứng xung đối xứng trong phương trình (1.9), ta có:
Sơ đồ khối thực hiện phương trình sai phân được trình bày trong hình 1.4, áp dụng cho cả trường hợp M lẻ và M chẵn Cụ thể, với M lẻ, giá trị là 7, trong khi với M chẵn, giá trị là 6.
Rõ ràng, với cùng một bậc của bộ lọc (cùng M) cấu trúc pha tuyến tính sẽ tiết kiệm được 50% các bộ nhân so với cấu trúc dạng trực tiếp b 0 z - 1 b 1 z - 1 b 2 x(n) z - 1 z - 1 z - 1 y(n) b 0 z - 1 b 1 z - 1 b 2 b 3 y(n) x(n) z - 1 z - 1 z - 1 z - 1 M=7
Hình 1.4 Cấu trúc lọc FIR pha tuyến tính với các hệ số M chẵn và lẻ
Các đặc tính của bộ lọc FIR pha tuyến tính
Trong bài viết này, chúng ta sẽ khám phá hình dạng của đáp ứng xung và đáp ứng tần số trong hàm hệ thống của các bộ lọc FIR với pha tuyến tính.
Cho h(n), trong đó 0 n M – 1, là đáp ứng xung có chiều dài M thì hàm truyền hệ thống là:
(1.11) có (M-1) điểm cực ở gốc (trivial poles) và M-1 điểm không nằm ở vị trí bất kỳ trên mặt phẳng z Đáp ứng tần số là:
Chúng ta có thể đưa ra ràng buộc pha tuyến tính:
H ( e j ) , (1.13) trong đó: là một hằng số trễ pha Ta đã biết rằng h(n) phải đối xứng, nghĩa là:
Do đó h(n) là đối xứng theo , là chỉ số đối xứng Có hai kiểu đối xứng:
M lẻ: Trong trường hợp này, M 2 1 là một số nguyên Đáp ứng xung được mô tả trong hình 1.5 dưới đây:
Hình 1.5 Đáp ứng xung đối xứng, M lẻ
M chẵn: Trong trường hợp này, M 2 1 không phải là một số nguyên Đáp ứng xung được mô tả bằng hình 1.6 dưới đây:
Ta cũng có bộ lọc FIR pha tuyến tính loại hai nếu ta yêu cầu đáp ứng pha H e j thoả mãn điều kiện:
H ( e j ) với (1.15) Đáp ứng pha là đường thẳng nhưng không đi qua gốc Trong trường hợp này không phải là hằng số trễ pha, nhưng:
Hằng số (1.16) đại diện cho trễ nhóm, với là một hằng số trễ nhóm Trong trường hợp này, các tần số bị trễ với tốc độ không đổi, tuy nhiên, một số tần số có thể bị trễ với tốc độ lớn hơn hoặc nhỏ hơn Đối với kiểu pha tuyến tính này, điều này có thể được nhận diện rõ ràng.
Đáp ứng xung h(n) có tính chất phản đối xứng (antisymmetric), với chỉ số đối xứng được xác định là α = M² - 1 Chúng ta có hai trường hợp khác nhau tùy thuộc vào việc M là số lẻ hay số chẵn.
Hình 1.6 Đáp ứng xung đối xứng, M chẵn
M lẻ: Trong trường hợp này, M 2 1 là một số nguyên Đáp ứng xung được mô tả bằng hình 1.7 dưới đây:
Lưu ý rằng mẫu h() tại M 2 1 phải bằng 0, nghĩa là, h M 2 1 0
M chẵn: Trong trường hợp này, M 2 1 không phải là một số nguyên Đáp ứng xung được mô tả trong hình 1.8. b Đáp ứng tần số H(e j ):
Khi kết hợp hai loại đối xứng và phản đối xứng với M chẵn và M lẻ, ta tạo ra bốn kiểu lọc FIR pha tuyến tính, mỗi kiểu có đáp ứng tần số với biểu thức và hình dạng riêng Để phân tích các đáp ứng pha của các kiểu lọc này, chúng ta có thể biểu diễn H(e^jω) theo một cách cụ thể.
Hình 1.7 Đáp ứng xung phản đối xứng, M lẻ
Hình 1.8 Đáp ứng xung phản đối xứng, M chẵn
Hàm đáp ứng độ lớn H r (e jω) được định nghĩa bởi công thức H j ω = r j ω (β - αω), trong đó β có thể nhận giá trị ±π và α = -1 Đặc điểm quan trọng của đáp ứng độ lớn là nó là một hàm thực, có thể có giá trị dương hoặc âm, khác với đáp ứng biên độ luôn dương Đáp ứng pha kết hợp với đáp ứng biên độ tạo ra một hàm không liên tục, trong khi khi kết hợp với đáp ứng độ lớn, nó tạo thành một hàm tuyến tính liên tục.
Bộ lọc FIR pha tuyến tính Loại-1 (Type 1): Đáp ứng xung đối xứng, M lẻ
là một biến nguyên, và h n hM 1 n, 1
0 , thì ta có thể chứng tỏ rằng:
Bộ lọc FIR pha tuyến tính Loại-2 (Type 2): Đáp ứng xung đối xứng, M chẵn
Trong trường hợp này 0 , h n hM 1 n, 0 n M 1, nhưng
không phải là một biến nguyên, thì ta có thể chứng tỏ rằng:
So sánh (1.21) và (1.18), ta có:
Chúng ta không thể áp dụng loại bộ lọc có h(n) đối xứng và M chẵn cho bộ lọc thông cao hoặc bộ lọc chắn dải, vì không thể bỏ qua b(n) hoặc h(n).
Lọc FIR pha tuyến tính Loại-3 (Type 3): Đáp ứng xung phản đối xứng, M lẻ
Trong trường hợp này ta có
thì ta có thể chứng tỏ:
So sánh (1.24) và (1.18), ta có:
Lưu ý : Tại 0 và , ta có Hr 0 mà không cần quan tâm c(n) hoặc h(n).
Hơn nữa, e^(j2π) = j cho thấy rằng jHr(ω) là thuần ảo, điều này làm cho loại bộ lọc này không phù hợp cho thiết kế bộ lọc thông thấp hoặc thông cao Tuy nhiên, nó lại thích hợp cho việc xấp xỉ các bộ vi phân và bộ biến đổi Hilbert lý tưởng.
Lọc FIR pha tuyến tính Loại-4(Type 4):Đáp ứng xung phản đối xứng, M chẵn
Trong trường hợp này 2 , h n hM 1 n , 0 n M 1, nhưng M 2 1 không phải là một biến nguyên, thì ta có thể chứng tỏ rằng:
So sánh (1.27) và (1.18), ta có:
Lưu ý : Tại , Hr(0)0 và e j 2 j Do vậy, loại này cũng thích hợp cho việc thiết kế các bộ vi phân số và bộ biến đổi Hilbert số.
Bảng dưới đây trình bày khả năng thiết kế các bộ lọc và bộ biến đổi Hilbert số, cũng như bộ vi phân số của bốn loại lọc FIR có pha tuyến tính đã được đề cập.
Type LPF HPF BPF SBF Hilbert Differentiator
THIẾT KẾ LỌC FIR THÔNG DẢI
Bài toán thiết kế
Hãy thiết kế bộ lọc FIR thông dải pha tuyến tính theo phương pháp cửa sổ, với các chỉ tiêu bộ lọc cần thiết kế được cho như sau:
Cạnh thấp của dải chắn: w s1
Cạnh thấp của dải thông: w p1
Cạnh cao của dải thông: w p2
Cạnh cao của dải chắn: w s2
Độ gợn sóng trong dải thông: R p
Suy hao trong dải chắn: A s
Các đại lượng này có thể được mô tả trên hình 2.1 như sau: Điều kiện: w s1 < w p1 < w p2 < w s2
Hoặc bài toán cho các chỉ tiêu 1 và 2 ta cũng có thể tính được A s và R p dựa vào quan hệ giữa chúng theo công thức (1.1) và (1.2).
Phương pháp thiết kế
Bước 1 Chọn loại cửa sổ sử dụng
Việc chọn loại cửa sổ sử dụng nhằm đảm bảo suy hao trong dải chắn thoả mãn chỉ tiêu thiết kế A s yêu cầu của bài toán đặt ra.
Hình 2.1 Các chỉ tiêu của bộ lọc thông dải BPF (bandpass filter)
Có tổng cộng 6 loại cửa sổ khác nhau, trong đó cửa sổ Kaiser có khả năng điều chỉnh suy hao trong dải chắn thông qua việc thay đổi hệ số , trong khi các loại cửa sổ còn lại có suy hao cố định trong dải chắn.
Bậc M của bộ lọc phụ thuộc vào độ rộng dải chuyển tiếp w và loại cửa sổ được chọn Khi giữ nguyên chỉ tiêu thiết kế với cùng một giá trị độ rộng dải chuyển tiếp w, bậc bộ lọc sẽ thay đổi tùy thuộc vào loại cửa sổ Do đó, việc lựa chọn loại cửa sổ cần cân nhắc giữa việc đảm bảo suy hao trong dải chắn theo yêu cầu và giữ bậc bộ lọc ở mức tối ưu.
Suy hao A s là thông số quan trọng nhất cần chú ý, vì sự biến đổi của bậc bộ lọc M khi áp dụng các loại cửa sổ khác nhau không có nhiều sự khác biệt.
Bước 2 Xác định bậc M của bộ lọc
Nếu sử dụng cửa sổ Kaiser: M được tính theo nhóm công thức (1.42), cũng từ công thức này ta tính được hệ số .
M được xác định thông qua mối quan hệ với độ rộng dải chuyển tiếp w, và có thể tính toán dựa vào bảng tóm tắt trong hình 1.11.
Bước 3 Tìm hàm cửa sổ w(n)
Sử dụng các hàm có sẵn của Matlab với bậc bộ lọc M đã tìm được ở bước 2.
Để tìm đáp ứng xung của bộ lọc thông dải lý tưởng h d (n), chúng ta có thể kết hợp đáp ứng xung của hai bộ lọc thông thấp lý tưởng, như được minh họa trong hình 2.2.
Hình 2.2 Đáp ứng xung lọc thông dải lý tưởng từ 2 bộ lọc thông thấp lý tưởng
Tần số cắt của hai bộ lọc thông thấp lý tưởng, w c1 và w c2, được tính từ các chỉ tiêu của bộ lọc thông dải thực tế, cụ thể là: w c1 = (w s1 + w p1) / 2 và w c2 = (w p2 + w s2) / 2 Đáp ứng xung của lọc thông thấp lý tưởng có thể xác định thông qua công thức (1.31).
Bước 5 là tìm đáp ứng xung h(n) cho bộ lọc thực tế cần thiết kế Đáp ứng xung của bộ lọc thông dải thực tế được tính bằng cách nhân đáp ứng xung lý tưởng với hàm cửa sổ, theo công thức h(n) = h d (n).w(n) Qua thao tác này, chúng ta đã có được bộ lọc cần thiết kế.
Thuật toán và chương trình Matlab
Trong phần này, chúng ta sẽ thiết kế bộ lọc thông dải sử dụng cửa sổ Kaiser Chương trình sẽ nhận các chỉ tiêu yêu cầu và thực hiện các bước thiết kế để xác định đáp ứng xung h(n) Để đánh giá bộ lọc, chương trình sẽ tính toán và vẽ đồ thị đáp ứng biên độ - tần số của bộ lọc theo đơn vị dB, đồng thời hiển thị đáp ứng xung lý tưởng hd(n), hàm cửa sổ w(n) và đáp ứng xung thực tế h(n).
Chương trình được phát triển trên nền tảng Matlab 6.5, sử dụng các hàm hỗ trợ có sẵn cho xử lý tín hiệu số, cùng với một số hàm tùy chỉnh được tham khảo từ tài liệu [1] dưới dạng file m.
H F n h d d jw d jw jwn (1.31) b Chương trình Matlab
Chỉ tiêu có hợp lệ không?
Tính bậc M và hệ số của cửa sổ Kaiser theo công thức (1.42)
Tìm hàm cửa sổ w(n) (Gọi hàm của Matlab w=kaiser(M,beta) )
Vẽ h d (n), w(n), h(n) và đáp ứng biên độ (dB) của bộ lọc thiết kế.
The main program, bpf_kai(ws1, wp1, wp2, ws2, Rp, As), is designed to create a bandpass filter utilizing the Kaiser window method This function takes parameters such as the stopband and passband frequencies, ripple, and attenuation to generate the filter coefficients.
%Design a bandpass filter using Kaiser window technique
% h = bpf_kai(ws1,wp1,wp2,ws2,Rp,As)
% return impulse response of design filter in row vector h
% Rp : Passband Ripple in dB
% As : Stopband Attenuation in dB
% Note: 0 < ws1 < wp1 < wp2 < ws2 < 1
% Written by: HUYNH VIET THANG
The code begins by checking the number of input arguments; if none are provided, it prompts the user to input the Lower Stopband Edge (ws1) It validates that ws1 is between 0 and 1 Next, it requests the Lower Passband Edge (wp1) and ensures that wp1 is greater than ws1 and less than 1 The Upper Passband Edge (wp2) is then inputted, with a check that wp2 is greater than wp1 and less than 1 Following this, the Upper Stopband Edge (ws2) is entered, ensuring it is greater than wp2 and less than 1 Finally, the code prompts for the Passband Ripple in dB (Rp), confirming that it is between 0 and 1.
Rp=temp; temp=input('Stopband Attenuation in dB (As > 21): As = '); if (temp < 0), error('Error: As must be larger than 21 dB !!'); end
As=temp; elseif (nargin ~= 6), error('Number of input arguments invalid: bpf_kai(ws1,wp1,wp2,ws2,Rp,As)'); end end
% Adjust the band-edge specifications ws1=ws1*pi; wp1=wp1*pi; wp2=wp2*pi; ws2=ws2*pi;
% Caculate M and beta tr_width = min((wp1-ws1),(ws2-wp2)); % Transition bandwidth
M = ceil((As-7.95)/(14.36*tr_width/(2*pi))+1)+1;
To design a digital filter with an odd length M, calculate M using the formula M = 2*floor(M/2)+1 Define the range n as n=[0:1:M-1] For a given attenuation level As, determine the beta parameter: if As is 50 or greater, use beta = 0.1102*(As-8.7); if As is between 21 and 50, apply beta = 0.5842*(As-21)^(0.4) + 0.07886*(As-21); otherwise, return an error indicating As must be greater than 21 Next, compute the Kaiser window function with w_kai = (kaiser(M,beta))' Calculate the cutoff frequencies for the ideal low-pass filters as wc1 = (ws1+wp1)/2 and wc2 = (wp2+ws2)/2 The ideal impulse response hd is determined by the difference between ideal_lp(wc2,M) and ideal_lp(wc1,M) Finally, obtain the actual impulse response h(n) by multiplying the ideal impulse response hd with the Kaiser window w_kai.
[db,mag,pha,grd,w] = freqz_m(h,[1]); % Caculate Magnitude Response delta_w = 2*pi/1000; % disp(['Actual Passband Ripple:']) %
Rp = -min(db(wp1/delta_w+1:1:wp2/delta_w)) % Actua; Passband Ripple disp(['Actual Stopband Attenuation:']) %
As = -round(max(db(ws2/delta_w+1:1:501))) % Min Stopband Attenuation
% plot Ideal impulse response hd(n) subplot(1,1,1); subplot(2,2,1); stem(n,hd,'.'); title('Ideal Impulse Response hd(n)') axis([0 M-1 -0.4 0.4]); xlabel('n'); ylabel('hd(n)')
% plot Kaiser window function w_kai(n) subplot(2,2,2); stem(n,w_kai,'.');title('Kaiser Window w(n)') axis([0 M-1 -0.1 1.1]); xlabel('n'); ylabel('w(n)')
% plot design impulse response h(n) subplot(2,2,3); stem(n,h,'.');title('Actual Impulse Response h(n)') axis([0 M-1 -0.4 0.4]); xlabel('n'); ylabel('h(n)')
% plot magnitude response in dB subplot(2,2,4); plot(w/pi,db); title('Magnitude Response in dB');grid; xlabel('frequency in pi units'); ylabel('Decibels') axis([0 1 -150 10]);
% plot dash lines set(gca,'XTickMode','manual','XTick',[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]) set(gca,'YTickMode','manual','YTick',[-As,0])
Các hàm chính được sử dụng trong chương trình:
ideal_lp(wc,M): Tính đáp ứng xung của bộ lọc thông thấp lý tưởng bậc M
kaiser(M,beta): Tính cửa sổ Kaiser chiều dài M, với tham số beta.
freqz_m(h,[1]): Tính đáp ứng tần số của bộ lọc FIR có đáp ứng xung h.
Hai hàm ideal_lp.m và freqz_m.m được tham khảo từ tài liệu [1]. 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
%magsolute magnitude computed over 0 to pi radians
%grd= Group delay over 0 to pi radians
%wP1 frequency samples between 0 to pi radians
% b=numerator polynomial of H(z) (for FIR: a=h)
% aonitor polynomial of H(z) (for FIR: a=[1])
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); function hd = ideal_lp(wc,M);
% hd = ideal impulse response between 0 to M-1
% wc = cutoff frequency in radians
% M = length of the ideal filter
% alpha = (M-1)/2; n = [0:1:(M-1)]; m = n - alpha + eps; hd = sin(wc*m) / (pi*m);