Tải bản đầy đủ (.docx) (33 trang)

TIỂU LUẬN XỬ LÝ TÍN HIỆU SỐ NÂNG CAO BIẾN ĐỔI FOURIER NHANH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.18 MB, 33 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA QUỐC TẾ VÀ SAU ĐẠI HỌC

TIỂU LUẬN XỬ LÝ TÍN HIỆU SỐ NÂNG CAO
BIẾN ĐỔI FOURIER NHANH
Giảng viên: TS. Nguyễn Ngọc Minh
Nhóm 10 : 1. Nguyễn Xuân Đức
2. Vương Bảo Trung
3. Hà Minh Phú
4. Trần Bích Phương
Lớp : M12CQDT02-B
Hà Nội-Tháng 4/2013
1
MỤC LỤC
2
BIẾN ĐỔI FOURIER NHANH
1. Mở đầu
Lợi ích của xử lý số tín hiệu càng ngày càng được khẳng định rõ ràng. Nó được ứng
dụng ở nhiều dạng ngày càng khác nhau với những hiệu quả to lớn đặc biệt trong các lĩnh
vực thông tin, truyền dẫn, nhận dạng,… Ngày nay xử lý tín hiệu đã trở thành một ngành
khoa học chứ không phải là một môn học. Với mức độ phát triển ngày càng cao về cơ
bản, về các phương pháp và về khả năng ứng dụng nó đã lôi cuốn được các kỹ sư, các nhà
vật lý cũng như các nhà toán học dồn hết tâm lực để nghiên cứu nó.
Trong lĩnh vực xử lý số tín hiệu, biển đổi Fourier chiếm một vị trí hàng đầu nhờ sự tồn
tại các thuật toán hiệu quả biến đổi Fourier rời rạc đóng một vai trò rất quan trọng trong
xử lý số tín hiệu.
Từ khi Cooley phát hiện ra thuật toán tính nhanh biến đổi Fourier rời rạc vào năm
1965 (người ta quen gọi là biến đổi Fourier, tiếng Anh là Fast Fourier Transform viết tắt
là FFT), các thuật toán này càng ngày càng khẳng định vai trò của mình trong xử lý số tín
hiệu.
Tầm quan trọng của FFT là rất lớn vì những lý do sau đây:


- FFT đã nâng cao tốc độ, độ mềm dẻo, độ chính xác của xử lý số tín hiệu.
- FFT đã mở ra một lĩnh vực ứng dụng rất rộng lớn của phân tích phổ: Viễn thông,
thiên văn, chẩn đoán y học…
- FFT đã khơi lại lợi ích của nhiều ngành toán học mà trước đây người ta chưa khai
thác hết.
- FFT đã đặt nền móng cho việc tính toán nhanh các biến đổi khác như: Biến đổi
Walsh, biến đổi Hadamard, biển đổi Haar, biển đổi Wavelet.
2. Bản chất của biến đổi Fourier rời rạc (DFT)
2.1 Đánh giá cách tính trực tiếp DFT
Trong nhiều tài liệu chúng ta đã nghiên cứu khá chi tiết biến đổi Fourier rời rạc, bây giờ
chúng ta sẽ đánh giá hiệu quả của cách tính trực tiếp thông qua việc tính số lượng phép
tính cần thực hiện.Chúng ta đã có cặp biến đổi Fourier rời rạc sau đây:
1
0
( ) 0 1
0
( ) [ ( )]=
N
kn
N
n
x n W k N
X k DFT x n

=
≤ ≤ −



=




2.1
3
1
0
1
( ) 0 1
0
( ) D [X(k)]=
N
kn
N
k
X k W n N
N
x n I FT


=
≤ ≤ −



=



2.2

Theo các biểu thức (1.1) và (1.2) ở trên chúng ta có những nhận xét sau đây:
- x(n) và X(k) là phức (về tổng quát)
- Cả hai biểu thức trên chỉ khác nhau bởi một hệ số nhân tỷ lệ 1/N và dấu của hàm
mũ W
N
.
Để thấy rõ điều này chúng ta thử xây dựng thủ tục tính trực tiếp DFT ngược như sau:
*
1 1
*
0 0
1 1
( ) ( ) ( )
N N
kn kn
N N
k k
x n X k W X k W
N N
− −

