Tải bản đầy đủ (.doc) (4 trang)

xu ly so tin hieu SO LUONG DUY KHANH

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 (123.81 KB, 4 trang )

4.5 các thuật toán tính DFT nhanh (FFT)
Tính trực tiếp DFT khi độ dài N lớn mất nhiều thời gian, ngay cả khi dùng máy tính. Để rút ngắn thời gian tính
DFT, người ta xây dựng các thuật toán tính DFT nhanh, chúng được viết tắt theo tiếng Anh là FFT (Fast Fourier
Transform). Có rất nhiều thuật toán FFT khác nhau, do hạn chế về thời lượng nên ở đây chỉ trình bầy thuật toán FFT phân
chia theo thời gian.
4.5.1 Cơ sở của thuật toán FFT phân chia theo thời gian
Cơ sở của thuật toán FFT phân chia theo thời gian là chia nhỏ dãy x(n)
N
có độ dài N thành hai dãy có độ dài nhỏ
hơn bằng cách phân tích N thành tích của hai thừa số nguyên :
N = M. L [4.5-1]
Nếu độ dài N nhỏ hơn tích số đã chọn thì có thể thêm vào dãy x(n)
N
các mẫu có giá trị 0 để tăng N.
Bằng cách như vậy, có thể chuyển việc lưu giữ trong bộ nhớ dãy x(n)
N
có N phần tử (hình 4.19), thành mảng x(m,
l) có M cột và L hàng với M. L = N phần tử. Nếu xắp xếp dãy x(n)
N
trong mảng x(m, l) theo cột như trên hình 4.20 , thì chỉ
số n tương ứng của dãy x(n)
N
sẽ là :
n = l + mL [4.5-2]
n = 0 1 2 ...... (N –1)
x[0] x[1] x[2] ...... x[N -1]
Hình 4.19 : Lưu giữ trong bộ nhớ dãy x(n)
N
.
m = 0 1 2
......


(M –1)
l = 0
x[0] x[L] x[2L] ...... x[(M-1)L]
1
x[1] x[L+1] x[2L+1] ...... x[(M-1) (L+1)]
2
x[2] x[L+2] x[2L +2] ...... x[(M-1) (L+2)]
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
(L-1)
x[L -1] x[2L -1] x[3L -1] ...... x[ML –1]
Hình 4.20 : Mảng x(m, l) xắp xếp theo cột : n = l + mL.
Tương tự như vậy, cũng lưu giữ dãy X(k)
N

bằng mảng X(p, q) , có M cột và L hàng với M. L = N phần tử. Khi dãy
x(n)
N
đã được xắp xếp trong mảng x(m, l) theo cột như trên hình 4.20, thì dãy X(k)
N
phải được xắp xếp trong mảng X(p, q)
theo hàng như trên hình 4.21, khi đó chỉ số k tương ứng của dãy X(k)
N
là :
k = pM + q [4.5-3]
p = 0 1 2
......
(M–1)
q = 0
X[0]
X[1] X[2]
......
X[M-1]
1
X[M] X[M+1] X[M+2]
......
X[2M-1]
2
X[2M] X[2M+1] X[2M+2]
......
X[3M-1]
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
(L-1)
X[(L-1)M] X[(L-1) (M+1)] X[(L-1) (M+2)]
......
X[LM-1]
Hình 4.21 : Mảng X(p, q) xắp xếp theo hàng : k = pM + q.

Do đó biểu thức của DFT có thể được biểu diễn như một tổng đúp trên các phần tử của hai mảng trên :
∑ ∑

=

=
++−
=
1
0

