Sie sind auf Seite 1von 15

Fast Fourier Transform

ENE 208 Electrical Engineering Mathematics (2/2008)


Class 5, February 2, 2009
Werapon Chiracharit, Ph.D., ENE, KMUTT
werapon.chi@kmutt.ac.th

f(2)

f(4)

f(t)

cost

1
1
cos2t

For discrete Fourier expansion,


F(n) = f(t) [ cos(nt) j sin(nt) ],
e.g. we multiplied f(t) with cos(0), cos(t),
cos(2t), cos(3t), , then the results
are the same in some cases.
As the number of points increases, the
number of the same results increase
too.

1
cos3t

FFT is a method to re-express DFT in


order the reduce the computation time.

1
1
cost

Cutting Down on Calculations


Discrete Fourier Transfrom
F(n) = k=0N1 f(k) ej2nk/N
= k=0N1 f(k) WNnk
where WN = ej2/N is Rotation Operator
For example, let N = 8 points and n=0,1,2,,7
There are N/2 = 4 oscillations (Nyquists),
so why not just n=0,1,2,3,4 ?
3

Direct calculation of DFT,


F(n) = k=07 f(k)WNnk , n=0,1,2,,7
Freq.\Time
n=0,
n=1,
n=2,
n=3,
n=4,
n=5,
n=6,
n=7,

k=0
k=1
k=2
k=3
k=4
k=5
k=6
k=7
F(0) = f(0)W80 +f(1)W80+f(2)W80 +f(3)W80 +f(4)W80 +f(5)W80 +f(6)W80 +f(7)W80
F(1) = f(0)W80 +f(1)W81+f(2)W82 +f(3)W83 +f(4)W84 +f(5)W85 +f(6)W86 +f(7)W87
F(2) = f(0)W80 +f(1)W82+f(2)W84 +f(3)W86 +f(4)W88 +f(5)W810+f(6)W812+f(7)W814
F(3) = f(0)W80 +f(1)W83+f(2)W86 +f(3)W89 +f(4)W812+f(5)W815+f(6)W818+f(7)W821
F(4) = f(0)W80 +f(1)W84+f(2)W88 +f(3)W812+f(4)W816+f(5)W820+f(6)W824+f(7)W828
F(5) = f(0)W80+f(1)W85+f(2)W810+f(3)W815+f(4)W820+f(5)W825+f(6)W830+f(7)W835
F(6) = f(0)W80+f(1)W86+f(2)W812+f(3)W818+f(4)W824+f(5)W830+f(6)W836+f(7)W842
F(7) = f(0)W80+f(1)W87+f(2)W814+f(3)W821+f(4)W828+f(5)W835+f(6)W842+f(7)W849

There are 88 = 64 multiplications.


Do not forget, each is a multiplication of complex
numbers, (a+jb)(c+jd) = (ac bd) + j(ad + bc),
or 4 multiplications of real numbers.
4

Im
W86

W84

W83

N-Rotation operator,
WN = ej(2/N)
= cos(2/N) j sin(2/N)
W8 = cos(/4) j sin(/4)

W87

W85

W82

W80

Re

W81

Therefore WNnk = (ej2/N)nk and W8nk = (ej/4)nk,


W80 = W88 = W816 = W824 = W832 = W840 = W848 =
W81 = W89 = W817 = W825 = W833 = W841 = W849 =
W82 = W810 = W818 = W826 = W834 = W842 = W850 =
W83 = W811 = W819 = W827 = W835 = W843 = W851 =
W84 = W812 = W820 = W828 = W836 = W844 = W852 =
W85 = W813 = W821 = W829 = W837 = W845 = W853 =
W86 = W814 = W822 = W830 = W838 = W846 = W854 =
W87 = W815 = W823 = W831 = W839 = W847 = W855 =

F(0)
F(1)
F(2)
F(3)
F(4)
F(5)
F(6)
F(7)

f(0)
W80
W80
W80
W80
W80
W80
W80
W80

f(1)
W80
W81
W82
W83
W84
W85
W86
W87

