tổng quan cấu trúc bộ lọc fir

52
EDA-Group FIR system design 12/4/2014 FIR system design Authors: Ha Van Phu [email protected] Rev. 0.1 December 4, 2014

Upload: cao8cv

Post on 26-Dec-2015

200 views

Category:

Documents


3 download

DESCRIPTION

Tài liệu up lên nhằm mục đích download thêm

TRANSCRIPT

Page 1: Tổng quan cấu trúc bộ lọc FIR

EDA-Group FIR system design 12/4/2014

FIR system design

Authors: Ha Van Phu

[email protected]

Rev. 0.1

December 4, 2014

Page 2: Tổng quan cấu trúc bộ lọc FIR

EDA-Group FIR system design 4.12.2014

http://edabk.org/ Rev 0.1 1

This Page is Intentionally Blank

Page 3: Tổng quan cấu trúc bộ lọc FIR

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

Page 4: Tổng quan cấu trúc bộ lọc FIR

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

Page 5: Tổng quan cấu trúc bộ lọc FIR

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).

Page 6: Tổng quan cấu trúc bộ lọc FIR

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 (𝜔𝑐)

Page 7: Tổng quan cấu trúc bộ lọc FIR

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

Page 8: Tổng quan cấu trúc bộ lọc FIR

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)

Page 9: Tổng quan cấu trúc bộ lọc FIR

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)

Page 10: Tổng quan cấu trúc bộ lọc FIR

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ế

Page 11: Tổng quan cấu trúc bộ lọc FIR

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 )

đá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)

Page 12: Tổng quan cấu trúc bộ lọc FIR

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)

Page 13: Tổng quan cấu trúc bộ lọc FIR

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

Page 14: Tổng quan cấu trúc bộ lọc FIR

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)

Page 15: Tổng quan cấu trúc bộ lọc FIR

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)

Page 16: Tổng quan cấu trúc bộ lọc FIR

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)

Page 17: Tổng quan cấu trúc bộ lọc FIR

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:

Page 18: Tổng quan cấu trúc bộ lọc FIR

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).

Page 19: Tổng quan cấu trúc bộ lọc FIR

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

Page 20: Tổng quan cấu trúc bộ lọc FIR

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

Page 21: Tổng quan cấu trúc bộ lọc FIR

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

Page 22: Tổng quan cấu trúc bộ lọc FIR

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);

Page 23: Tổng quan cấu trúc bộ lọc FIR

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);

Page 24: Tổng quan cấu trúc bộ lọc FIR

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ó:

Page 25: Tổng quan cấu trúc bộ lọc FIR

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

Page 26: Tổng quan cấu trúc bộ lọc FIR

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ố

Page 27: Tổng quan cấu trúc bộ lọc FIR

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');

Page 28: Tổng quan cấu trúc bộ lọc FIR

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;

Page 29: Tổng quan cấu trúc bộ lọc FIR

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)];

Page 30: Tổng quan cấu trúc bộ lọc FIR

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

Page 31: Tổng quan cấu trúc bộ lọc FIR

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 ý.

Page 32: Tổng quan cấu trúc bộ lọc FIR

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')

Page 33: Tổng quan cấu trúc bộ lọc FIR

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 )

Page 34: Tổng quan cấu trúc bộ lọc FIR

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

Page 35: Tổng quan cấu trúc bộ lọc FIR

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

Page 36: Tổng quan cấu trúc bộ lọc FIR

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ị

Page 37: Tổng quan cấu trúc bộ lọc FIR

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);

Page 38: Tổng quan cấu trúc bộ lọc FIR

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:

Page 39: Tổng quan cấu trúc bộ lọc FIR

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

Page 40: Tổng quan cấu trúc bộ lọc FIR

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

Page 41: Tổng quan cấu trúc bộ lọc FIR

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

Page 42: Tổng quan cấu trúc bộ lọc FIR

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:

Page 43: Tổng quan cấu trúc bộ lọc FIR

EDA-Group FIR system design 4.12.2014

http://edabk.org/ Rev 0.1 42

Cuối cùng ta thu được:

Page 44: Tổng quan cấu trúc bộ lọc FIR

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

Page 45: Tổng quan cấu trúc bộ lọc FIR

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

Page 46: Tổng quan cấu trúc bộ lọc FIR

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

Page 47: Tổng quan cấu trúc bộ lọc FIR

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

Page 48: Tổng quan cấu trúc bộ lọc FIR

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

Page 49: Tổng quan cấu trúc bộ lọc FIR

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

Page 50: Tổng quan cấu trúc bộ lọc FIR

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

Page 51: Tổng quan cấu trúc bộ lọc FIR

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

Page 52: Tổng quan cấu trúc bộ lọc FIR

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