1
0
).).((
1
).,(),(
M
m
L
l
mLlqpMj
emlxqp
X
ω
[4.5-4]
Thay
N
π
ω
2
1
=
, hệ số pha được tính cụ thể như sau :
NNN
M
N
M
N
jqmLjqlLjpmjplmLlqpMj
eeeee
πππππ

22222
.....).).((
...
−−−−++−
=
178
Trong đó :
l
L
jp
jpl
ee
N
M
..
..
2
2
π
π


=
1
2.
...
22
===

−−

π
ππ
jpm
jpmLjpm
eee
N
N
N
M
mjq
jqmL
M
N
ee
..
.
2
2
π
π


=
Vậy :
l
L
jp
mjq
ljqmLlqpMj
eeee

M
NN
..
..
..).).((
2
2
22
..
π
π
ππ


−++−
=
Do đó có thể viết lại [4.5-4] dưới dạng :
∑ ∑

=


=



















=
1
0
..
1
0
..
..
2
2
2
.).,(.),(
L
l
l
L
jp
m
mjq

ljq
eemlxeqp
M
M
N
X
π
π
π
[4.5-5]
Theo biểu thức [4.5-5] , thay vì phải tính DFT N điểm, cần tính các DFT M và L điểm, các bước thực hiện thuật
toán FFT trên như sau :
1. Chuyển dãy x(n)
N
thành mảng x(m, l) xắp xếp theo cột, với kích thước mảng là M. L = N.
2. Tính L lần DFT M điểm cho các hàng x(m, l) , với l = 0 ÷ (L -1) để nhận được mảng F(l, q) :


=

=
1
0
.
2
).,(),(
M
M
m
mjq

emlxql
F
π
[4.5-6]
3. Tính các phần tử của mảng G(l, q) :

ljq
N
eqlql
FG
..
2
).,(),(
π

=
[4.5-7]
4. Tính M lần DFT L điểm cho các cột G(l, q), với q = 0 ÷ (M -1) để nhận được mảng X(p, q) :


=

=
1
0
..
2
).,(),(
L
l

l
L
jp
eqlqp
GX
π
[4.5-8]
5. Chuyển mảng X(p, q) thành dãy X(k)
N
xắp xếp theo hàng.
Thoạt trông có cảm giác tính DFT theo thuật toán FFT như trên là phức tạp hơn. Tuy nhiên, hiệu quả của FFT sẽ
chỉ thấy được khi so sánh số lượng các phép tính cần thực hiện. Chẳng hạn, so sánh trên số lượng các phép tính nhân và
cộng số thực. Bước 2 cần tính L lần DFT M điểm, do đó cần thực hiện 2.L.M
2
phép nhân số thực , và 2.L.M.(M - 1) phép
cộng số thực. Bước 3 cần thực hiện 2.L.M phép nhân số thực. Bước 4 cần phải tính M lần DFT L điểm, do đó cần thực hiện
2.M.L
2
phép nhân số thực , và 2.M.L.(L - 1) phép cộng số thực. Tổng cộng số lượng phép nhân và phép cộng của thuật toán
FFT phân chia theo thời gian là :
- Phép nhân : 2.L.M
2
+ 2.L.M + 2.M.L
2
= 2.N.

(M + L + 1)
- Phép cộng : 2.L.M.(M - 1) + 2.M.L.(L - 1) = 2.N.

(M + L - 2)

Như vậy, so với tính trực tiếp DFT thì tính theo thuật toán FFT đã giảm số phép nhân từ 2.N
2
xuống còn 2.N.

(M +
L + 1), và số phép cộng thì giảm từ 2.N.

(N - 1) xuống còn 2.N.

(M + L - 2). Để thấy rõ hơn, hãy xem so sánh số lượng các
phép nhân trên bảng 4.19.
Bảng 4.19 : Số phép nhân khi tính trực tiếp DFT và tính theo FFT.
N
Số phép
nhân khi tính
trực tiếp
FFT với M = N/2 FFT với M = N/4
Số phép
nhân
So với tính
trực tiếp giảm
còn
Số phép
nhân
So với tính
trực tiếp giảm
còn
16 512 352 69 % 288 56 %
100 20000 10600 53 % 6.000 30 %
10000 200000000 100060000 50 % 50100000 25 %

Bảng 4.19 cho thấy, khi độ dài N tính DFT càng tăng thì khối lượng tính DFT theo thuật toán FFT càng giảm. Hơn
nữa, tính theo thuật toán FFT với M = N/4 thì khối lượng tính nhỏ hơn tính theo FFT với M = N/2. Tuy nhiên, khi N tăng rất
lớn, thì mức lợi về khối lượng tính không tăng lớn tương ứng.
Trên cơ sở của thuật toán FFT như trên, có thể tiếp tục phân chia thành các FFT nhỏ hơn, tức là tính FFT nhiều
lớp. Khi số lớp tăng lên thì mức lợi về khối lượng tính toán cũng tăng. Để phân chia FFT thành nhiều lớp thì phải phân
tích N thành tích của các thừa số nguyên tố dạng :
r
MMMMN
.......
321
=
Trong trường hợp
MMMMM
r
=====
.....
321
, thì ta có :
r
MN
=
Khi M = 2 người ta gọi là thuật toán FFT cơ số hai, khi M = 4 người ta gọi là thuật toán FFT cơ số bốn, chúng đều
có thể được thực hiện theo một lớp hoặc nhiều lớp.
Từ nguyên tắc đã được trình bầy ở trên, người ta xây dựng các thuật toán FFT cơ số hai phân chia theo thời gian,
thuật toán FFT cơ số bốn phân chia theo thời gian .... Mỗi thuật toán FFT cụ thể còn có những đặc điểm riêng khi đi sâu
nghiên cứu chúng.
Cũng theo nguyên tắc trên, nhưng thực hiện phân chia theo tần
số, người ta xây dựng các thuật toán FFT cơ số hai phân chia theo tần số, thuật toán FFT cơ số bốn phân chia theo tần số.
179
Có thể tham khảo sâu hơn về các thuật toán FFT phân chia theo thời gian và FFT phân chia theo tần số ở các tài

liệu tham khảo [6], [12].
4.5.2 Thực hiện thuật toán FFT phân chia theo thời gian
4.5.2a Thực hiện thuật toán FFT cơ số hai phân chia theo thời gian
Để thấy được trực quan thuật toán FFT cơ số hai, xét ví dụ sau.
Ví dụ 4.21 : Hãy tính DFT 16 điểm của dãy x(n)
10
bằng thuật toán FFT cơ số hai phân chia theo thời gian.
Giải : Để tính DFT 16 điểm, cần thêm 6 mẫu 0 vào cuối dãy x(n)
10
:
{ }
0000009876543210
)()()()()()()()()()( xxxxxxxxxx
Với M = N/2 = 16/2 = 8 thì L = 2 , nghĩa là mảng x(m, l) có 8 cột và 2 hàng.
- Bước một : Lưu giữ dãy x(n)
16
bằng mảng x(m, l) xắp xếp theo cột :






00097531
00086420
)()()()()(
)()()()()(
xxxxx
xxxxx
Khi chuyển sang chỉ số mảng hai chiều, nhận được mảng x(m, l) :







)()()()()()()()(
)()()()()()()()(
7,16,15,14,13,12,11,10,1
7,06,05,04,03,02,01,00,0
xxxxxxxx
xxxxxxxx
Mỗi hàng có ba phần tử ở cuối bằng 0, và hàng có chỉ số l = 0 là các mẫu chẵn x(2n)
16
, còn hàng có chỉ số l = 1 là
các mẫu lẻ x(2n+1)
16
- Bước hai : Tính hai DFT 8 điểm ứng với hai hàng và nhận được mảng F(l, q) :

=

=
7
0
.
5
4
.),(),(
00
m

mjq
emxq
F
π


=

=
7
0
.
5
4
.),(),(
11
m
mjq
emxq
F
π






)()()()()()()()(
)()()()()(),(),(),(
7,16,15,14,13,12,11,10,1

7,06,05,04,03,0201000
FFFFFFFF
FFFFFFFF
- Bước ba : Tính mảng
ljq
N
eqlql
FG
..
2
).,(),(
π

=
:






)()()()()()()()(
)()()()()(),(),(),(
7,16,15,14,13,12,11,10,1
7,06,05,04,03,0201000
GGGGGGGG
GGGGGGGG
- Bước bốn : Tính tám DFT 2 điểm ứng với tám cột của mảng G(l, q) và nhận được mảng X(p, q) :

=


=
1
0
..
2
).,(),(
l
ljp
eqlqp
GX
π
với q = 0 ÷ 7






)()()()()()()()(
)()()()()(),(),(),(
7,16,15,14,13,12,11,10,1
7,06,05,04,03,0201000
XXXXXXXX
XXXXXXXX
- Bước năm : Chuyển mảng X(p, q) thành dãy X(k)
N
xắp xếp theo hàng :







)()()()()()()()(
)()()()()()()()(
15141312111098
76543210
XXXXXXXX
XXXXXXXX
4.5.2b Thực hiện thuật toán FFT cơ số bốn phân chia theo thời gian
Để thấy được trực quan thuật toán FFT cơ số bốn, xét ví dụ sau.
Ví dụ 4.22 : Hãy tính DFT 16 điểm của dãy x(n)
10
bằng thuật toán FFT cơ số bốn phân chia theo thời gian.
Giải : Để tính , cần thêm 6 mẫu 0 vào cuối dãy x(n)
10
:
{ }
0000009876543210
)()()()()()()()()()( xxxxxxxxxx
180
Với M = N/4 = 16/4 = 4 thì L = 4 , mảng x(m, l) có 4 cột và 4 hàng.
- Bước một : Lưu giữ dãy x(n)
16
bằng mảng x(m, l) xắp xếp theo cột :















0073
0062
0951
0840
)()(
)()(
)()()(
)()()(
xx
xx
xxx
xxx
















)()()()(
)()()()(
)()()()(
)()()()(
3,32,31,30,3
3,22,21,20,2
3,12,11,10,1
3,02,01,00,0
xxxx
xxxx
xxxx
xxxx
Trong đó hai hàng đầu có một phần tử ở cuối bằng 0, hai hàng cuối có hai phần tử ở cuối bằng 0.
- Bước hai : Tính bốn DFT 4 điểm ứng với bốn hàng của mảng x(m, l) và nhận được mảng F(l, q) :

=

=
3
0
.
2
).,(),(

m
mjq
emlxql
F
π
với l = 0 ÷ 3
- Bước ba : Tính mảng
ljq
N
eqlql
FG
..
2
).,(),(
π

=
:















)()()()(
)()()()(
)()()()(
)()()()(
3,32,31,30,3
3,22,21,20,2
3,12,11,10,1
3,02,01,00,0
FFFF
FFFF
FFFF
FFFF















)()()()(

)()()()(
)()()()(
)()()()(
3,32,31,30,3
3,22,21,20,2
3,12,11,10,1
3,02,01,00,0
GGGG
GGGG
GGGG
GGGG
- Bước bốn : Tính bốn DFT 4 điểm ứng với bốn cột của mảng G(l, q) và nhận được mảng X(p, q) :

=

=
3
0
..
2
).,(),(
l
ljp
eqlqp
GX
π
với q = 0 ÷ 3
- Bước năm : Chuyển mảng X(p, q) thành dãy X(k)
N
xắp xếp theo hàng :

181

×