f(2)
W80
W82
W84
W86
W88
W810
W812
W814

F(0)
F(1)
F(2)
F(3)
F(4)
F(5)
F(6)
F(7)

f(3)
W8 0
W8 3
W8 6
W8 9
W812
W815
W818
W821
f(0)
W80
W80
W80
W80
W80
W80
W80
W80

f(4)
W80
W84
W88
W812
W816
W820
W824
W828

f(1)
W80
W81
W82
W83
W84
W85
W86
W87

f(5)
W80
W85
W810
W815
W820
W825
W830
W835

f(2)
W80
W82
W84
W86
W80
W82
W84
W86

f(6)
W80
W86
W812
W818
W824
W830
W836
W842

f(3)
W8 0
W8 3
W8 6
W8 1
W8 4
W8 7
W8 2
W8 5

f(7)
W8 0
W8 7
W814
W821
W828
W835
W842
W849

f(4)
W80
W84
W80
W84
W80
W84
W80
W84

f(5)
W80
W85
W82
W87
W84
W81
W86
W83

W8 = ej/4

f(6)
W80
W86
W84
W82
W80
W86
W84
W82

f(7)
W8 0
W8 7
W8 6
W8 5
W8 4
W8 3
W8 2
W8 1

Lets Divide and Conquer,


F(n) = k=0N 1 f(k) WNnk
= k=0N/2 1 f(2k) WNn(2k)
Even
+ k=0N/2 1 f(2k+1) WNn(2k+1) Odd
= k=0N/2 1 fe(k) WN2nk
+ k=0N/2 1 fo(k) WN(2nk+n)
= k=0N/2 1 fe(k) WN2nk =
+ WNn k=0N/2 1 fo(k) WN2nk
where fe(k) = f(2k) and fo(k) = f(2k+1)
7

F(0)
F(1)
F(2)
F(3)
F(4)
F(5)
F(6)
F(7)

f(0)
W80
W80
W80
W80
W80
W80
W80
W80

f(1)
W80
W81
W82
W83
W84
W85
W86
W87

f(2)
W80
W82
W84
W86
W80
W82
W84
W86

f(3)
W8 0
W8 3
W8 6
W8 1
W8 4
W8 7
W8 2
W8 5

f(4)
W80
W84
W80
W84
W80
W84
W80
W84

fe(0)
W80
W80
W80
W80
W80
W80
W80
W80

fe(1)
W80
W82
W84
W86
W80
W82
W84
W86

f(5)
W80
W85
W82
W87
W84
W81
W86
W83

f(6)
W80
W86
W84
W82
W80
W86
W84
W82

Even
F(0)
F(1)
F(2)
F(3)
F(4)
F(5)
F(6)
F(7)

fe(2)
W80
W84
W80
W84
W80
W84
W80
W84

fe(3)
W80
W86
W84
W82
W80
W86
W84
W82

f(7)
W8 0
W8 7
W8 6
W8 5
W8 4
W8 3
W8 2
W8 1

Odd

fo(0)
W80
W81
W82
W83
W84
W85
W86
W87

fo(1)
W80
W83
W86
W81
W84
W87
W82
W85

fo(2)
W80
W85
W82
W87
W84
W81
W86
W83

fo(3)
W80
W87
W86
W85
W84
W83
W82
W81 8

F(0)
F(1)
F(2)
F(3)
F(4)
F(5)
F(6)
F(7)

fe(0)
W80
W80
W80
W80
W80
W80
W80
W80

fe(1)
W80
W82
W84
W86
W80
W82
W84
W86

fe(2)
W80
W84
W80
W84
W80
W84
W80
W84

F(0)
F(1)
F(2)
F(3)
F(4)
F(5)
F(6)
F(7)

fe(3)
W80
W86
W84
W82
W80
W86
W84
W82

fo(0)
W80
W81
W82
W83
W84
W85
W86
W87

fo(1)
W80
W83
W86
W81
W84
W87
W82
W85

