Lecture 18: Fast Fourier Transform
The topic in this lecture is:
• Fast Fourier transform algorithm.
1
Definition
The discrete Fourier transform (DFT) of the signal x[n] is
X[k] =
N
−1
X
x[n]e−j2πnk/N , k = 0, 1, · · · , N − 1.
n=0
To evaluate X[k] for a single k, we need to perform N multiplications. Therefore, to
calculate X[k] for k = 0, 1, · · · , N − 1, we need N 2 multiplications. The fast Fourier
transform (FFT) can largely reduce the number of multiplications when computing the
DFT to N log2 N/2. For example, if N = 1024, it will take 1,048,576 multiplications using
the DFT directly. However, when using the FFT, it only takes 5120 multiplications. 1
To show how the FFT is developed, let us look at the DFT equation:
X[k] =
N
−1
X
x[n]e−j2πnk/N , k = 0, 1, · · · , N − 1.
n=0
Let WN = e−j2π/N . The equation above can be rewritten as
X[k] =
N
−1
X
x[n](WN )nk , k = 0, 1, · · · , N − 1.
n=0
1
The FFT became popular in 1965 proposed by James Cooley and John Tukey.
1
Here we consider the simplest FFT algorithm, called the radix-2 decimation-in-time (DIT)
FFT. Assume that N is even. The preceding equation is equal to
N/2−1
N/2−1
X
X[k] =
x[2n](WN )
2nk
+
X
x[2n + 1](WN )(2n+1)k
n=0
n=0
N/2−1
X
=
N/2−1
x[2n](WN )
2nk
+ (WN )
X
k
n=0
x[2n + 1](WN )2nk
(1)
n=0
Note that
WN/2 = e−j2π(N/2) = e−j2π2/N = (WN )2 .
Therefore equation (1) can be further derived as
N/2−1
N/2−1
X
X[k] =
x[2n](WN/2 )
X
k
nk
+ (WN ) ·
x[2n + 1](WN/2 )nk
.
n=0
n=0
|
{z
}
DFT of odd-indexed part of x[n]
{z
}
|
DFT of even-indexed part of x[n]
Let
N/2−1
X
E[k] =
x[2n](WN/2 )nk
n=0
N/2−1
X
O[k] =
x[2n + 1](WN/2 )nk
n=0
for k = 0, 1, · · · , N/2 − 1. Therefore,
X[k] = E[k] + (WN )k O[k]
(2)
for k = 0, 1, · · · , N/2 − 1.
Note that for k = 0, 1, · · · , N/2 − 1,
(WN/2 )n(k+N/2) = (WN/2 )nk ,
(WN )k+N/2 = −(WN )k .
Therefore, for k = 0, 1, · · · , N/2 − 1,
N/2−1
X[k + N/2] =
X
N/2−1
x[2n](WN/2 )
n(k+N/2)
+ (WN )
k+N/2
n=0
X
x[2n + 1](WN/2 )n(k+N/2)
n=0
N/2−1
=
X
N/2−1
x[2n](WN/2 )nk − (WN )k
n=0
X
x[2n + 1](WN/2 )nk .
n=0
k
= E[k] − (WN ) O[k]
(3)
2
Therefore, to compute the DFT of x[n], we only need to first compute the N/2-point
DFTs of the even-indexed part and the odd-indexed part of x[n], which are E[k] and O[k],
respectively, and then use equations (2) and (3) to compute X[k] for k = 0, 1, · · · , N/2 − 1
and X[k] for k = N/2, · · · , N − 1, respectively. The algorithm is shown in Figure 1
Figure 1: 8-point FFT
In fact, we can still divide the N/2-point DFT into N/4-point DFT. In general, if we are
given N samples of x[n], we can first subdivide the N-point DFT into N/2-point DFT and
continue with this process until we get to the 2-point DFT.
We now compute the numbers of complex multiplications and complex additions used in the
FFT. Let µc (N) denote the number of complex multiplications and αc (N) be the number
of complex additions for the N-point DFT. When using the FFT, we have
µc (N) = 2µ(N/2) + N/2
αc (N) = 2αc (N/2) + N.
The equations can be evaluated successively for N = 2, 4, 6, 8 · · · with µc (2) = 0 and
αc (2) = 2. Therefore,
µc (N) ∼ O(N/2(log2 N − 1)),
αc (N) ∼ O(N log2 N).
Example 1 Consider the 8-point FFT. The butterfly computation is shown in Figure 2,
where W = W8 = e−j2π/8 .
3
Figure 2: The butterfly computation of 8-point FFT
Example 2 Draw an 8-point radix-2 DIT FFT flow graph for the DFT of the following
sequence
x[n] = {0, 1, −1, 0, 0, 2, −2, 0}.
Figure 3: 8-point FFT
4