Upload
cao8cv
View
200
Download
3
Tags:
Embed Size (px)
DESCRIPTION
Tài liệu up lên nhằm mục đích download thêm
Citation preview
EDA-Group FIR system design 12/4/2014
FIR system design
Authors: Ha Van Phu
Rev. 0.1
December 4, 2014
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 1
This Page is Intentionally Blank
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 2
Lịch sử thay đổi
Rev. Date Author Description
0.0 04/11/14 Ha Van Phu First Draft
0.1 01/12/14 Ha Van Phu
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 3
Contents
1 ......................................................................................................................................................................... 4
GIỚI THIỆU .................................................................................................................................................... 4
1.1 MỞ ĐẦU ............................................................................................................................................... 4 1.1.1 Bộ lọc FIR .................................................................................................................................. 5
1.2 CÁC THÔNG SỐ CỦA BỘ LỌC ................................................................................................................. 5 1.2.1 Chỉ tiêu kỹ thuật ......................................................................................................................... 5 1.2.2 Một số thống số đánh giá bộ lọc: ............................................................................................... 6
1.3 BỘ LỌC FIR PHA TUYẾN TÍNH ............................................................................................................... 6
2 ......................................................................................................................................................................... 9
CÁC PHƯƠNG PHÁP TỔNG HỢP BỘ LỌC (FIR) ................................................................................... 9
2.1 PHƯƠNG PHÁP CỬA SỔ .......................................................................................................................... 9 2.2 PHƯƠNG PHÁP LẤY MẪU TẦN SỐ ........................................................................................................ 23 2.3 PHƯƠNG PHÁP LẶP ............................................................................................................................. 32
3 ....................................................................................................................................................................... 37
CÁC KIẾN TRÚC BỘ LỌC FIR ................................................................................................................. 37
3.1 KIẾN TRÚC DIRECT ............................................................................................................................. 37 3.2 KIẾN TRÚC CASCADE ......................................................................................................................... 44 3.3 KIẾN TRÚC LATTICE ........................................................................................................................... 48
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 4
1
Giới thiệu
1.1 Mở đầu
1.2
Một bộ lọc số là một hệ thống tuyến tính bất biến trong miền biến số n được biểu diễn
bằng phương trình:
1 0
( ) ( ) ( )N M
k k
k k
y n a y n k b x n k
(1.1.1)
Trong miền Z, hệ thống được đặc trưng bởi hàm truyền H(Z):
0
1
( )
1
Mk
k
k
Nk
k
k
b z
H Z
a z
(1.1.2)
Từ phương trình (1.1.2), dựa vào việc thay đổi giá trị 𝑎𝑘, 𝑏𝑘, chúng ta có thể xác định đặc
tính đáp ứng tần số của hệ thống.
Để một hệ thống thực hiện được về mặt vật lý thì nó phải nhân quả và ổn định. Quan hệ
giữa đầu vào, đầu ra và đáp ứng xung của hệ thống phải thỏa mãn điều kiện sau:
0 0
( ) ( ) ( ) ( )k
k k
y n b x n k h k x n k
0
| ( ) |n
h n
Các quan hệ này nói rằng chiều dài của đáp ứng xung ℎ(𝑛) rất quan trọng, các hệ số ℎ(𝑛)
đặc trưng cho hệ thống.
Vì thế chúng ta có thể phân loại các hệ thống thành hai loại lớn tùy theo chiều dài của đáp
ứng xung ℎ(𝑛). Hai loại này như sau:
Loại thứ nhất: Hệ thống được đặc trưng bởi đáp ứng xung có chiều dài hữu hạn. Nó
được gọi là hệ thống có đáp ứng xung chiều dài hữu hạn (FIR), tức là ℎ(𝑛) chỉ khác
0 trong một khoảng có chiều dài hữu hạn N (từ 0 đến 𝑁 − 1).
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 5
Loại thứ hai: Hệ thống được đặc trưng bởi đáp ứng xung có chiều dài vô hạn. Hệ
thống được gọi là hệ thống có đáp ứng xung chiều dài vô hạn (IIR), tức là ℎ(𝑛)
khác 0 trong một khoảng vô hạn từ 0 đến ∞
Tài liệu này chỉ đề cập vào việc thiết kế bộ lọc số có đáp ứng xung chiều dài hữu hạn
(FIR).
1.2.1 Bộ lọc FIR
Một bộ lọc FIR được mô hình hóa bằng phương trình:
1
0
( )M
k
k
y n b x n k
(1.1.3)
Hoặc, tương đường, ta có hàm đáp ứng của bộ lọc FIR trong miền Z (System function):
1
0
( )M
k
k
k
H z b z
(1.1.4)
Và hàm đáp ứng của bộ lọc FIR trong miền rời rạc:
, 0 1
( )0,
nb n Mh n
otherwise
(1.1.5)
Trong đó:
M: Độ dài của bộ lọc FIR
𝑏𝑛, 𝑏𝑘: Hệ số của bộ lọc
1.3 Các thông số của bộ lọc
1.3.1 Chỉ tiêu kỹ thuật
Figure 1. Tham số của bộ lọc. a) tính theo giá trị tuyệt đối. b) tính theo giá trị tương
đối so với 1+𝜹𝟏
Tần số cắt (𝜔𝑐)
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 6
Tần số giới hạn (biên tần) dải chắn (𝜔𝑠)
Tần số giới hạn (biên tần) dải thông (𝜔𝑝)
Dải thông (0, 𝜔𝑝)
Dải chuyển tiếp (𝜔𝑝, 𝜔𝑠)
Dải chắn (𝜔𝑠, 𝜋)
Độ gợn dải thông 𝛿1
Độ gợn dải chắn 𝛿2
Ký hiệu:
p: passband
s: stopband
1.3.2 Một số thống số đánh giá bộ lọc:
Có hai thông số đánh giá bộ lọc:
Rp: độ gợn dải thông (Passband ripple):1
p
1
1R 20log( )[dB]
1
As: Độ gợn dải chặn (Stopband ripple): 2
s
1
A 20log( )[dB]1
Biểu diễn bằng hình ảnh:
Figure 2 Passband ripple and Stopband attenuation
1.4 Bộ lọc FIR pha tuyến tính
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 7
Điều kiện để bộ lọc FIR có pha tuyến tính
ℎ(𝑛) đối xứng: ℎ(𝑛) = ℎ(𝑀 − 1 − 𝑛)
ℎ(𝑛) phản đối xứng:
o ℎ(𝑛) = −ℎ(𝑀 − 1 − 𝑛) với 𝑀 chắn
o ℎ(𝑛) = −ℎ(𝑀 − 1 − 𝑛) và 1
( ) 02
Mh
với 𝑀 lẻ
Phân loại bộ lọc pha tuyến tính:
M lẻ (odd) M chẵn (even)
h(n) đối xứng Loại 1 Loại 2
h(n) phản đối xứng Loại 3 Loại 4
Đáp ứng tần số:
Loại 1:
31 2
21
0
1 1( ) ( ) 2 ( )cos ( )
2 2
MM
jj
n
M MH e e h h n n
(1.3.1)
Loại 2:
11 2
22
0
1( ) 2 ( )cos ( )
2
MM
jj
n
MH e e h n n
(1.3.2)
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 8
Loại 3:
31 2[ ]
2 23
0
1( ) 2 ( )sin ( )
2
MM
jj
n
MH e e h n n
(1.3.3)
Loại 4:
11 2[ ]
2 24
0
1( ) 2 ( )sin ( )
2
MM
jj
n
MH e e h n n
(1.3.4)
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 9
2
Các phương pháp tổng hợp bộ lọc (FIR)
2.1 Phương pháp cửa sổ
Giả sử cần thiết kế bộ lọc có đáp ứng tần số mong muốn ( )j
dH e thỏa mãn các chỉ tiêu kỹ
thuật. Khi đó:
j
j c
d
c
1 e ,| |H (e )
0, | |
(2.1.1)
1
( ) ( )2
j j n
d dh n H e e d
(2.1.2)
c
c
j j n
d
1h (n) 1 e e d
2
c
d
sin[ (n )]h (n)
(n )
Tuy nhiên, trong trường hợp lý tưởng, ( )dh n có chiều dài vô hạn và không nhân quả nên
chúng ta dịch đi 1
2
M mẫu và nhân với hàm cửa số w( )n
1
( ) ( ) w( )2
d
Mh n h n n
(2.1.3)
Trong đó:
w( ) 0, 0, ( 1)n n n M
2.1.1 Các bước thiết kế
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 10
1. Cho các chỉ tiêu kỹ thuật: 𝛿1, 𝛿2, 𝜔𝑝, 𝜔𝑠
2. Chọn loại cửa số và tính 𝑤(𝑛) với chiều dài M, tâm đối xứng tại (𝑀 − 1)/2
3. Tính các hệ số ℎ𝑑(𝑛) của bộ lọc lý tưởng, sau đó tính các hệ số ℎ(𝑛) nhờ trễ và
nhân với hàm cửa sổ 𝑤(𝑛)
4. So sánh 𝐻(𝑒𝑗𝜔) với các chỉ tiêu kỹ thuật. Nếu không thỏa mãn, tăng M và quay lại
bước 2
2.1.2 Các tham số của cửa sổ phổ
1. Bề rộng của định trung tâm
2. Tỷ số của biên độ của đỉnh thứ cấp đầu tiên và biên độ của đỉnh trung tâm
Trong thực tế, tỷ số này thường được đánh giá theo dB bằng cách như sau:
xj
10 j0
W(e )20log [dB]
W(e )
(2.1.4)
Trong đó x là tần số ở giữa đỉnh thứ cấp đầu tiên của cửa sổ phổ jH(e )
, sj
W(e )
là
đáp ứng tần số của 𝑤(𝑛)
Người ta cũng đánh giá cửa sổ phổ jW(e )
bằng dB như sau:
j
j
10 j0
W(e )G(e ) 20log
W(e )
(2.1.5)
2.1.3 Các loại cửa sổ
Cửa sổ chữ nhật
Trong miền n, cửa sổ chữ nhật được định nghĩa như sau:
1, 0 n M 1
w(n)0, otherwise
(2.1.6)
Đáp ứng tần số của bộ lọc:
j (M 1)
j 2
Msin( )
2W(e ) e
sin( )2
(2.1.7)
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 11
Figure 3 Cửa sổ chữ nhật. Với M = 45
Cửa sổ tam giác (Bartlett window)
2n M 1, 0 n
M 1 2
2n M 1w(n) 2 , n M 1
M 1 2
0, otherwise
(2.1.8)
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 12
Figure 4 Cửa sổ tam giác, với M = 45
Cửa sổ Hanning
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 13
2 n0.5[1 cos( )], 0 n M 1
w(n) M 1
0, otherwise
(2.1.9)
Figure 5 Cửa số Hanning, với M = 45
Cửa sổ Hamming
Cửa sổ Hamming gần giống cửa sổ Hanning. Nó chỉ khác ở một phần nhỏ bị gián đoạn
(Xem hình)
2 n0.54 0.46cos( )], 0 n M 1
w(n) M 1
0, otherwise
(2.1.10)
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 14
Figure 6 Cửa sổ Hamming, với M = 45
Cửa sổ Blackman
Loại cửa sổ này gần giống với hai cửa sổ trên. Tuy nhiên, nó chứa thêm một phần tử làm
hai biên của cửa sổ tiến về 0 hài hòa hơn.
2 n 4 n0.42 0.5cos( )] 0.08cos( ), 0 n M 1
w(n) M 1 M 1
0, otherwise
(2.1.11)
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 15
Figure 7 Cửa sổ Blackman, với M=45
Cửa sổ Kaiser
2
0
0
2nI 1 1
M 1w(n) , 0 n M 1
I [ ]
(2.1.12)
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 16
Trong đó,
0I [] : là hàm Bessel biến dạng loại một bậc không
: Là giá trị có thể thay đổi để thay đổi tỷ lệ giữa ∆Ω và 𝜆
Figure 8 Cửa sổ Kaiser, với M = 45
Để đạt được hiệu quả cao nhất khi thiết kế bộ lọc FIR pha tuyến tính, giá trị β phải chọn
trong khoảng từ 4 đến 9:
4 9
Chuẩn hóa độ rộng dải chuyển tiếp s p
f2
, ta có thể tính bậc của bộ lọc:
sA 7.95M 1
14.36 f
(2.1.13)
Tính toán tham số :
s s
0.4
s s s
0.1102(A 8.7), A 50Parameter
0.5842(A 21) 0.07886(A 21), 21 A 50
Tổng kết:
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 17
Chúng ta có bảng tổng kết sau:
Table 1 Tổng kết các tham số của bộ lọc
Tên cửa sổ Độ rộng dải chuyển tiếp Suy hao dải
chắn nhỏ nhất Giá trị ước lượng Giá trị chính xác
Cửa sổ chữ nhật 4
M
1.8
M
21 dB
Cửa sổ tam giác 8
M
6.1
M
25 dB
Hanning 8
M
6.2
M
44 dB
Hamming 8
M
6.6
M
53 dB
Blackman 12
M
11
M
74 dB
2.1.4 Thiết kế trên Matlab
Trên Matlab cung cấp các hàm tạo cửa sổ như sau:
Cửa sổ chữ nhật: w=boxcar(M)
Cửa sổ tam giác: w=triang(M)
Cửa sổ Hanning: w=hanning(M)
Cửa sổ Hamming: w=hamming(M)
Cửa sổ Blackman: w=blackman(M)
Cửa sổ Kaiser: w=kaiser(M,beta)
Đầu tiên, chúng ta sử dụng MATLAB để thiết kế thủ công bộ lọc FIR dựa vào phương
pháp cửa sổ. Sau đó, chúng ta sẽ tìm hiểu các hàm có sẵn của Matlab để giúp thiết kế bộ
lọc nhanh hơn.
Trước khi thiết kế bộ lọc, chúng ta tạo hai hàm: Hàm đáp ứng xung lý tưởng dH (n) và
hàm tạo đáp ứng độ lớn (magnitude response) jH(e )
, đáp ứng pha (phase response) ( )
, và đáp ứng trễ nhóm (group delay response) (Tạm thời tham số này chưa được quan tâm
trong tài liệu này).
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 18
Hàm 1:
function hd = ideal_lp(wc,M);
% Ideal LowPass filter computation
% [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; % add smallest number to avoid divide by zero
hd = sin(wc*m)./(pi*m);
Hàm 2:
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);
grd = grpdelay(b,a,w);
Giải thích định nghĩa:
Relative magnitude: Chuẩn hóa trong deciben đáp ứng độ lớn theo giá trị lớn nhất của đáp
ứng độ lớn tuyệt đối: j
10 j
max
| H(e ) |db 20log ( )
| H(e ) |
absolute magnitude: Đáp ứng độ lớn tuyệt đối j| H(e ) |
b: Đa thức tử số của hàm. Trong FIR, chúng ta hiểu là đáp ứng xung h(n)
a: Đa thức mẫu số của hàm. Trong FIR, chúng ta hiểu là đa thức mẫu số bậc 0, tức a=[1]
Tiếp theo, chúng ta đi vào một số ví dụ thiết kế bộ lọc FIR
Ví dụ 1:
Thiết kế bộ lọc số FIR thông tháp với thông số sau:
p p
s s
0.2 , R 0.25dB
0.3 , A 50dB
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 19
Cách làm: Đầu tiên, dựa vào độ suy hao dải chắn là 50dB, ở bảng 1, ta chọn được hai loại
cửa sổ phù hợp là cửa sổ Hamming và Blackman. Chúng ta sẽ chọn loại cửa sổ Hamming
vì có độ rộng dải chuyển tiếp nhỏ hơn. Mặc dù, chúng ta sẽ không sử dụng thông số pR
trong thiết kế nhưng chúng ta sẽ kiểm tra giá trị này xem có thỏa mãn không. Dưới đây là
bộ lọc FIR thỏa mãn yêu cầu đề bài được viết bằng MATLAB code.
% design a digital FIR filter LPF: % wp=0.2pi, ws=0.3pi, Rp=0.25dB, As=50dB % using Hamming window
wp = 0.2*pi; ws = 0.3*pi; tr_width = ws-wp; % transition width M = ceil(6.6*pi/tr_width) + 1; % M=67 n = [0:1:M-1]; wc = (ws+wp)/2; % Ideal LPF cutoff frequency hd = ideal_lp(wc,M); w_ham = (hamming(M))'; h = hd.*w_ham; [db,mag,pha,grd,w] = freqz_m(h,[1]); delta_w = 2*pi/1000; Rp = -(min(db(1:1:wp/delta_w+1))); % Actual Passband Ripple
As = -round(max(db(ws/delta_w+1:1:501))); % Min Stopband attenuation
%Plot subplot(1,1,1); subplot(2,2,1); stem(n,hd); title('Ideal Impulse Response'); axis([0 M-1 -0.1 0.3]); xlabel('n'); ylabel('hd(n)'); subplot(2,2,2); stem(n,w_ham); title('Hamming window'); axis([0 M-1 0 1.1]); xlabel('n'); ylabel('w(n)'); subplot(2,2,3); stem(n,h); title('Actual Impulse Response'); axis([0 M-1 -0.1 0.3]); xlabel('n'); ylabel('h(n)'); subplot(2,2,4); plot(w/pi,db); title('Magnitude Response in dB');grid; axis([0 1 -100 10]); xlabel('frequency in pi units'); ylabel('dB');
Figure 9 Hình vẽ cho ví dụ 1
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 20
Ví dụ 2:
Thiết kế bộ lọc thông thấp ở ví dụ 1 bằng cửa sổ Kaiser.
Dưới đây là code Matlab. Chúng ta áp dụng công thức đã nêu trong phần cửa sổ Kaiser để
tính toán ra bậc của bộ lọc và
% design a digital FIR filter LPF: % wp=0.2pi, ws=0.3pi, Rp=0.25dB, As=50dB % using Kaiser window
wp = 0.2*pi; ws = 0.3*pi;As = 50; tr_width = ws-wp; % transition width M = ceil((As-7.95)/(14.36*tr_width/(2*pi))+1)+1; % M=61 n = [0:1:M-1]; beta = 0.1102*(As-8.7);%beta = 4.5513 wc = (ws+wp)/2; % Ideal LPF cutoff frequency hd = ideal_lp(wc,M); w_kai = (kaiser(M,beta))'; h = hd.*w_kai; [db,mag,pha,grd,w] = freqz_m(h,[1]); delta_w = 2*pi/1000; Rp = -(min(db(1:1:wp/delta_w+1))); % Actual Passband Ripple %test As: As = -round(max(db(ws/delta_w+1:1:501))); % Min Stopband attenuation %Plot subplot(1,1,1); subplot(2,2,1); stem(n,hd); title('Ideal Impulse Response'); axis([0 M-1 -0.1 0.3]); xlabel('n'); ylabel('hd(n)'); subplot(2,2,2); stem(n,w_kai); title('Kaiser window'); axis([0 M-1 0 1.1]); xlabel('n'); ylabel('w(n)'); subplot(2,2,3); stem(n,h); title('Actual Impulse Response'); axis([0 M-1 -0.1 0.3]); xlabel('n'); ylabel('h(n)'); subplot(2,2,4); plot(w/pi,db); title('Magnitude Response in dB');grid; axis([0 1 -100 10]); xlabel('frequency in pi units'); ylabel('dB');
Figure 10 Hình vẽ cho ví dụ 2
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 21
Trong Matlab, chúng ta có thể sử dụng hàm fir1 để thiết kế bộ lọc sử dụng phương pháp
cửa sổ:
Hàm fir1 dùng để thiết kế các loại bộ lọc FIR pha tuyến tính. Nó có thể thiết kế các loại bộ
lọc thông cao, thông thấp, và thông dải. Ở chế độ mặc định, đáp ứng độ lớn của bộ lọc
(Magnitude response j| H(e ) |
) tại tần số trung tâm của dải thông được chuẩn hóa là 0dB.
Công thức chuẩn hóa:
jj
norm. 10 j0
| H(e ) || H(e ) | 20 log
| H(e ) |
Hàm MATLAB:
b = fir1(n,Wn)
b = fir1(n,Wn,'ftype')
b = fir1(n,Wn,window)
b = fir1(n,Wn,'ftype',window)
b = fir1(...,'normalization')
Hàm fir1 trả lại đáp ứng xung của bộ lọc
b = fir1(n,Wn)
n: bậc của bộ lọc
Wn: Tần số cắt (cutofff) được chuẩn hóa theo tần số Nyquist Wf.
o Nếu Wn=[w1 w2], fir1 sẽ trả về đáp ứng xung của bộ lọc thông dải bậc n.
1 2w w
o Nếu Wn=[w1 w2 … wn], fir1 sẽ trả về đáp ứng xung của bộ lọc nhiều dải
(multipass) bậc n. 0 < ω< w1, w1 < ω< w2,..., wn < ω< 1.
b = fir1(n,Wn,'ftype')
ftype: Loại bộ lọc
o ftype=high: bộ lọc thông cao với tần số cutoff = Wn
o ftype=stop: bộ lọc chắn dải, nếu Wn=[w1 w2]. Khi đó khoảng [w1 w2]
chính là dải chắn
o DC-1: Để dải đầu tiên của bộ lọc nhiều dải (multipass filter) là dải thông
o DC-0: Để dải đầu tiên của bộ lọc nhiều dải (multipass filter) là dải chắn
Ví dụ:
b=fir1(50,[0.1 0.2 0.3 0.4],'DC-1');
freqz(b,1,512);
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 22
b=fir1(50,[0.1 0.2 0.3 0.4],'DC-0');
freqz(b,1,512);
b = fir1(n,Wn,window)
window: Vector window phải có n+1 phần tử. nếu không có cửa sổ được chỉ ra nó
sẽ sử dụng cửa sổ Hamming có độ dài n+1.
b = fir1(n,Wn,'ftype',window)
Chấp nhận cả 2 tham số ftype và window
b = fir1(...,'normalization')
normalization=scale (default): Đáp ứng độ lớn của bộ lọc tại tần số trung tâm của
dải thông được chuẩn hóa là 0dB
normalization=noscale: Không chuẩn hóa
Ví dụ 3:
Thiết kế bộ lọc ở ví dụ 1 bằng hàm fir1
% design a digital FIR filter LPF: % wp=0.2pi, ws=0.3pi, Rp=0.25dB, As=50dB
wp = 0.2*pi; ws = 0.3*pi; wc = (wp + ws)/2; % Assume wc_norm = wc/pi; % Normalize cut-off frequency N = 25; % Order of filter b = fir1(N,wc_norm); freqz(b,1,512);
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 23
Figure 11 Hình vẽ cho ví dụ 3
2.2 Phương pháp lấy mẫu tần số
Trong phương pháp cửa sổ mà chúng ta đã xét ở trên có hạn chế là với cùng một chỉ tiêu
kỹ thuật thì thường chiều dài của bộ lọc N lớn hơn chiều dài cần thiết để thỏa mãn chỉ tiêu
đã cho.
Việc tìm ra cửa sổ để giảm hiện tượng Gibbs cũng không phải là đơn giản. Và khi dạng
cửa sổ trong miền n rất phức tạp, thì việc khảo sát trong miền tần số sẽ gặp nhiều khó
khăn. Bây giờ chúng ta nghiên cứu đặc trưng cơ bản của phương pháp lấy mẫu tần số
Chúng ta biết rằng đáp ứng xung dh (n) của bộ lọc số thực tế FIR có chiều dài hữu hạn N:
d
0, 0 n M 1h (n)
0, otherwise
(2.2.1)\
Cơ sở: Trong phương pháp lấy mẫu tần số, chúng ta làm gần đúng jH(e )
bằng một hàm
j
dH (e ) của bộ lọc thực tế. j
dH (e ) thu được qua việc nội suy giữa các mẫu H(k) lấy trên
jH(e ) tại các tần số k
2k
M
Ta có:
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 24
M 1M 1 j kj 2 M
d d
k 0
M 1 M 1j j k2 M
d
k 0
Msin
1 2H (e ) H (k) eM
sin( k)2 M
Msin
1 2e H (k)eM
sin( k)2 M
(2.2.2)
Trong đó H(k):
j H(k)2 kH(k) H( )e
M
(2.2.3)
H(0), k 02 k
H( ) 2 (M k)M H( ),k 1,...,M 1
M
(2.2.4)
M 1 2 k M 1, k 0,...,
2 M 2H(k) , (Type1& 2)
M 1 2 M 1(M k), k 1,..., N 1
2 M 2
(2.2.5)
M 1 2 k M 1, k 0,...,
2 2 M 2H(k) , (Type3& 4)
M 1 2 M 1(M k), k 1,...,M 1
2 2 M 2
(2.2.6)
Nhắc lại: Đối với FIR pha tuyến tính (Xem lại mục 1.3), ta có:
h(n) h(M 1 n),n 0,1,...,M 1
Dấu dương đối với FIR pha tuyến loại 1 và loại 2
Dấu âm đối với FIR pha tuyến tính loại 3 và 4
Biểu thức (2.2.2) chỉ đúng với dãy có chiều dài hữu hạn N. Còn đối với bộ lọc số lý tưởng
thì đáp ứng xung h(n) có chiều dài vô hạn. Khi đó đáp ứng xung là:
j j n
n
H(e ) h(n)e
Như vậy ta đã lấy gần đúng đáp ứng xung j
dH (e ) . Sai số của phép gần đúng này bằng 0
tại các tần số k và hữu hạn đối với các tần số khác.
Tức là:
k k
j j
dH(e ) H (e )
Như vậy qua phép gần đúng, bộ lọc số lý tưởng
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 25
j1 pass band
H(e )0 stop band
Sẽ trở thành không lý tưởng bởi công thức nội suy sau đây:
M 1 M 1j j k
j j 2 Md d
k 0
Msin
1 2H(e ) H (e ) e H (k)eM
sin( k)2 M
Tóm lại, chúng ta có thể lấy từ N mẫu của đáp ứng tần số jH(e ) của bộ lọc số lý tưởng đã
cho (thông thấp, thông cao, …) để thu được đáp ứng tần số của bộ lọc số thực tế j
dH (e ) .
Khi đó ta thu được h(n):
h(n) IDFT[H(k)] (2.2.7)
Kết luận: Phương pháp lấy mẫu tần số có các bước thực hiện như sau. Chúng ta chọn
một bộ lọc thông thấp lý tưởng jH(e ) , chọn chiều dài của bộ lọc là N. Sau đó chúng
ta lấy mẫu jH(e ) tại N điểm tần số k
2k
M
cách đều nhau từ 0 đến 2π ta thu được
H(k). Cuối cùng ta có j
dH (e ) bằng việc nội suy từ H(k). Như Figure 12
Figure 12 Mô tả phương pháp lấy mẫu tần số
Từ hình 12, ta có những nhận xét sau:
1. Sai số xấp xỉ (approximation error) bằng 0 tại những mẫu tần số ( k
2k
M
)
2. Sai số xấp xỉ tại những tần số khác phụ thuộc vào hình dạng của đáp ứng lý tưởng
3. Lỗi lớn tại cạnh của các băng tần, và nhỏ hơn tại những tần số trong băng tần
Từ đây có hai phương pháp thiết kế. Một là, chúng ta sử dụng cách như đã trình bày ở phần
trên mà không constraint sai số xấp xỉ. Phương pháp này gọi là naive design. Hai là, chúng
ta giảm sai số xấp xỉ bằng cách biến đổi các mẫu trong dải chuyển tiếp. Phương pháp này
gọi là optimum design
NAIVE DESIGN:
Trong phương pháp này, chúng ta thu j2 k/MH(k) H(e ) , k=0,…,M-1. Sau đó sử dụng
công thức từ (2.2.3) đến (2.2.6) và (2.2.7) để thu được đáp ứng xung h(n)
Ví dụ 4: Thiết kế bộ lọc thông thấp sử dụng phương pháp lấy mẫu tần số
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 26
p p
s s
0.2 , R 0.25dB
0.3 , A 50dB
Giải
Chọn M = 20, chúng ta có mẫu tần số ở dải thông p là k=2:
p
20.2 2
20
Tương tự ở dải chắn s có k=3
s
20.3 3
20
Như vậy chúng ta có 3 mẫu ở dải thông [p0 ] và 7 mẫu ở dải chắn [
s ].
Như vậy chúng ta có phần biên độ của H(k) là:
| H(k) | [1,1,1,0,...,0,1,1], 15zeros
Khi M = 20, h(n) là đối xứng. Vậy đây là bộ lọc FIR loại 2, ta có:
29.5 k 0.95 k, 0 k 9
H(k) 20
0.95 (20 k), 10 k 19
Dưới đây là code Matlab cho ví dụ trên
M = 20; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; Hrs = [1,1,1,zeros(1,15),1,1]; % Ideal Amp Res sampled Hdr = [1,1,0,0]; wdl = [0,0.25,0.26,1]; %Ideal Amp Res for plotting k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; angH = [-alpha*(2*pi)/M*k1,alpha*(2*pi)/M*(M-k2)]; H = Hrs.*exp(j*angH); h = real(ifft(H,M)); [db,mag,pha,grd,w] = freqz_m(h,[1]); [Hr,ww,a,L] = Hr_Type2(h);
subplot(2,2,1);plot (wl(1:11)/pi ,Hrs(1:11),'o',wdl,Hdr); axis([0,1,-0.1,1.1]) ; title('Frequency Samples: M=20'); xlabel('frequency in pi units'); ylabel('Hr(k)');
subplot(2,2,2);stem(l,h); axis([-1,M,-0.1,0.3]);grid; title('Impulse response'); xlabel('n'); ylabel('h(n)');
subplot(2,2,3); plot(ww/pi,Hr,wl(1:11)/pi,Hrs(1:11),'o');grid; axis([0,1,-0.2,1.2]); title('Amplitude Response'); xlabel('frequency in pi units'); ylabel('Hr(w)');
subplot(2,2,4); plot(w/pi,db); axis([0,1,-60,60]); grid; title('Magnitude Response'); xlabel('frequency in pi units');
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 27
ylabel('Decibels');
Hình Figure 13 biểu diễn bộ lọc trên miền thời gian và miền tần số. Ta thấy độ suy hao dải
chắn nhỏ nhất là khoảng 16dB, sự suy hao này vẫn còn quá lớn.
Figure 13 Hình vẽ cho ví dụ 4
OPTIMUM DESIGN:
Để thu được độ suy hao lớn hơn, chúng ta sẽ tăng M lên sao cho có một số mẫu nằm trong
dải chuyển tiếp. Bên cạnh đó, chúng ta sẽ thay đổi giá trị của mẫu nằm trong dải chuyển
tiếp để thu được độ suy hao lớn nhất có thể.
Ví dụ 5: Sử dụng lại đề bài trong ví dụ 4
Giải:
Chọn M = 40, chúng ta có 1 mẫu nằm trong dải chuyển tiếp ( 0.2 0.3 ). Như vậy
khi 1 2 / 40 , mẫu ở dải chuyển tiếp là k=5 và k=40-5. Ta thu được đáp ứng biên độ
của H(k). Chúng ta định nghĩa giá trị nằm trong dải chuyển tiếp là T1 ( 10 T 1 )
1 1| H(k) | [1,1,1,1,1,T ,0,...,0,T ,1,1,1,1], 29 zeros
M=40 (chẵn), h(n) đối xứng, nên đây là dạng FIR loại 2 ta có:
219.5 k 0.975 k, 0 k 19
H(k) 40
0.975 (40 k), 20 k 39
Bây giờ chúng ta sẽ chọn T1 sao cho thu được độ suy hao dải chắn là nhiều nhất.
Chọn T1=0.5
% T1=0.5 T1=0.5; M = 40; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l;
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 28
Hrs = [ones(1,5),T1,zeros(1,29),T1,ones(1,4)]; % Ideal Amp Res sampled Hdr = [1,1,T1,0,0]; wdl = [0,0.25,0.255,0.26,1]; %Ideal Amp Res for
plotting k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; angH = [-alpha*(2*pi)/M*k1,alpha*(2*pi)/M*(M-k2)]; H = Hrs.*exp(j*angH); h = real(ifft(H,M)); [db,mag,pha,grd,w] = freqz_m(h,[1]); [Hr,ww,a,L] = Hr_Type2(h);
subplot(2,2,1);plot (wl(1:21)/pi ,Hrs(1:21),'o',wdl,Hdr); axis([0,1,-0.1,1.1]) ; title('Frequency Samples: M=40, T1=0.5'); xlabel('frequency in pi units'); ylabel('Hr(k)');
subplot(2,2,2);stem(l,h); axis([-1,M,-0.1,0.3]);grid; title('Impulse response'); xlabel('n'); ylabel('h(n)');
subplot(2,2,3); plot(ww/pi,Hr,wl(1:21)/pi,Hrs(1:21),'o');grid; axis([0,1,-0.2,1.2]); title('Amplitude Response'); xlabel('frequency in pi units'); ylabel('Hr(w)');
subplot(2,2,4); plot(w/pi,db); axis([0,1,-100,10]); grid; title('Magnitude Response'); xlabel('frequency in pi units');
ylabel('Decibels');
Hình Figure 14, ta có suy hao dải chắn là 30dB, tốt hơn phương pháp Naive design tuy
nhiên vẫn chưa đạt được 50dB. Chúng ta chọn T1=0.39
Figure 14 Hình vẽ cho ví dụ 5 với T1=0.5
Chọn T1=0.39
% T1=0.39 T1=0.39; M = 40; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; Hrs = [ones(1,5),T1,zeros(1,29),T1,ones(1,4)]; % Ideal Amp Res sampled Hdr = [1,1,T1,0,0]; wdl = [0,0.25,0.255,0.26,1]; %Ideal Amp Res for
plotting k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; angH = [-alpha*(2*pi)/M*k1,alpha*(2*pi)/M*(M-k2)];
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 29
H = Hrs.*exp(j*angH); h = real(ifft(H,M)); [db,mag,pha,grd,w] = freqz_m(h,[1]); [Hr,ww,a,L] = Hr_Type2(h);
subplot(2,2,1);plot (wl(1:21)/pi ,Hrs(1:21),'o',wdl,Hdr); axis([0,1,-0.1,1.1]) ; title('Frequency Samples: M=40, T1=0.5'); xlabel('frequency in pi units'); ylabel('Hr(k)');
subplot(2,2,2);stem(l,h); axis([-1,M,-0.1,0.3]);grid; title('Impulse response'); xlabel('n'); ylabel('h(n)');
subplot(2,2,3); plot(ww/pi,Hr,wl(1:21)/pi,Hrs(1:21),'o');grid; axis([0,1,-0.2,1.2]); title('Amplitude Response'); xlabel('frequency in pi units'); ylabel('Hr(w)');
subplot(2,2,4); plot(w/pi,db); axis([0,1,-100,10]); grid; title('Magnitude Response'); xlabel('frequency in pi units');
ylabel('Decibels');
Từ hình Figure 15, ta thu được suy hao dải chắn nhỏ nhất là 43dB. Rõ ràng, để tăng suy
hao dải chắn, chúng ta cần thay đổi nhiều hơn 1 mẫu trong dải chuyển tiếp.
Figure 15 Hình vẽ cho ví dụ 5, T1=0.39
Bây giờ chúng ta sẽ tăng M=60, sẽ có 2 mẫu ở trong dải chuyển tiếp là T1=0.5925 và
T2=0.1099.
Ta có đáp ứng biên độ của H(k) là:
1 2 2 1
7ones 43zeros 6ones
| H(k) | [1,...,1,T ,T ,0,...,0,T ,T ,1,...,1]
% T1=0.5925, T2=0.1099 T1=0.5925; T2=0.1099; M = 60; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; Hrs = [ones(1,7),T1,T2,zeros(1,43),T2,T1,ones(1,6)]; % Ideal Amp Res
sampled Hdr = [1,1,0,0]; wdl = [0,0.25,0.26,1]; %Ideal Amp Res for plotting
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 30
k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; angH = [-alpha*(2*pi)/M*k1,alpha*(2*pi)/M*(M-k2)]; H = Hrs.*exp(j*angH); h = real(ifft(H,M)); [db,mag,pha,grd,w] = freqz_m(h,[1]); [Hr,ww,a,L] = Hr_Type2(h);
subplot(2,2,1);plot (wl(1:31)/pi ,Hrs(1:31),'o',wdl,Hdr); axis([0,1,-0.1,1.1]) ; title('Frequency Samples: M=60, T1=0.5925,
T2=0.1099'); xlabel('frequency in pi units'); ylabel('Hr(k)');
subplot(2,2,2);stem(l,h); axis([-1,M,-0.1,0.3]);grid; title('Impulse response'); xlabel('n'); ylabel('h(n)');
subplot(2,2,3); plot(ww/pi,Hr,wl(1:31)/pi,Hrs(1:31),'o');grid; axis([0,1,-0.2,1.2]); title('Amplitude Response'); xlabel('frequency in pi units'); ylabel('Hr(w)');
subplot(2,2,4); plot(w/pi,db); axis([0,1,-100,10]); grid; title('Magnitude Response'); xlabel('frequency in pi units');
ylabel('Decibels');
Chúng ta thu được suy hao dải chắn 63dB
Figure 16 Hình vẽ cho ví dụ 5, M=60, T1=0.5925 và T2=0.1099.
Trong Matlab, chúng ta có thể thiết kế bộ lọc theo phương pháp lấy mẫu tần số bằng hàm
fir2
b = fir2(n,f,m)
b = fir2(n,f,m,window)
b = fir2(n,f,m,npt)
b = fir2(n,f,m,npt,window)
b = fir2(n,f,m,npt,lap)
b =
fir2(n,f,m,npt,lap,window)
fir2 thiết kế bộ lọc FIR theo phương pháp lấy mẫu tần số với đáp ứng tần số có dạng tùy ý.
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 31
b = fir2(n, f, m) trả ra vector b chứa n+1 hệ số của bộ lọc FIR bậc n. Đặc tính độ lớn tần số
của bộ lọc phụ thuộc vào f, m.
f là vector tần số trong khoảng từ 0 đến 1. Nơi 1 tương ứng với tần số Nyquist. Điểm đầu
tiên của f phải là 0 và điểm cuối cùng phải là 1. Điểm tần số phải đặt theo thứ tự tăng dần.
m là một vector chứa đáp ứng biên độ mong muốn tại điểm f.
f và m phải cùng chiều dài.
Cho phép điểm tần số trùng nhau, tương ứng với đáp ứng tần số.
Hệ số đầu ra bộ lọc, b, được sắp xếp tăng dần theo lũy thừa của z.
b(z) = b(1) + b(2)z-1 +…+ b(n+1)z-n
fir2 luôn luôn sử dụng bậc bộ lọc chẵn cho cấu hình với passband ở tần sô Nyquist. Bởi vì
cho bậc lẻ thì đáp ứng tần số ở tần số Nyquist thì thường 0. Nếu bậc lẻ fir2 tăng nó bởi 1.
b = fir2(n,f,m,window) sử dụng cửa sổ được chỉ rõ trong vector window. Vector window
phải có n+1 phần tử. Nếu window không được chỉ ra fir2 sử dụng cửa sổ Hamming có
chiều dài n+1.
b = fir2(n,f,m,npt,lap) và b = fir2(n,f,m,npt,lap,window) chỉ ra kích cỡ của vùng, lap, rằng
fir2 chèn xung quanh điểm tần số trùng lặp, có hoặc không cửa sổ được chỉ ra.
Ví dụ: Thiết kế bộ lọc thông thấp, trong đó fs = 3KHz, fcutoff = 400 Hz, bậc bộ lọc là 20.
n = 20;
fcut=400/3000;
f = [0 fcut fcut 1];
m = [1 1 0 0];
b = fir2(n, f, m);
[h,w] = freqz(b,1,128);
plot(f,m,w/pi,abs(h))
legend('Ideal','fir2 Designed')
title('Comparison of Frequency Response Magnitudes')
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 32
2.3 Phương pháp lặp (Equiripple)
Để tổng hợp được bộ lọc FIR pha tuyến tính tối ưu (tức là bộ lọc số có bậc tối thiểu) chúng
ta có thể sử dụng phương pháp lặp
Hai phương pháp, cửa sổ và lấy mẫu tần số khá đơn giản để hiểu và triển khai. Tuy nhiên,
chúng có một vài bất lợi. Đầu tiên, chúng ta không thể xác định chính xác p và
s ; điều
này có nghĩa là, chúng ta phải chấp nhận giá trị mà chúng ta thu được sau khi thiết kế. Thứ
hai, chúng ta không thể xác định chính xác cả hệ số độ gợn dải thông 1 và độ gợn dải
chắn 2 . Hoặc là chúng ta có
1 2 trong phương pháp cửa số, hoặc chỉ optimize được
2 trong phương pháp lấy mẫu tần số. Thứ ba, sai số xấp xỉ (approximation error) – là sự
khác nhau giữa đáp ứng lý tưởng và đáp ứng thực tế – không giống nhau trên toàn dải. Lỗi
này lớn khi ở biên của dải tần số và nhỏ hơn khi ở trong dải tần số. Bằng việc phân tán sao
cho lỗi này tương đối giống nhau trên các dải tần, chúng ta thu được bộ lọc có đáp ứng
xung nhỏ hơn để đáp ứng được yêu cầu đặt ra. Tồn tại phương pháp có thể loại bỏ cả ba
vấn đề bên trên. Kết quả của phương pháp này sẽ là tối ưu, nhưng chúng ta phải trả giá là
việc tính toán sẽ khá phức tạp.
Đối với bộ lọc FIR pha tuyến tính, có thể lấy được một tập hợp các điều kiện giải pháp
thiết kế là tối ưu trong việc giảm thiểu tối đa sai số xấp xỉ. Chúng ta coi việc tổng hợp một
bộ lọc như là một bài toán gần đúng theo nghĩa chebyschev. Bộ lọc này được gọi là
equiripple bởi vì sai số xấp xỉ được phân tán đồng đều trên cả dải thông và dải chắn.
Để thiết kế bộ lọc equiripple, chúng ta sử dụng một thuật toán nội suy đa thức, thuật toán
này có tên là Parks-McClellan
Dưới đây chúng ta sẽ xét cách biểu diễn của j
dA (e ) (của bộ lọc thực tế) của cả 4 loại lọc
số FIR theo dạng:
j j j
dA (e ) Q(e ).P(e ) (2.3.1)
Chúng ta có bảng tổng kết sau:
j j j
dA (e ) Q(e ).P(e )
Loại bộ lọc jQ(e ) jP(e )
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 33
1 1 N 1
2
n 0
a(n)cos n
2 cos
2
N1
2
n 0
b(n)cos n
3 sin N 11
2
n 0
c(n)cos n
4 sin
2
N1
2
n 0
d(n)cos n
jQ(e ) là một hàm cố định đã biết, còn
jP(e ) là đa thức theo cos n . Vì vậy chúng ta
phải đi tìm các hệ số n của jP(e )
sao cho sai số giữa đáp ứng tần số của bộ lọc thực tế
và bộ lọc số lý tưởng là nhỏ nhất.
Sai số của bộ lọc thực tế và bộ lọc lý tưởng được đánh giá như sau:
𝐸(𝜔) = 𝑊(𝜔)[𝐴(𝜔) − 𝐴𝑑(𝜔)]
Ở đây:
E(ω): sai số
A(ω): đáp ứng tần số của độ lớn của bộ lọc số lý tưởng
Ad(ω): đáp ứng tấn số của độ lớn của bộ lọc số lý tưởng
W(ω): hàm trọng số trên sai số lý tưởng
Với �̂�(𝜔) = 𝑊(𝜔). 𝑄(𝜔) ; �̂�(𝜔) =𝐴(𝜔)
𝑄(𝜔)
Ta có thể viết sai số như sau:
𝐸(𝜔) = �̂�(𝜔)[�̂�(𝜔) − 𝑃(𝜔)]
Giải bài toán gần đúng ở đây là ở chỗ chúng ta phải tìm thấy một tập hợp các hệ số α(k)
sao cho tối thiểu hóa giá trị tuyệt đối của sai số E(ω). Để giải bài toán xấp xỉ này, Parks và
McClellan đã ứng dụng một định lý trong lý thuyết gần đúng của Chebyschev, định lý này
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 34
gọi là định lý xoay chiều (Tham khảo trong sách xử lý số tín hiệu – Nguyễn Quốc Trung,
tập 1)
Tóm lại
Dựa trên cở sở bài toán gần đúng theo nghĩa Chebyschev này, Parks và McClellan đã sử
dụng định lý xoay chiều để đưa ra phương pháp tính toán bộ lọc số FIR pha tuyến tính.
Nguyên tắc chung của phương pháp này gồm những bước sau đây:
1. Chọn loại bộ lọc số lý tưởng, tức là chọn đáp ứng tần số của độ lớn A(ω), sau đó chọn
hàm trọng số W(ω) (dựa theo các chỉ tiêu kỹ thuật của bộ lọc thực tế), cuối cùng sẽ chọn
bậc của bộ lọc số N.
2. Xác định bài toán gần đúng, tức là tìm �̂�(𝜔), �̂�(𝜔), 𝑃(𝜔).
3. Giải bài toán gần đúng bằng cách sử dụng thuật toán thay đổi Remez.
4. Tính toán các hệ số của bộ lọc.
Trong MATLAB, chúng ta có thể sử dụng hàm firpm
b = firpm(n,f,a)
b = firpm(n,f,a,w)
b = firpm(n,f,a, 'ftype')
b = firpm(n,f,a,w, 'ftype')
b = firpm(...,{lgrid})
[b,err] = firpm(...)
[b,err,res] = firpm(...)
b = firpm(n,f,@fresp,w)
b = firpm(n,f,@fresp,w,'ftype')
firpm thiết kế một FIR pha tuyến tính sử dụng thuật toán Park-McClellan. Thuật toán Park-
MaClellan sử dụng thuật toán thay đổi Remez định luật xấp xỉ Chebyshev để thiết kế bộ
lọc tối ưu phù hợp giữa đáp ứng xung mong đợi và thực tế. Bộ lọc được tối ưu có nghĩa là
sai số lớn nhất giữa đáp ứng xung thực tế và lý tưởng là lớn nhất. Bộ lọc được thiết kế theo
cách này đôi khi được gọi là enquiripple.
b = firpm (n, f, a) trả lại vector hàng chứa n+1 hệ số của bộ lọc FIR có bậc n, đặc tính tần
số, biên độ được cho bởi vector f và a.
Các hệ số output b có tính chất đối xứng:
b(k) = b(n + 2 – k) k = 1, 2, …, n + 1
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 35
Vector f và a xác định đặc tính biên độ tần số của bộ lọc:
f là một vector của các cặp điểm tần số bình thường, được xác định trong khoảng 0 đến 1.
Trong đó 1 tương ứng với tần số Nyquist. Tần số phải sắp xếp theo thứ tự tăng dần.
a là vector chứa biên độ mong đợi ứng với f.
f và a phải cùng độ dài. Độ dài phải là số chẵn.
b = firpm (n, f, a, w) sử dụng vector trọng lượng w phù hợp cho mỗi bang tần. Độ dài
vector w bằng ½ độ dài vector f và a.
b = firpm (n, f, a, ‘ftype’) và b = firpm (n, f, a, w, ‘ftype’) xác định loại bộ lọc, với ‘ftype’
là:
‘hilbert’, cho bộ lọc pha tuyến tính đối xứng và lẻ (loại III và IV)
‘differentiator’, cho bộ lọc loại III và IV sử dụng kỹ thuật trọng lượng đặc biệt.
[b, err] = firpm (…) trả lại giá trị chiều cao gợn sóng vào err.
[b, err, res] = firpm (…) trả lại cấu trúc res với các trường sau.
res.fgrid Vector lưới tần sô được sử dụng cho tối ưu thiết kế bộ lọc
res.des Đáp ứng tần số mong muốn cho mỗi điểm res.fgrid
res.wt Trọng lượng cho mỗi điểm opt.fgrid
res.H Đáp ứng tần số thực tế cho mỗi điểm trong res.fgrid
res.error Lỗi ở mỗi điểm trong res.fgrid
res.iextr Vector chỉ số trong res.fgrid cho các tần số cực trị
res.fextr Vector các tấn số cực trị
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 36
Thiết kế bộ lọc thông thấp với fs = 2kHz, fpass = 400 Hz, fstop = 400 Hz, bậc bộ
lọc là 20.
Code Matlab
n = 20; % bậc bộ lọc
f = [0 0.4 0.5 1]; % vector tần số
m = [1 1 0 0]; % biên độ tương ứng
h_firpm = firpm(n, f, m);
freqz(h_firpm,1);
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 37
3
Các kiến trúc bộ lọc FIR
3.1 Kiến trúc Direct (Cấu trúc chuẩn tắc)
3.1.1 Lý thuyết
Loại cấu trúc này được suy trực tiếp từ phương trình sai phân biểu diễn quan hệ vào ra của
bộ lọc. Quan hệ vào ra của bộ lọc FIR được biểu diễn bằng công thức tổng chập:
M 1
k 0
y(n) h(k)x(n k)
(3.1.1)
Kiến trúc của bộ lọc được biểu diễn ở hình Figure 17. Chúng ta cần M-1 bộ nhớ lưu M-1
đầu vào, M bộ nhân, M-1 bộ cộng
Figure 17 Kiến trúc Direct-form
Đặc tính đối xứng hoặc bất đối xứng của bộ lọc FIR pha tuyến tính được dùng để giảm số
bộ nhân xuống còn một nửa
Nhắc lại: có 4 loại bộ lọc FIR pha tuyến tính
M lẻ (odd) M chẵn (even)
h(n) đối xứng Loại 1 Loại 2
h(n) phản đối xứng Loại 3 Loại 4
FIR loại 1:
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 38
M 11 M 1M 1 2
n n (M 1 n) 2
n 0 n 0
M 1H(z) h(n)z h(n)[z +z ]+h( )z
2
(3.1.2)
Từ công thức (3.1.2) ta có cấu trúc như hình Figure 18
Figure 18 Direct-form, FIR 1
FIR loại 2:
M1
M 1 2n n (M 1 n)
n 0 n 0
H(z) h(n)z h(n)[z +z ]
(3.1.3)
Từ công thức (3.1.3) ta có cấu trúc như hình Figure 19
Figure 19 Direct-form, FIR 2
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 39
FIR loại 3:
M 11
M 1 2n n (M 1 n)
n 0 n 0
H(z) h(n)z h(n)[z -z ]
(3.1.4)
Từ công thức (3.1.4) ta có cấu trúc như hình Figure 20
Figure 20 Direct-form, FIR 3
FIR loại 4:
M1
M 1 2n n (M 1 n)
n 0 n 0
H(z) h(n)z h(n)[z -z ]
(3.1.5)
Từ công thức (3.1.5) ta có cấu trúc như hình
Figure 21 Direct-form, FIR 4
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 40
3.1.2 Thiết kế simulink
Để thiết kế simulink, đầu tiên chúng ta phải lựa chọn phương pháp thiết kế bộ lọc (phương
pháp cửa sổ, phương pháp lấy mẫu tần số, phương pháp lặp). Từ các phương pháp này,
chúng ta xác định bậc của bộ lọc M, đáp ứng xung h(n). Từ đó chúng ta lựa chọn tương
ứng với loại bộ lọc phía trên
Ví dụ: chúng ta thiết kế bộ lọc thông thấp, fs = 20KHz, fc = 1KHz. Giả sử chúng ta sử
dụng phương pháp cửa sổ, lựa chọn cửa sổ Hamming, chọn bậc của bộ lọc là M=20.
Như vậy, M chẵn, h(n) đối xưng. Chúng ta chọn bộ lọc FIR loại 2.
Sử dụng công cụ fdatool để thiết kế bộ lọc:
Chúng ta thu được hệ số lọc
h(n)=b=[
3.6942106777713809e-19
0.0013272228969113322
0.0046502522506579463
0.011749802608142372
0.02377922195610704
0.040723451189874783
0.061156926116234529
0.082403674188359047
0.10108221115667204
0.11389737880049784
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 41
0.11845971767308625
0.11389737880049784
0.10108221115667204
0.082403674188359047
0.061156926116234529
0.040723451189874783
0.02377922195610704
0.011749802608142372
0.0046502522506579463
0.0013272228969113322
3.6942106777713809e-19]
Sau đó ta cho tín hiệu bao gồm hai tần số: Tần số thấp = 200Hz, tần số cao = 4000Hz
Setup:
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 42
Cuối cùng ta thu được:
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 43
3.1.3 Đáp ứng tần số của bộ lọc
3.1.4 Kích thước bộ lọc
Đối với bộ lọc bất kì: Chúng ta cần M-1 bộ nhớ lưu M-1 đầu vào, M bộ nhân, M-1 bộ
cộng.
Đối với bộ lọc FIR pha tuyến tính: Số bộ nhân giảm xuống còn một nửa, số bộ cộng giữ
nguyên M-1
3.1.5 Trễ tín hiệu và pha
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 44
Trễ pha 10 mẫu. Tức là đầu ra trễ hơn 10 mẫu so với đầu vào.
3.2 Kiến trúc Cascade (kiến trúc dạng tầng)
3.2.1 Lý thuyết
Chúng ta có thể phân hoạch hàm H(Z) thành tích của các hàm cơ sở bậc một hoặc bậc hai.
Việc phân hoạch này tương ứng với cấu trúc dạng tầng.
Giả sử chúng ta có thể phân H(Z) thành các hệ bậc hai như sau:
QM 1n 1 2
0k 1k 2k
n 0 k 1
H(z) h(n)z z z
Từ đây ta thu được cấu trúc dạng tầng
Ví dụ: 1 1 2H(z) (1 1.017z 2.3469)(1 2.017z 1.7045z ) Có
1 2 3 4H(z) 1 z 2z 3z 4z
Chúng ta sẽ phân tích H(z) thành tích của các đa thức bậc 1 hoặc bậc 2
Trong Matlab có hàm roots để tìm các điểm không của một đa thức
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.99.5
10
10.5
Normalized Frequency: 0.2459717
Phase Delay: 10
Normalized Frequency ( rad/sample)
Phase D
ela
y (
sam
ple
s)
Phase Delay
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 45
>> roots([1 1 2 3 4])
ans =
0.5085 + 1.4451i
0.5085 - 1.4451i
-1.0085 + 0.8291i
-1.0085 - 0.8291i
Như vậy ta thu được:
1 1
1 1
H(z) (1 (0.5085 + 1.4451i)z )(1 (0.5085 - 1.4451i)z )
(1 ( 1.0085 + 0.8291i)z )(1 ( 1.0085 - 0.8291i)z )
1 2 1 2H(z) (1 1.017z 2.3469z )(1 2.017z 1.7045z )
3.2.2 Xây dựng Simulink
Tùy theo các phương pháp thiết kế, chúng ta sử dụng các hàm của matlab để tìm ra đáp
ứng xung của bộ lọc. Sau đó chuyển đổi tín hiệu sang miền Z và phân tích thành tích của
các hàm đa thức bậc 1 hoặc bậc 2
Ví dụ: Làm lại ví dụ ở phần 3.1. Thiết kế bộ lọc thông thấp, fs = 20KHz, fc = 1KHz. Giả
sử chúng ta sử dụng phương pháp cửa sổ, lựa chọn cửa sổ Hamming, chọn bậc của bộ lọc
là M=20.
Ta đã có:
h(n)=b=[
0.0013272228969113322
0.0046502522506579463
0.011749802608142372
0.02377922195610704
0.040723451189874783
0.061156926116234529
0.082403674188359047
0.10108221115667204
0.11389737880049784
0.11845971767308625
0.11389737880049784
0.10108221115667204
0.082403674188359047
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 46
0.061156926116234529
0.040723451189874783
0.02377922195610704
0.011749802608142372
0.0046502522506579463
0.0013272228969113322
3.6942106777713809e-19]
Sau đó sử dụng hàm roots, chúng ta thu được các điểm 0. Tuy nhiên để thu được hàm
H(z), sau khi qui về dạng tích, chúng ta phải lấy hệ số tự số tự do, ở đây là 1, chia cho hệ
số tự do của hàm H(z) ban đầu, ở đây là 0.0013272228969113322.
-0.9877 + 0.1561i
-0.9877 - 0.1561i
-0.8915 + 0.4531i
-0.8915 - 0.4531i
-0.7080 + 0.7062i
-0.7080 - 0.7062i
-0.4542 + 0.8909i
-0.4542 - 0.8909i
0.6587 + 0.7524i
0.6587 - 0.7524i
-0.1502 + 0.9887i
-0.1502 - 0.9887i
0.2189 + 1.0757i
0.2189 - 1.0757i
0.3805 + 0.9248i
0.3805 - 0.9248i
0.1816 + 0.8927i
0.1816 - 0.8927i
-0.0000 + 0.0000i
Từ đó phân tích được thành:
1 2 1 2 1 2 1 2
1 2 1 2 1 2 1 2
1 2
H(z) (1 1.9754z z )(1 1.783z z )(1 1.416z z )(1 0.9084z z )
(1 1.3174z z )(1 0.3004z z )(1 0.4378z 1.205z )(1 0.761z z )
(1 0.3632z 0.001327222896911330.8299 2z ) / 2
Từ công thức trên, chúng ta xây dựng được cấu trúc trong Simulink
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 47
3.2.3 Đáp ứng tần số của bộ lọc
3.2.4 Kích thước bộ lọc
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 48
3.2.5 Trễ tín hiệu và pha
Trễ pha 10 mẫu. Tức là đầu ra trễ hơn 10 mẫu so với đầu vào.
3.3 Kiến trúc Lattice (cấu trúc mắt cáo)
3.3.1 Lý thuyết
Cấu trúc Lattice có thể dùng để thực hiện bộ lọc FIR và IIR. Trong mục này, chúng ta sẽ
nghiên cứu đối với bộ lọc FIR. Kiến trúc Lattice có cấu trúc sau
Trong trường hợp tổng quát, ta có hệ số:
m Mk h (m)
Trong đó:
2
m 1 m2
m
1h (0) 1 h (m) 1
1 k
m 1 m m m2
m
1h (1) h (1) h (m)h (m 1)
1 k
...
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.99.5
10
10.5
Normalized Frequency: 0.2459717
Phase Delay: 10
Normalized Frequency ( rad/sample)
Phase D
ela
y (
sam
ple
s)
Phase Delay
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 49
m 1 m m m2
m
1h (m 1) h (m 1) h (m)h (1)
1 k
Vậy ta có:
m 1 m m m2
m
1h (i) h (i) h (m)h (m i)
1 h (m)
Ở đây:
m m
m 1 m 1
k h (m)
k h (m 1)
3.3.2 Thiết kế Simulink
Làm lại bài toán ở mục 3.1
Xây dựng cấu trúc từng step
Ghép nối các step
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 50
3.3.3 Đáp ứng tần số của bộ lọc
3.3.4 Kích thước bộ lọc
Số bộ nhân: 2M
EDA-Group FIR system design 4.12.2014
http://edabk.org/ Rev 0.1 51
Số bộ cộng: 2M
Delay: M cổng
3.3.5 Trễ tín hiệu và pha
Trễ pha 10 mẫu. Tức là đầu ra trễ hơn 10 mẫu so với đầu vào.
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.99.5
10
10.5
Normalized Frequency: 0.2459717
Phase Delay: 10
Normalized Frequency ( rad/sample)
Phase D
ela
y (
sam
ple
s)
Phase Delay