The Fast Fourier Transform (FFT) is an efficient O(NlogN)
algorithm for calculating DFTs
-
originally discovered by Gauss in the early 1800's
-
rediscovered by Cooley and Tukey at IBM in the 1960's
-
C.S. Burrus, Rice University's very own Dean of
Engineering, literally "wrote the book" on fast DFT
algorithms.
The
FFT exploits symmetries
in the
WW matrix to take a "divide
and conquer" approach. We won't talk about the actual FFT
algorithm here, see
these
notes if you are interested in reading a little more on
the idea behind FFT.
How much better is O(NlogN) than O(
N2
N
2
)?
|
NN
|
1010
|
100100
|
10001000
|
106106
|
109109
|
|
N2N2
|
100
|
104104
|
106106
|
10121012
|
10181018
|
|
NlogNNN
|
11
|
200200
|
30003000
|
6×1066106
|
9×1099109
|
Say you have a 1 MFLOP machine (a million "floating point"
operations per second). Let
N=1million=106
N
1
million
10
6
.
An O(
N2
N
2
) algorithm takes
10121012
flors →
106
10
6
seconds ≃ 11.5 days.
An O(
NlogN
N
N
) algorithm takes
6×106
6
10
6
Flors → 6 seconds.
N=1million
N
1
million
is not unreasonable.
3 megapixel digital camera spits out
3×106
3
10
6
numbers for each picture. So for two
NN point sequences
fnfn
and hnhn. If
computing
fn⊛hn
⊛
f
n
h
n
directly: O(
N2
N
2
) operations.
taking FFTs -- O(NlogN)
multiplying FFTs -- O(N)
inverse FFTs -- O(NlogN).
the total complexity is O(NlogN).
FFT + digital computer were almost completely responsible for
the "explosion" of DSP in the 60's.
Rice was (and still is) one of the places to do research in
DSP.
"My introduction to signal processing course at Rice University."