= =
 
= =
 
 
∑ ∑
2.3
(*: là dấu hiệu liên hợp phức) dẫn đến:
1

* *
0
. ( ) ( )
N
kn
N
k
N x n X k W

=
=

2.4
So sánh hai biểu thức (1.1) và (1.3) thấy rằng chúng gần như giống nhau. Như thế
ta có thể thấy rằng các thuật toán FFT được sử dụng cho cả biến đổi Fourier rời rạc thuận.
Sau đây chúng ta tiến hành nghiên cứu hiệu quả của cách tính trực tiếp DFT thuận thông
qua việc tính số lượng phép nhân và cộng phức và thực.
- Tính toán số lượng phép nhân và cộng phức
Nhìn vào biểu thức (10.2.1.1) ta thấy ngay rằng đối với mỗi giá trị của k, cách tính
trực tiếp DFT phải thực hiện N phép nhân phức và N - 1 phép cộng phức. Nhưng k lấy N
giá trị từ 0 đến N – 1:
X(0), X(1),…,X(N-1)
Vậy cách tính trực tiếp DFT phải thực hiện: N
2
phép nhân phức và N(N-1) phép cộng
phức (khi
- Tính toán số lượng phép nhân và cộng số thực
Tổng quát ta thấy rằng x(n) là phức và là phức
Vậy ta có thể viết DFT như sau:
4

2.5
Từ đây ta thấy rằng số lượng phép nhân và phép cộng số thực sẽ được tính như sau:
- phép nhân số thực
- N [4(N-1)+3]=N(4N-1) phép cộng số thực khi
Nhận xét:
- Việc tính toán trực tiếp N mẫu của X(k)
N
đòi hỏi số lượng các phép toán cỡ N
2
phép
- Khi N rất lớn thì N
2
sẽ là con số quá lớn như vậy thời gian tính toán sẽ quá dài và
dung lượng nhớ của máy tính sẽ phải rất lớn. Ta thấy rằng phải tìm ra các phương
pháp tính nhanh DFT thì ta mới có thể sử dụng DFT một cách hiệu quả trong quá
trình xử lý tín hiệu.
2.2. Các tính chất của
Hầu như tất cả các phương pháp tính DFT một cách hiệu quả đều phải dựa trên hai
tính chất của , đó là tính tuần hoàn và tính đối xứng.
Sau đây chúng ta sẽ xét hai tính chất này:
• Tính tuần hoàn
' ' '
( ) 'kn k n iN k n
N N N
W W W
+
= =
2.6
(Hoặc ta có thể viết: theo modulo N)
• Tính đối xứng

'' '' '' ''
' '' '' '' ''
( )
' *
1
( )
kn N k n N k n
N N N N
k n k n k n
N N N
W W W W
W W W
− −

= = =
= =
2.7
Nhận xét:
- Tất cả các thuật toán tính nhanh DFT đều dựa trên cùng một nguyên tắc là phân
việc tính toán DFT của một dãy có chiều dài N thành nhiều DFT có chiều dài nhỏ
hơn bằng cách khai thác các tính chất đối xứng và tính chất tuần hoàn của hàm mũ
phức .
- Việc đưa nguyên tắc này vào tính DFT sẽ dẫn đến một số phương pháp khác nhau
mà hiệu quả của các phương pháp đó có thể so sánh với nhau được.
5
3. Biến đổi Fourier nhanh phân thời gian (FFT)
3.1 Định nghĩa
Thuật toán tính nhanh biến đổi Fourier rời rạc dựa trên việc phân dãy x(n) thành
các dãy con có chiều dài ngắn hơn được gọi là thuật toán biến đổi Fourier nhanh phân
thời gian. Để minh họa thuật toán này trước hết chúng ta nghiên cứu trường hợp đặc biệt

mà (N là chiều dài của dãy x(n)).
3.2 Thuật toán FFT phân tần thời gian trong truờng hợp
a. Thủ tục tổng quát
Nếu , thì N sẽ là một số nguyên chẵn.
Vậy chúng ta có thể phân chia dãy x(n)
N
thành hai dãy có chiều dài N/2 là hai dãy x(n)
N
như sau:
- Dãy thứ nhất được hình thành bởi các giá trị chẵn,
- Dãy thứ hai được hình thành bởi các giá trị lẻ.
Về mặt toán học, ta có thể viết hai dãy này như sau:
2 2
(2 ) à (2 1)
N N
x r v x r
+
Vậy ta có thể viết:
2.8
Chúng ta đặt:
6
2.9
Ở đây:
(2 ) ( )
(2 1) ( )
x r g r
x r h r
=
+ =
2.10

Hoặc ta có thể viết:
2.11
Ở đây:
- là biến đổi Fourier rời rạc có chiều dài
- là biến đổi Fourier rời rạc có chiều dài
Và:
- là biến đổi Fourier rời rạc của các mẫu lẻ của x(n)
- là biến đổi Fourier rời rạc của các mẫu chẵn của x(n)
Nhận xét
+ Như vậy các phép toán được tiến hành với và chỉ trong khoảng , tức là:
7
2.12
+ Như thế thực chất ta đã phân một DFT có chiều dài N thành hai DFT có chiều dài . Để
thuận lợi cho việc theo dõi ta có ký hiệu sau đây:
(DFT)
N
: là biến đổi Fourier rời rạc có chiều dài N.
(DFT)
N
: là biến đổi Fourier rời rạc có chiều dài
Ví dụ 1
Giả sử cho chiều dài cửa DFT N = 8, hãy trình bày thuật toán FFT phân thời gian để phân
đôi DFT này. Sau đó dùng đồ hình có hướng để minh họa thuật toán này cho rõ ràng hơn.
Giải
Áp dụng biểu thức (2.10) trong trường hợp N = 8 chúng ta có thể viết:
8
Chú ý rằng nếu thay các giá trị của k từ 0 đến 7 vào biểu thức (2.10) ta sẽ thấy xuất
hiện các giá trị G(4)
4
, G(5)

4
, G(6)
4,
G(7)
4
, H(4)
4
, H(5)
4
, H(6)
4
, H(7)
4
, nhưng các giá trị này
không tồn tại vì chiều dài của G(k)
4
và H(k)
4
chỉ từ 0 đến 3. Vậy các giá trị sẽ vòng vào
trong khoảng từ 0 đến 3 như sau:
Đồ hình có hướng để minh họa thuật toán này được cho trên hình sau đây.
9
Hình 1:
Bây giờ chúng ta sẽ đánh giá hiệu quả của phép phân một DFT có chiều dài là N
thành DFT có chiều dài là N/2. Việc đánh giá hiệu quả này dựa trên cơ sở việc so sánh số
lượng các phép tính số học cần phải thực hiện của cách tính trực tiếp (DFT)
N
và phân
thành hai (DFT)
N/2

. Chúng ta đã biết rằng để tính toán N mẫu của x(k)
N
đòi hỏi số lượng
các phép toán có N
2
phép tính phức (tức là có N
2
phép nhân phức và N
2
phép cộng
phức).Như vậy để tính chúng ta phải đòi hỏi phép nhân phức và phép cộng phức. Để tính
toán , tương tự chúng ta cũng phải đòi hỏi phép tính phức. Để kết hợp và , theo biểu thức
(10.3.2.1), chúng ta phải thực hiện phép toán nhân phức (k chạy từ 0 đến N-1), tức là
chúng ta cần phải thực hiện N phép nhân phức. Ngoài ra chúng ta còn cần phải thực hiện
phép toán: , tức là đòi hỏi N phép cộng phức. Tóm lại để tính toán x(k)
N
bằng cách phân
thành và , theo biểu thức (2.10) chúng ta cần số lượng các phép tính phức như sau:
- phép phân thức
- phép cộng phức
Cuối cùng ta có thể nói rằng để tính toán N mẫu của x(k)
N
thì số lượng phép tính phức cần
thực hiện là phép.
Ví dụ 2
Hãy tính hiệu quả của FFT với N = 8. Khi phân (DFT)
8
thành hai (DFT)
4.
Giải

10
Nếu tính trực tiếp x(k)
8
ta cần thực hiện số phép tính là N
2
phép:
N = 8 N
2
= 64 phép.
Nếu phân thành x(k)
8
thành G(k)
4
và H(k)
4
thì số phép tính cần thực hiện là phép:
2 2
8 2( ) 8 2(4) 40
2
N
N N
= ⇒ + = + =
Vậy số phép tính tiết kiệm được là: 64-40 = 24 phép
Nhận xét:
+ Khi N rất lớn thì , tức là khi N rất lớn thì số phép toán cần thực hiện sẽ giảm rõ rệt.
+ Bởi vì Để nâng cao hiệu quả hơn nữa, chúng ta lại chia thành hai .
Ví dụ 3
Cho dãy x(n) có dạng như trên hình 2
Hình 2:
Hãy minh họa cách tính X(k)

8
bằng cách phân x(n)
8
thành hai dãy g(r)
4
và h(r)
4
.
Giải
Ta biết rằng: g(r) = x(2r)
h(r) = x(2r + 1)
11
Vậy từ hình 2 ta có dạng của g(r) và h(r) cho trên hình 3 như sau:
Hình 3:
Từ đây ta tính được được G(r)
4
và H(k)
4
như sau:
12
Từ đây ta tính được X(k)
8
như sau:
2.13
Vậy ta có giá trị của X(k)
8
như sau:
13
Đồ thị của ; , và được cho trên hình sau
14

Hình 4:
Tiếp tục bằng cách tương tự, chúng ta lại chia dãy và thành dãy có chiều dài là , và
chúng ta có:
2.14
Chúng ta đặt:
2.15
Vậy được tính như sau:
2.16
Hoặc:
15
2.17
Ta thấy rằng , vậy ta có thể viết:
2.18
Hoặc:
2.19
Đối với , ta cũng có:
2.20
Chúng ta đặt:
16
2.21
Vậy , được tính như sau:
2.22
Hoặc:
2.23
Ví dụ 4
Chúng ta quay lại ví dụ 1 với DFT có chiều dài N = 8. Hãy dùng graphe có hướng để
minh họa thuật toán tính G(h)
4
và H(k)
4

, sau đó kết hợp để thành thủ tục tính X(k)
8
.
Giải
Thuật toán tính G(h)
4
và H(k)
4
được minh họa ở hình 5 thông qua graphe có hướng dạng
cánh bướm.
17
Hình 5:
Bằng cách tương tự chúng ta lại tiếp tục phân các dãy a(l)
N
; b(l)
N
; c(l)
N
và thànhcác dãy
có chiều dài là ,…, và quá trình cứ thế tiếp tục cho đến khi nào chỉ còn tính DFT hai
điểm.
Ví dụ 5
Chúng ta quay lại ví dụ 4 với DFT có chiều dài N = 8.
Hãy dùng graphe có hướng dạng cánh bướm để minh họa thuật toán tính A(k)
2
, B(k)
2
,
C(k)
2

, D(k)
2
, sau đó kết hợp lại để minh họa toàn bộ thuật toán tính X(k)
8
.
18
Hình 6:
Giải
Vì , nên đây là bước cuối dùng để xây dựng thuật toán FFT với chiều dài N = 8. Tương tự
như các ví dụ trên ta có cách tính A(k)
2
như sau:
Vì nên ta có thể viết một cách đối xứng như sau:
Nhưng
Vậy có thể viết:
Từ đây ta thu được graphe có hướng dạng cánh bướm được minh họa như trên hình 7:
Hình 7:
Bằng cách tương tự chúng ta có thể tính và vẽ graphe có hướng dạng cánh bướm đối với
B(k)
2
, C(k)
2
, và D(k)
2
. Kết hợp các giai đoạn tính A(k)
2
, B(k)
2
, C(k)
2

và D(k)
2
rồi đến
G(k)
4
và H(k)
4
chúng ta thu được kết quả cuối cùng của toàn bộ thuật toán tính X(k)
8
được minh họa bằng graphe có hướng dạng cánh bướm được cho trên hình 6.
b. Tính toán hiệu quả
19
Trong phần trên chúng ta biết rằng nếu chúng ta tính toán trực tiếp dãy X(k)
N
theo định
nghĩa của DFT thì để tính toán tất cả N điểm của DFT chúng ta cần phải đòi hỏi số phép
tính cỡ N
2
. Còn nếu chúng ta thực hiện tính DFT gián tiếp theo thuật toán FFT thì chúng
ta sẽ thu được hiệu quả rất cao, cụ thể chúng ta sẽ đánh giá hiệu quả theo số phép tính cần
phải thực hiện để tính N điểm của X(k)
8
.
Bước đầu tiên chúng ta phân DFT
N
thành , khi đó số phép tính (nhân hoặc cộng) đòi hỏi
phải thực hiện là:
2.24
Bước thứ hai chúng ta phân mỗi thành hai , khi đó số phép tính đòi hỏi phải thực hiện là:
2.25

Bởi vì để tính mỗi trực tiếp, yêu cầu số phép tính là , còn để tính mỗi gián tiếp qua hai
đòi hỏi số phép tính là: .
Bước thứ ba chúng ta lại phân mỗi thành hai , khi đó số phép tính đòi hỏi phải thực hiện
là:
2.26
Quá trình cứ như thế tiếp tục đến bước thứ thì số phép tính đòi hỏi phải thực hiện là:
2.27
Còn đến bước thứ thì số phép tính đòi hỏi phải thực hiện là:
20
2.28
Vậy ở bước thứ thì thực chất là phân các DFT
2
thành hai DFT
1
và DFT
1
lại chính là x(n)
tức là:
2.29
Như thế không cần phải tính bước này, và chúng ta có thể kết luận như sau:
Sau lần phân hạch, việc tính gián tiếp dãy X(k)
N
sẽ đòi hỏi số phép tính là: phép, mà:
Vậy số phép tính khi dùng thuật toán FFT sẽ chỉ còn là:
Ví dụ 6
Giả sử chúng ta cần phải tính DFT với chiều dài N = 8 = 2
3
+ Hãy tính số phép tính cần phải thực hiện khi tính trực tiếp DFT.
+ Hãy tính số phép tính cần phải thực hiện qua từng giai đoạn khi tính gián tiếp qua thuật
toán FFT phân thời gian.

Giải
+ Tính trực tiếp: Số phép tính cần phải thực hiện là:
+ Tính gián tiếp qua thuật toán FFT:
- Giai đoạn thứ nhất: Số phép tính cần phải thực hiện là:
- Giai đoạn hai: số phép tính cần phải thực hiện là:
- Giai đoạn thứ ba: là giai đoạn cuối cùng nên khi phân DFT
2
thành hai DFT
1
, mà ta
lại không cần phải tính DFT
1
vậy số phép tính cần phải thực hiện là:
c. Cải thiện thuật toán
Chúng ta chú ý rằng theo thuật toán mà ta đã trình bày và nhất là theo hình 6 thì cứ
mỗi một giai đoạn tính toán chúng ta lại có cùng một thuật toán dạng cánh bướm. Giả sử
chúng ta có hai giai đoạn tính toán kế tiếp nhau i và (i+1), thuật toán cánh bướm của các
giai đoạn này được minh họa trên hình 8:
21
Hình 8:
Theo hình 6, ta thấy rằng giữa hai giai đoạn i và (i+1) chúng ta có thể viết như sau:
2.30
Nhưng ta có:
2.31
Vậy ta có thể viết lại biểu thức (10.3.2.9) dưới dạng khác sau đây:
2.32
Như vậy theo biểu thức (2.32) ở trên chúng ta có thể cải thiện thuật toán cánh bướm cho
trên hình 10.3.2.10 để mô tả hai giai đoạn tính toán kế tiếp nhau i và (i+1). Việc cải thiện
này được minh họa trên hình 8.
Nhận xét:

+ Theo biểu thức (2.30) và hình vẽ (2.32) ta thấy rằng việc cải thiện này sẽ làm giảm số
lượng phép nhân phức, cụ thể là với chỉ một phép nhân chúng ta có thể sử dụng để tính
đồng thời hai giá trị X
i+1
(p) và X
i+1
(q), vậy số phép nhân sẽ giảm đi hai lần, còn số lượng
phép cộng thì vẫn giữ nguyên.
+ Vậy để tính được hết tất cả các giá trị của X(k)
N
thì chúng ta cần phải thực hiện số
lượng phép tính như sau
Ví dụ 7
22
Chúng ta quay lại Ví dụ 5 với DFT có chiều dài N = 8.
Hãy dùng biểu thức 2.32 và hình vẽ 8 để vẽ lại graphe có hướng dạng cánh bướm cho trên
hình 6.
Giải
Áp dụng tính chất: ta có với N = 8 như sau:
Sau đó thế vào giá trị trên hình 6, ta thu được graphe có hướng dạng cánh bướm đã được
cải thiện, graphe này được minh họa trên hình 2,33.
Nhận xét
Nhìn trên hình 2.30 và hình 2.32 ta thấy rằng dãy vào x(n)
N
được sắp xếp theo thứ tự của
mã nhị phân đảo, còn dãy ra x(k)
N
được sắp xếp theo thứ tự của mã nhị phân bình thường.
Ví dụ 8
Hãy minh họa việc sắp xếp thứ tự của dãy x(n)

N
theo mã nhị phân đảo và dãy x(k)
N
theo
mã nhị phân bình thường trong trường hợp N = 8.
Giải
Vì N = 8 = 2
3
, vậy ta phải dùng 3 bit để mã hóa.
Bảng 10.3.2.1 sẽ mô tả mã nhị phân đảo và mã nhị phân bình thường dùng để sắp xếp thứ
tự của dãy x(n)
N
và x(k)
N
.
3.3. Các dạng khác của thuật toán
Sau đây chúng ta sẽ trình bày một số thuật toán là biến dạng của thuật toán FFT phân thời
gian.
a. Thuật toán Cooley
Ở đây Cooley đã sử các khái niệm đại số nhị phân để biểu diễn các dãy x(n)
N
và x(k)
N
.
Như vậy về mặt bản chất của thuật toán không khác gì thuật toán FFT phân thời gian đã
được trình bày ở mục trên.
Chúng ta cũng xét trường hợp . Vậy chúng ta có thể biểu diễn n và k theo mã nhị phân và
thập phân như sau:
Biểu diễn số n:
Biểu diễn số k:

Từ đây dẫn đến việc biểu diễn các dãy x(n)
N
và x(k)
N
như sau:
Vậy biểu thức của DFT N điểm có thể viết như sau:
Bây giờ chúng ta triển khai tích kn trong biểu thức theo n, cách khai triển như sau:
Từ đầu tiên của sẽ là với
Từ thứ hai của sẽ là với .
………………………………………………………………………
Từ cuối cùng của sẽ là với:
Theo cách triển khai trên thì biểu thức của DFT điểm sẽ được viết lại như sau:
Biểu thức (10.3.3.3) ở trên thể hiện giai đoạn trung gian để tính được các điểm của
23
giai đoạn này có thể viết như sau:
Như vậy ta thấy rằng:
Giai đoạn đầu tiên (i=0) chính là dãy
Giai đoạn cuối dùng ( chính là dãy :
+Cải thiện thuật toán Cooley
Cũng giống như các biểu thức (2.30) và (2.32) qua mỗi giai đoạn i và (i+1) ta có thể viết:
Theo hình (7) và (8) chúng ta có đồ hình dạng cánh bướm của thuật toán Cooley được
minh họa trên hình 9.
b. Thuật toán Singleton
Chúng ta thấy rằng trong thuật toán FFT, đồ hình dạng cánh bướm ở từng giai đoạn là
khác nhau. Singleton đã xáo trộn một cách hợp lý để đưa đồ hình dạng cánh bướm ở từng
giai đoạn là tuần hoàn như nhau.
Xuất phát từ đồ hình dạng cánh bướm cho trên hình 10 chúng ta có thuật toán Singleton
cho trên hình 11.
3.4. Thuật toán FFT phân thời gian trong trường hợp
a. Thủ tục tổng quát

Nếu thì chúng ta có thể phân dãy x(n)
N
thành B dãy có chiều dài là , tức là thành các dãy
như sau:
3.1
Vậy ta có thể viết x(n) dưới dạng sau đây:
3.2
và X(k)
N
có thể viết như sau:
24
3.3
3.4
Thay x
i
(n) vào và đổi biến số ta có:
Đặt:
3.5
Và trong miền k ta cũng đặt:
25

×