fe(0) fe(1) fe(2) fe(3)


W80 W80 W80 W80
W80 W82 W84 W86
W80 W84 W80 W84
W80 W86 W84 W82
W80 W80 W80 W80
W80 W82 W84 W86
W80 W84 W80 W84
W80 W86 W84 W82

fo(2)
W80
W85
W82
W87
W84
W81
W86
W83

fo(0) fo(1) fo(2)


W80 [ W80 W80
W81 [ W80 W82
W82 [ W80 W84
W83 [ W80 W86
W84 [ W80 W80
W85 [ W80 W82
W86 [ W80 W84
W87 [ W80 W86

W43

W42

Im

W41

fo(3)
W80
W87
W86
W85
W84
W83
W82
W81
fo(3)
W80
W84
W80
W84
W80
W84
W80
W84

W80 ]
W86 ]
W84 ]
W82 ]
W80 ]
W86 ]
W84 ]
W82 ]
9

N/2-Rotation operator,
(WN)2 = (ej(2/N))2
WN/2 = ej(2/(N/2))
Re
= ej(4/N)
W40
= cos(4/N) j sin(4/N)
W4 = cos(/2) j sin(/2)

Therefore WN2nk = WN/2nk = (ej4/N)nk


and W4nk = (ej/2)nk
W 8 0 = W 4 0 = W4 4 = W4 8 =
W 8 2 = W 4 1 = W4 5 = W4 9 =
W84 = W42 = W46 = W410 =
W86 = W43 = W47 = W411 =
10

fe(0)
W8n [ fo(0)
F(0)
W80
F(1)
W80
F(2)
W80
F(3)
W80
F(4)
W80
F(5)
W80
F(6)
W80
F(7)
W80

fe(1)
fo(1)
W80
W82
W84
W86
W80
W82
W84
W86

fe(2)
fo(2)
W80
W84
W80
W84
W80
W84
W80
W84

fe(3)
fo(3) ]
W80
W86
W84
W82
W80
W86
W84
W82

W4 = W82 = ej/2

fe(0) fe(1)
W8n [ fo(0) fo(1)
F(0)
W40 W40
F(1)
W40 W41
F(2)
W40 W42
F(3)
W40 W43
F(4)
W40 W40
F(5)
W40 W41
F(6)
W40 W42
F(7)
W40 W43

fe(2)
fo(2)
W40
W42
W40
W42
W40
W42
W40
W42

fe(3)
fo(3) ]
W40
W43
W42
W41
W40
W43
W42
W41
11

Divide and conquer again,


F(n) = k=0N/2 1 fe(k) WN2nk + WNn k=0N/2 1 fo(k) WN2nk
= k=0N/2 1 fe(k) WN/2nk + WNn k=0N/2 1 fo(k) WN/2nk
= k=0N/4 1 fe(2k) WN/2n(2k) + k=0N/4 1 fe(2k+1) WN/2n(2k+1)
+ WNn [ k=0N/4 1 fo(2k) WN/2n(2k) + k=0N/4 1 fo(2k+1) WN/2n(2k+1) ]
= k=0N/4 1 fee(k) WN/22nk + WN/2n k=0N/4 1 feo(k) WN/22nk
+ WNn [ k=0N/4 1 foe(k) WN/22nk + WN/2n k=0N/4 1 foo(k) WN/22nk ]
where fee(k) = fe(2k) and feo(k) = fe(2k+1)
and foe(k) = fo(2k) and foo(k) = fo(2k+1)
12

fe(0) fe(1) fe(2)


