dce
2011
Chương 6
Giải thuật cho biến đổi Fourier
(FFT)
BK
TP.HCM
©2011, TS. Đinh Đ ức Anh Vũ
dce
2011
Nội dung
Tính
DFT & IDFT
Tính
trực tiếp
Biến đổi
WN
Lọc
tuyến tính
Chia-Trị
Cơ số 2
Cơ số 4
DSP – Giải thuật cho Biến đổi Fourier
Tách cơ số
Goertzel
Chirp-z
©2011, Đinh Đức Anh Vũ
2
dce
2011
DFT & IDFT
•
Tính DFT: xác định chuỗi N giá trị phức {X(k)} khi biết trước chuỗi {x(n)}
chiều dài N
N −1
DFT
X (k ) = ∑ x(n)WNkn
0 ≤ k ≤ N −1
IDFT
1
x ( n) =
N
0 ≤ n ≤ N −1
n =0
N −1
− kn
X
k
W
(
)
∑
N
k =0
– Giải thuật tính DFT cũng được áp dụng cho việc tính IDFT
•
Tính trực tiếp
– N2 phép nhân phức
– N(N-1) phép cộng phức
→ Độ phức tạp : O(N2)
•
Biến đổi WN
–
–
–
–
2N2 phép tính lượng giác
4N2 phép nhân số thực
4N(N-1) phép cộng số thực
Một số phép toán chỉ số
và địa chỉ để nạp x(n)
DSP – Giải thuật cho Biến đổi Fourier
N −1
2πkn
2πkn
X R (k ) = ∑ [ xR (n) cos( N ) + xI (n) sin( N )]
n =0
N −1
X (k ) = − [ x (n) sin( 2πkn ) − x (n) cos( 2πkn )]
∑
R
I
N
N
I
n =0
Giải thuật tính DFT tối ưu mỗi phép toán
theo những cách khác nhau
Doi xung
WNk + N /2 = −WNk
Tuan hoan
WNk + N = WNk
©2011, Đinh Đức Anh Vũ
3
dce
2011
Phương pháp chia-trị (1)
•
•
Nguyên tắc: phân rã nhỏ việc tính DFT N điểm thành việc tính các DFT kích thước
nhỏ hơn → các giải thuật FFT
Phương pháp
– Giả sử N=L.M
– Lưu trữ x(n) vào mảng 2 chiều L × M (l: chỉ số hàng, m: chỉ số cột)
n→
0
1
2
…
N-1
x(0)
x(1)
x(2)
…
x(N-1)
– Cách lưu trữ
• Theo dòng n = Ml + m
• Theo cột n = l + mL
l
m
0
1
…
M-1
0
x(0,0)
x(0,1)
…
x(0,M-1)
1
x(1,0)
x(1,1)
…
x(1,M-1)
2
x(2,0)
x(2,1)
…
x(2,M-1)
…
…
…
…
x(L-1,0)
x(L-1,1)
…
x(L-1,M-1)
L-1
– Tương tự, các giá trị DFT X(k) tính được cũng sẽ được lưu trữ trong ma trận L × M
(p: chỉ số hàng, q: chỉ số cột)
• Theo dòng k = Mp + q
• Theo cột k = p + qL
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
4
dce
2011
Phương pháp chia-trị (2)
N −1
X (k ) = ∑ x(n)WNkn
0 ≤ k ≤ N −1
n =0
Với:
M −1 L −1
x(n)
X(k)
X ( p, q ) = ∑∑ x(l , m)WN( Mp + q )( mL +l )
: theo cột
: theo hàng
m =0 l =0
WN( Mp + q )( mL +l ) = WNMLmpWNmLqWNMplWNlq
lq M −1
mq
X ( p, q ) = ∑ WN ∑ x(l , m)WM WLlp
l =0
m =0
L −1
1
2
3
DFT M điểm
F(l,q)
G(l,q)
DFT L điểm
X(p,q)
DSP – Giải thuật cho Biến đổi Fourier
WNNmp = 1
WNmqL = WNmq/ L = WMmq
WNMpl = WNpl/ M = WLpl
(1): Tính L DFT M điểm
Nhân phức : LM2
Cộng phức : LM(M-1)
(2): Tính G(l,q)
Nhân phức : LM
(3): Tính X(p,q)
Nhân phức : ML2
Cộng phức : ML(L-1)
Độ phức tạp
Nhân phức : N(M+L+1)
Cộng phức : N(M+L-2)
©2011, Đinh Đức Anh Vũ
5
dce
2011
Phương pháp chia-trị (3)
•
Hiệu quả
PP tính trực tiếp
• Nhân phức : N2
• Cộng phức : N(N-1)
PP chia-trị
• Nhân phức : N(M+L+1)
• Cộng phức : N(M+L-2)
N=1000 → L=2, M=500
106 nhân phức → 503,000 (~ N/2)
•
PP chia-trị rất hiệu quả khi
•
Giải thuật
– Phân rã nhỏ hơn đến (v-1) lần
n = l + mL
k = Mp + q
N= r1r2r3…rv
n = Ml + m
k = qL + p
Giải thuật 2
Giải thuật 1
1.
2.
3.
4.
5.
Lưu trữ t/h theo cột
Tính DFT M điểm của mỗi hàng
Nhân ma trận kết quả với hệ số pha WNlq
Tính DFT L điểm của mỗi cột
Đọc ma trận kết quả theo hàng
DSP – Giải thuật cho Biến đổi Fourier
1.
2.
3.
4.
5.
Lưu trữ t/h theo hàng
Tính DFT L điểm của mỗi cột
Nhân ma trận kết quả với hệ số pha WNpm
Tính DFT M điểm của mỗi hàng
Đọc ma trận kết quả theo cột
©2011, Đinh Đức Anh Vũ
6
dce
2011
Phương pháp chia-trị (4)
•
Mô hình tính toán DFT 6 điểm thông qua việc tính DFT 3 điểm và DFT 2 điểm
W6lq
X(2)
x(2)x(5)
X(5)
X(1)
DFT 2 điểm
x(4)
x(0)x(3)
x(1)
•
X(4)
X(0)
X(3)
Giải thuật tính FFT cơ số 2
– Nếu N = r1r2r3…rv = rv → mô hình tính DFT có cấu trúc đều (chỉ dùng 1 DFT r điểm)
– r = 2 → FFT cơ số 2
– Chọn M = N/2 và L = 2
x(0)
Giải thuật
chia theo thời gian
m=0
x(1)
x(2)
m=1
…
…
…
x(N-1)
m=M-1
l=0
x(0)
x(2)
…
x(N-2)
f1(2n)
l=1
x(1)
x(3)
…
x(N-1)
f2(2n+1)
DSP – Giải thuật cho Biến đổi Fourier
…
n= 0,1, …, N/2-1
©2011, Đinh Đức Anh Vũ
7
dce
2011
FFT cơ số 2 (1)
N −1
X (k ) = ∑ x(n)WNkn
k = 0,1,..., N − 1
n =0
=
kn
kn
+
(
)
(
)
x
n
W
x
n
W
∑
∑
N
N
n even
=
n old
( N / 2 ) −1
∑ x(2m)W
m =0
X (k ) =
2 mk
N
( N / 2 ) −1
∑
m =0
f1 (m)W
km
N /2
+
( N / 2 ) −1
+W
∑ x(2m + 1)W
m =0
k ( 2 m +1)
N
WN2 = WN / 2
( N / 2 ) −1
∑
k
N
m =0
= F1 (k ) + WNk F2 (k )
f 2 (m)WNkm/ 2
k = 0,1,..., N − 1
f1 (m) ←
→ F1 (k )
DFTN / 2
k = 0,1,..., N / 2
f 2 (m) ←
→ F2 (k )
DFTN / 2
k = 0,1,..., N / 2
k
(
)
=
(
)
+
X
k
F
k
W
k = 0,1,.., N2 − 1
1
N F2 ( k )
k
N
(
+
)
=
(
)
−
X
k
F
k
W
k = 0,1,.., N2 − 1
1
N F2 ( k )
2
DSP – Giải thuật cho Biến đổi Fourier
F1(k), F2(k) tuần hoàn
chu kỳ N/2
F1(k+ N/2) = F1(k)
F2(k+ N/2) = F2(k)
WNk + N / 2 = −WNk
©2011, Đinh Đức Anh Vũ
8
dce
2011
FFT cơ số 2 (2)
G1 (k ) = F1 (k )
G2 (k ) = WNk F2 (k )
k = 0,1,.., N2 − 1
k = 0,1,.., N2 − 1
G1(k)
G2(k)
X (k ) = G1 (k ) + G2 (k )
N
X
k
(
+
2 ) = G1 ( k ) − G2 ( k )
DFT2
k = 0,1,..., N2 − 1
X(k)
X(k+ N/2)
k=0,1,…,(N/2-1)
k = 0,1,..., N2 − 1
DFT
2 điểm
DFT
DFT
2 điểm
DFT
2 điểm
2 điểm
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
9
dce
2011
FFT cơ số 2 (3)
• Tiếp tục phân f1(n) và f2(n) thành các chuỗi N/4 điểm
v11 (n) =
v12 (n) =
v21 (n) =
v (n) =
22
f1 (2n)
n = 0,1,..., N4 − 1
f1 (2n + 1)
n = 0,1,..., N4 − 1
f 2 ( 2n )
n = 0,1,..., N4 − 1
f 2 (2n + 1)
n = 0,1,..., N4 − 1
F1 (k ) = V11 (k ) + WNk / 2V12 (k )
k
N
F1 (k + 4 ) = V11 (k ) − WN / 2V12 (k )
k
F
k
V
k
W
=
+
(
)
(
)
2
21
N / 2V22 ( k )
F (k + N ) = V (k ) − W k V (k )
21
N / 2 22
4
2
vij(n)
DFT
N/4 điểm
Vij(k)
k = 0,1,..., N4 − 1
k = 0,1,..., N4 − 1
k = 0,1,..., N4 − 1
k = 0,1,..., N4 − 1
• Hiệu quả
DFT trực tiếp N=2v điểm
Nhân phức: N2
Cộng phức: N2 – N
DSP – Giải thuật cho Biến đổi Fourier
FFT cơ số 2
Các DFT 2 điểm
Nhân phức: (N/2)log2N
Cộng phức: Nlog2N
©2011, Đinh Đức Anh Vũ
10
dce
2011
FFT cơ số 2 (4)
• Ví dụ: tính DFT 8 điểm
x(0)
x(1)
x(2)
x(3)
Phân theo thời gian
x(0)
x(2)
x(4)
x(6)
x(1)
x(3)
x(5)
x(7)
x(4)
x(5)
x(6)
x(7)
[0,1,2,3,4,5,6,7]
x(0)
x(4)
x(2)
x(6)
x(1)
x(5)
x(3)
x(7)
DSP – Giải thuật cho Biến đổi Fourier
[0,2,4,6]
[0,4]
[1,3,5,7]
[2,6]
[1,5]
[3,7]
©2011, Đinh Đức Anh Vũ
11
dce
2011
FFT cơ số 2 (5)
• Khối tính toán cơ bản cho DFT 2 điểm (hình con bướm)
a
A = a+WN’b
b
B = a–WN’b
W N’
–1
Độ phức tạp
• 1 nhân phức
• 2 cộng phức
N= 2v:
+ Log2N
: tầng tính toán
+ N/2
: khối tính toán cơ bản cho mỗi lớp
Bộ nhớ:
+ Vào
: (a,b) – số phức
+ Ra
: (A,B) – số phức
+ Có thể lưu (A,B) đè lên (a,b)
Chỉ cần N ô nhớ phức (2N ô nhớ thực)
Tính toán tại chỗ
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
12
dce
2011
FFT cơ số 2 (6)
x(0)
X(0)
x(4)
0
8
W
X(1)
-1
x(2)
0
8
W
x(6)
0
8
W
-1
2
8
W
X(2)
-1
X(3)
-1
x(1)
0
8
-1
1
8
-1
2
8
-1
W
x(5)
0
8
W
-1
W
x(3)
0
8
-1
2
8
-1
W
W
x(7)
0
8
W
-1
W
DSP – Giải thuật cho Biến đổi Fourier
3
8
W
-1
©2011, Đinh Đức Anh Vũ
X(4)
X(5)
X(6)
X(7)
13
dce
2011
Baseline Parallel Architecture
Size
16
8192
1
1
1
1
Pins
448
229K
2
2
2
2
Fly
32
53K
3
3
3
3
Mult
4
4
4
4
Add
5
5
5
5
Shift
0
0
6
6
6
6
7
7
7
7
8
8
8
8
9
9
9
9
10
10
10
10
11
11
11
11
12
12
12
12
13
13
13
13
14
14
14
14
15
15
15
15
16
16
16
16
DSP – Giải thuật cho Biến đổi Fourier
∆
Parallel FFT
Butterfly structure
Removes redundant
calculation
©2011, Đinh Đức Anh Vũ
14
dce
2011
Parallel-Pipelined Architecture
Size
16
8192
1
1
1
1
Pins
448
229K
2
2
2
2
Fly
32
53K
3
3
3
3
Mult
96
159K
4
4
4
4
Add
288
480K
5
5
5
5
Shift
0
0
6
6
6
6
7
7
7
7
8
8
8
8
9
9
9
9
10
10
10
10
11
11
11
11
12
12
12
12
13
13
13
13
14
14
14
14
15
15
15
15
16
16
16
16
DSP – Giải thuật cho Biến đổi Fourier
∆
A pipelined version
IO Bound
100% Efficient
©2011, Đinh Đức Anh Vũ
15
dce
2011
FFT cơ số 2 (7)
• Thứ tự chuỗi dữ liệu vào sau khi phân (v-1) lần
– Biểu diễn các chỉ số ở dạng nhị phân
– Chuỗi sau khi phân chia sẽ là lấy theo thứ tự đảo các bit
Bộ
nhớ
Địa
chỉ
Bộ
nhớ
Địa
chỉ
Bộ
nhớ
Địa
chỉ
x(0)
000
x(0)
000
x(0)
000
x(1)
001
x(2)
010
x(4)
100
x(2)
010
x(4)
100
x(2)
010
x(3)
011
x(6)
110
x(6)
110
x(4)
100
x(1)
001
x(1)
001
x(5)
101
x(3)
011
x(5)
101
x(6)
110
x(5)
101
x(3)
011
x(7)
111
x(7)
111
x(7)
111
Phân
chia
DSP – Giải thuật cho Biến đổi Fourier
Phân
chia
©2011, Đinh Đức Anh Vũ
16
dce
2011
FFT cơ số 2 (8)
•
Phân chia theo tần số
–
–
–
–
–
Phương pháp chia và trị
M = 2, L = N/2
Chuỗi dữ liệu nhập được sắp xếp theo cột
Phân chia X(k) thành X(2k) và X(2k+1)
Sau đó có thể phân chia tiếp tục mỗi X(k chẵn) và X(k lẻ)
x(0)
X(0)
x(1)
DFT
4 điểm
x(2)
x(3)
-1
x(5)
-1
x(6)
-1
x(7)
-1
0
8
1
8
2
8
3
8
W
W
W
W
A = (a+b) WN’
X(2)
X(4)
X(6)
x(4)
a
b
–1
W N’
B = (a–b)WN’
X(1)
DFT
4 điểm
DSP – Giải thuật cho Biến đổi Fourier
X(3)
X(5)
X(7)
©2011, Đinh Đức Anh Vũ
17
dce
FFT cơ số 4 (1)
2011
x(0)
x(2)
x(4)
…
…
…
x(N-1)
l,p = 0,1,2,3
m,q = 0,1,…,N/4 – 1
L = 4, M = N/4
N = 4v
n = 4m + l
k = (N/4)p + q
m=0
m=1
m=(N/4)-1
l=0
x(0)
x(4)
…
…
x(N-4)
x(4n)
l=1
x(1)
x(5)
…
…
x(N-3)
x(4n+1)
n = 0,1,…,N/4-1
l=2
x(2)
x(6)
…
…
x(N-2)
x(4n+2)
l=3
x(3)
x(7)
…
…
x(N-1)
x(4n+3)
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
18
dce
2011
FFT cơ số 4 (2)
lq M −1
mq lp
X ( p, q ) = ∑ WN ∑ x(l , m)WM WL
l =0
m =0
L −1
3
[
]
X ( p, q ) = ∑ WNlq F (l , q ) W4lp
p = 0,1,2,3
l =0
DFT N/4 điểm
l = 0,1,2,3
N
=
q
0
,
1
,..,
(
4 − 1)
N /4
F (l , q ) = ∑ x (l , m)WNmq/ 4
m =0
x(l , m) = x(4m + l )
N
X ( p, q ) = X ( 4 p + q )
X (0, q ) 1 1
X (1, q ) 1 − j
=
X (2, q ) 1 − 1
j
X (3, q ) 1
1
1 WN0 F (0, q )
j WNq F (1, q )
−1
1 − 1 WN2 q F (2, q )
3q
− 1 − j WN F (3, q )
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
19
dce
2011
FFT cơ số 4 (3)
WN0
WNq
-j
-1
j
-1
1
WN2 q
-1
j
-1
WN3q
0
-j
q
2q
Dạng rút gọn
3q
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
20
dce
2011
FFT cơ số 4 (4)
Độ phức tạp: 1 khối tính toán cần
+ 3 nhân phức
+ 12 cộng phức
N=4v
+ Tầng tính toán
: v = log4N
+ Mỗi tầng có
: N/4 khối tính toán
3vN/4 = (3N/8)log2N
12vN/4 = (3N/2)log2N
: Nhân phức
: Cộng phức
(giảm 25% vs FFT2)
(tăng 50% vs FFT2)
Biểu diễn lại nhân ma trận
X (0, q ) 1
X (1, q ) 0
=
X (2, q ) 1
X (3, q ) 0
(3N/8)log2N
Nlog2N
0 1
0 1 0 1 0 WN0 F (0, q )
q
1 0 − j 1 0 − 1 0 WN F (0, q )
0 − 1 0 0 1 0 1 WN2 q F (0, q )
3q
j 0 1 0 − 1 WN F (0, q )
1 0
: Nhân phức
: Cộng phức
DSP – Giải thuật cho Biến đổi Fourier
(giảm 25% vs FFT2)
(bằng FFT2)
©2011, Đinh Đức Anh Vũ
21
dce
2011
Hiện thực các giải thuật FFT
•
FFT cơ số 2
– Tính toán hình bướm: (N/2)log2N lần
– Hệ số quay WNk: được tính một lần và lưu trong bảng
– Bộ nhớ: 2N nếu muốn việc tính toán được thực hiện tại chỗ
• 4N nếu muốn đơn giản hóa các tác vụ chỉ số và điều khiển; đồng thời cho phép
chuỗi nhập và xuất theo đúng thứ tự
•
IDFT
1
x ( n) =
N
N −1
− kn
X
(
k
)
W
∑
N
0 ≤ n ≤ N −1
k =0
– Khác nhau cơ bản giữa việc tính DFT và IDFT là hệ số 1/N và dấu của hệ số
pha WN
• Đảo chiều sơ đồ tính DFT, đổi dấu hệ số pha, và chia kết quả cuối cùng cho N →
IDFT
•
•
DFT với số điểm khác 2v hoặc 4v → đệm thêm các số 0
Độ phức tạp
– Tác vụ số học (nhân phức, cộng phức)
– Cấu trúc hiện thực của giải thuật (qui tắc vs bất qui tắc)
– Kiến trúc của các bộ DSPs (xử lý song song các tác vụ)
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
22
dce
2011
Ứng dụng của các giải thuật FFT
• Tính DFT của 2 chuỗi thực
– x1(n) và x2(n): chuỗi thực độ dài N cần tính DFT
– Định nghĩa chuỗi x(n) = x1(n) + jx2(n)
0≤n≤N–1
– X(k) = X1(k) + jX2(k)
(tính tuyến tính của DFT)
x ( n) + x * ( n)
x1 (n) =
2
x ( n) − x * ( n)
x2 ( n ) =
2j
DFTN
x* (n) ←
→ X * ( N − k )
DSP – Giải thuật cho Biến đổi Fourier
{
[
]}
{
[
]}
1
X 1 (k ) = DFT [x(n)] + DFT x* (n)
2
1
X 2 (k ) = DFT [x(n)] − DFT x* (n)
2
X 1 (k ) =
1
2
X 2 (k ) =
1
2
[X (k ) + X ( N − k )]
[X (k ) − X ( N − k )]
*
*
©2011, Đinh Đức Anh Vũ
23
dce
2011
Ứng dụng của các giải thuật FFT
•
Tính DFT của chuỗi thực 2N điểm
–
–
–
–
g(n): chuỗi thực độ dài 2N cần tính DFT
0 ≤ n ≤ N-1
Tách thành 2 chuỗi x1(n) = g(2n) và x2(n) = g(2n+1)
Định nghĩa chuỗi x(n) = x1(n) + jx2(n)
0 ≤ n ≤ N-1
X(k) = X1(k) + jX2(k)(tính tuyến tính của DFT)
X 1 (k ) =
1
2
X 2 (k ) =
1
2
G (k )
[X (k ) + X ( N − k )]
[X (k ) − X ( N − k )]
*
*
N −1
N −1
n =0
n =0
= ∑ g (2n)W22Nnk + ∑ g (2n + 1)W2(N2 n +1) k
N −1
= ∑ x1 (n)W
n =0
nk
N
+W
k
2N
N −1
nk
x
n
W
(
)
∑ 2 N
n =0
G (k )
= X 1 (k ) + W2kN X 2 (k ) k = 0,1, , N − 1
G (k + N )
= X 1 (k ) − W2kN X 2 (k ) k = 0,1, , N − 1
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
24
dce
2011
Ứng dụng của các giải thuật FFT
•
Lọc tuyến tính các chuỗi dữ liệu dài
– Overlap-add
– Overlap-save
•
DFT + FFT
Phương pháp
– h(n) – Đáp ứng xung đơn vị của bộ lọc (chiều dài M)
• Được đệm thêm L-1 số không sao cho N = L + M – 1 = 2v
• H(k): DFT N điểm của h(n), theo thứ tự đảo nếu h(n) được sắp theo thứ tự thuận
(Giải thuật FFT suy giảm theo tần số)
– xm(n) – khối dữ liệu chiều dài L (đã được phân cắt)
• Được đệm thêm M–1 điểm (giá trị tùy theo PP lọc được dùng)
• Xm(k): DFT N điểm của xm(n), cũng theo thứ tự đảo (Giải thuật FFT suy giảm theo
tần số)
– Ym(k) = H(k)Xm(k)
• H(k) và Xm(k) cùng có thứ tự đảo → Ym(k) theo thứ tự đảo
• ym(n) = IDFTN{Ym(k)} sẽ đúng theo thứ tự thuận nếu dùng giải thuật FFT suy giảm
theo thời gian
– Không cần thiết đảo vị trí các dữ liệu trong việc tính DFT và IDFT
•
Tính tương quan (tương tự)
DSP – Giải thuật cho Biến đổi Fourier
©2011, Đinh Đức Anh Vũ
25