W8n [ fo(0) fo(1) fo(2)
F(0)
W40 W40 W40
F(1)
W40 W41 W42
F(2)
W40 W42 W40
F(3)
W40 W43 W42
F(4)
W40 W40 W40
F(5)
W40 W41 W42
F(6)
W40 W42 W40
F(7)
W40 W43 W42

fe(3)
fo(3) ]
W40
W43
W42
W41
W40
W43
W42
W41
fe(0)
W8n [ fo(0)
F(0)
W40
F(1)
W40
F(2)
W40
F(3)
W40
F(4)
W40
F(5)
W40
F(6)
W40
F(7)
W40

fe(2)
fo(2)
W40
W42
W40
W42
W40
W42
W40
W42

Even

fe(0) fe(2)
W8n [ fo(0) fo(2)
F(0)
W40 W40
F(1)
W40 W42
F(2)
W40 W40
F(3)
W40 W42
F(4)
W40 W40
F(5)
W40 W42
F(6)
W40 W40
F(7)
W40 W42

fe(1)
fo(1)
W40
W41
W42
W43
W40
W41
W42
W43

fe(1) fe(3)
fo(1) fo(3) ]
W40 W40
W41 W43
W42 W42
W43 W41
W40 W40
W41 W43
W42 W42
W43 W41

Odd

13

fe(3)
fo(3) ]
W40
W43
W42
W41
W40
W43
W42
W41
fee(0) fee(1)
W8n [ foe(0) foe(1)
F(0)
W40 W40
F(1)
W40 W42
F(2)
W40 W40
F(3)
W40 W42
F(4)
W40 W40
F(5)
W40 W42
F(6)
W40 W40
F(7)
W40 W42

feo(0)
foo(0)
W40 [ W40
W41 [ W40
W42 [ W40
W43 [ W40
W44 [ W40
W45 [ W40
W46 [ W40
W47 [ W40

feo(1)
foo(1) ]
W40 ]
W42 ]
W40 ]
W42 ]
W40 ]
W42 ]
W40 ]
W42 ]
14

Im

W21

N/4-Rotation operator,
(WN/2)2 = ((ej(2/N))2)2
WN/4 = ej(2/(N/4))
Re
= ej(8/N)
W20
= cos(8/N) j sin(8/N)
W2 = cos() j sin()

Therefore WN/22nk = WN/4nk = (ej8/N)nk


and W2nk = (ej)nk
W80 = W40 = W20 = W22 = W24 =
W84 = W42 = W21 = W23 = W25 =
15

fee(0) fee(1)
n
W4 [ feo(0) feo(1) ]
W8n [ foe(0) foe(1) ]
W8n W4n [ foo(0) foo(1) ]
F(0)
W40 W40
F(1)
W40 W42
F(2)
W40 W40
F(3)
W40 W42
F(4)
W40 W40
F(5)
W40 W42
F(6)
W40 W40
F(7)
W40 W42

W2 = W42 = ej
fee(0) fee(1)
W4n [ feo(0) feo(1) ]
W8n [ foe(0) foe(1) ]
n
W8 W4n [ foo(0) foo(1) ]
F(0)
W20 W20
F(1)
W20 W21
F(2)
W20 W20
F(3)
W20 W21
F(4)
W20 W20
F(5)
W20 W21
F(6)
W20 W20
F(7)
W20 W21

No need to do more
16

Recomposite for n = 0,1,2,,7


F(n) = k=0N/4 1 fee(k)WN/4nk + WN/2n k=0N/4 1 feo(k)WN/4nk
+ WNn [ k=0N/4 1 foe(k)WN/4nk + WN/2n k=0N/4 1 foo(k)WN/4nk ]
= k=01 fee(k) W2nk + W4n k=01 feo(k) W2nk
+ W8n [ k=01 foe(k) W2nk + W4n k=01 foo(k) W2nk ]
= k=01 ( fee(k)W2nk + feo(k)W4nW2nk )
+ W8n [ k=01 ( foe(k)W2nk + foo(k)W4nW2nk ) ]
= k=01 F1(k) + W8n k=01 F2(k)
= k=01 ( F1(k) + F2(k)W8n )
where F1(k) = fee(k) W2nk + feo(k) W4nW2nk
F2(k) = foe(k) W2nk + foo(k) W4nW2nk
17

Signal flow graph for n = 0,1,2,,7


F(n) = k=01 ( f1(k) + f2(k)W8n )

How many butterflies?


fee(0) W20n
fee(1) W24n
F1(0)
feo(0) W4nW22n F1(1)
feo(1) W nW 6n
4
2
W80
foe(0)
W2n
foe(1) W25n F2(0) W80
foo(0) n 3n F2(1)
W87
W4 W2
foo(1)
W87
n
7n
W4 W2

f(0)
f(1)
f(2)
f(3)
f(4)
f(5)
f(6)
f(7)

F(0)
F(1)
F(2)
F(3)
F(4)
F(5)
F(6)
F(7)

18

For 4-point FFT, N = 4 and n = 0,1,2,3


F(n) = k=03 f(k) W4nk
= k=01 f(2k) W2nk + W4n k=01 f(2k+1) W2nk
f(0)

F(0)

W20n

f(2) W

2n

f(3) W23n

W40 F(1)

f(1) W2n

W4 3

F(2)
F(3)

19

For 2-point FFT, N = 2 and n = 0,1


F(n) = k=01 f(k) W2nk
= f(0) W20 + f(1) W2n
= f(0) + f(1) W2n

f(0)

W2 0 = 1

W2 0 = 1

f(1)

W21 = 1

F(0)
W2 0 = 1

F(1)

1 Butterfly
(2 multiplications)
20

10

4-point FFT from 2-point FFTs,


F(n) = k=01f(2k)W42nk + W4nk=01f(2k+1)W42nk
= k=01f(2k)W2nk + W4nk=01f(2k+1)W2nk
F(0)
f(0)
f(2)
f(1)
f(3)

2-point
FFT
2-point
FFT

W40 = 1

F1(0)
F1(1)

F(1)
W41 = j

2 Butterflies

F(2)

F2(0)
F2(1)

W42 = 1

F(3)

W43 = j

21

8-point FFT from 4-point FFTs,


F(n) = k=01fee(k)W42nk + W4nk=01feo(k)W42nk
+ W8n[ k=01foe(k)W42nk + W4nk=01foo(k)W42nk ]
f(0)
f(2)
f(4)
f(6)

4-point
FFT

F2(0) W 4
8
F2(1)
F2(2) W83
W87
F2(3)

F(0)
F(1)
W80
F(2)
F(3) 4 Butterflies
F(4)
F(5)
F(6)
F(7)

f(1)
f(3)
f(5)
f(7)

4-point
FFT

F1(0)
F1(1)
F1(2)
F1(3)

22

11

N-point FFT from N/2-point FFTs,

F1(N/2 1)

F(N/2 1)
f(1)
F2(0)
N/2
F(N/2)
f(3) N/2-point F2(1) WN
N/2 1
FFT
f(5)
F2(2) WN
F2(N/2 1)
f(N1)
F(N1) 23
WNN1
k = 0,1,2,,N/2 1

f(2k+1)

N/2 Butterflies
F(0)
F(1)
W N0
F(2)

F1(0)
F1(1)
F1(2)

f(N2)

N/2-point
FFT

f(0)
f(2)
f(4)

f(2k)

F(n) = k=0N/2 1 f(2k) WN/2nk


+ WNn k=0N/2 1 f(2k+1) WN/2nk

4-point FFT

For N-point FFT, we have


N/2 Butterflies i
for 2i sample points
Consider, 2i = N

i = log2N

So we have N/2 log2N butterflies.


For each butterfly, we have 2
multiplications.

2
2
2 Butterflies
2 Butterflies

8-point FFT
2

2
Then the total multiplications are
N/2 log2N 2 = N log2N
< N2

2
4

2
4 Butterflies
4 Butterflies

4 Butterflies
24

12

Reduced Calculation
N Points

DFT = N2

FFT = N log2N

2
4
8

4
16
64

2
8
24

2,048
4,608
10,240

65,536
262,144
1,048,576

256
512
1,024

25

f(0)

f(1)

fe(0) fe(1)

f(2)

f(3)

f(4)

f(5)

fe(2) fe(3) fo(0) fo(1)

f(6)

f(7)

fo(2) fo(3)

fee(0) fee(1) feo(0) feo(1) foe(0) foe(1) foo(0) foo(1)


f(0) = fee(0)
f(1) = foe(0)
f(2) = feo(0)
f(3) = foo(0)
f(4) = fee(1)
f(5) = foe(1)
f(6) = feo(1)
f(7) = foo(1)

N = 8 = 23
We can divide the circle into 8, 4, or 2 parts.
So a standard number of samples that can be
repeatedly halved must be 2 to the ith power
(Radix-2 Decimation-in-Time FFT).
n = 0,1,2,3,,7
W8 = ej/4
W4 = ej/2
W2 = ej

26

13

fee(0) fee(1)
n
W4 [ feo(0) feo(1) ]
W8n [ foe(0) foe(1) ]
n
W8 W4n [ foo(0) foo(1) ]
F(0,2,4,6) W20 W20
F(1,3,5,7) W20 W21
Im
W86
W85
W84
W83

W82

F(0,4), F(1,5), F(2,6), F(3,7)


F(0),F(1),F(2),F(3),,F(7)
F(0),F(1),F(2),F(3),,F(7)

Im

Im
W43,7

W87

Re

Re
W80 W42,6
W81

W41,5

Re
0

W40,4
W21,3,5,7

W20,2,4,6

27

For n = 0,1,2,,7
F(n) = k=01 fee(k) W2nk + W4n k=01 feo(k) W2nk
+ W8n [ k=01 foe(k) W2nk + W4n k=01 foo(k) W2nk ]
f(0)
[ f(2)
ejn/4 [ f(1)
ejn/4ejn/2 = ej3n/4 [ f(3)
F(0),F(2),F(4),F(6) 1
F(1),F(3),F(5),F(7) 1
ejn/2

f(4)
f(6) ]
f(5) ]
f(7) ]
1
ej

4 multiplications
4 + 2 multiplications
4 + 2 multiplications
4 + 2 + 2 multiplications

So we have knocked 64 operations down to 24 operations!


Big difference?
28

14

F(0) = f(0)

+ f(4)

+ f(2)

+ f(6)

+ f(1)

+ f(5)

+ f(3)

+ f(7)

F(1) = f(0) + ejf(4) + ej/2[ f(2) + ejf(6) ] + ej/4[ f(1) + ejf(5) ] + ej3/4[ f(3) + ejf(7) ]
F(2) = f(0)
+ f(4) + ej[ f(2)
+ f(6) ] + ej/2[ f(1)
+ f(5) ] + ej3/2[ f(3)
+ f(7) ]
F(3) = f(0) + ejf(4) + ej3/2[ f(2) + ejf(6) ] + ej3/4[ f(1) + ejf(5) ] + ej9/4[ f(3) + ejf(7) ]
+ f(5) ] + ej3[ f(3)
+ f(7) ]
F(4) = f(0)
+ f(4)
+ f(2)
+ f(6)
+ ej[ f(1)
F(5) = f(0) + ejf(4) + ej5/2[ f(2) + ejf(6) ] + ej5/4[ f(1) + ejf(5) ] + ej15/4[ f(3) + ejf(7) ]
F(6) = f(0)
F(7) = f(0) +

+ f(4) + ej3[ f(2)

ejf(4) +

ej7/2[

f(2) +

+ f(6) ] + ej3/2[ f(1)


ejf(6)

]+

ej7/4[

f(1) +

+ f(5) ] + ej9/2[ f(3)


ejf(5)

]+

ej21/4[

+ f(7) ]

f(3) + ejf(7) ]

Actually there are 4 ( ejf(4), ejf(6), ejf(5) and ejf(7) )


+ 3 ( ej/2[ ], ej[ ] and ej3/2[ ] )
+ 7 ( ej/4[ ], ej/2[ ], ej3/4[ ], , ej7/4[ ] )
+ 7 ( ej3/4[ ], ej3/2[ ], ej9/4[ ], , ej21/4[ ],)
= 21 multiplications.
29

30

15

Das könnte Ihnen auch gefallen