Fast Fourier Transform (FFT)

The fast Fourier transform (FFT) provides a way to compute the DFT, but with computational complexity of 0(N log N)- a very efficient algorithm. The modern approach is known as the Cooley-Tukey algorithm, based on their paper from 1965 which described the algorithm (Tukey, 1965). However, it was later observed that the algorithm was known to Carl Gauss (Heideman, 1985), probably around 1805. Between 1805 and 1965, there were a number of rediscoveries of the approach. However, part of the reason for the fame of the Cooley-Tukey result is that with the advent of computers, computational approaches were much more tractable. So FFT would, from 1965 onward, become one of the most heavily employed algorithms of computational science. We provide here only a short description of one key part of the approach.

Let’s suppose that N is even. By definition, the DFT is given by

X_k = \sum^{N-1}_{n=0} x_n e^{-i2\pi(\frac{kn}{N})}, \qquad k=0,\dots,N-1.

(6)

We are going to separate the summation into two summations, one which has the even numbered terms and the other with the odd numbered terms. The easiest notation is to remember that if m = 0,1,..., then 2m gives all the even numbers and 2m + 1 gives all the odd numbers. So we now rewrite Equation (6) by separating even and odd numbered terms, so that

X_k = \sum^{N/2-1}_{m=0} x_{2m} e^{-i2\pi(\frac{k2m}{N})} + \sum^{N/2-1}_{m=0} x_{2m+1} e^{-i2\pi(\frac{k(2m+1)}{N})}.

(7)

Because N is even, we can replace N/2 with integer M. Additionally, by factoring out e^{-(\frac{i2\pi k}{N})} in the second summation, we get

X_k = \sum^{M-1}_{m=0} x_{2m} e^{-i2\pi(\frac{km}{M})} + e^{-(\frac{i2\pi k}{N})} \sum^{M-1}_{m=0} x_{2m+1} e^{-i2\pi(\frac{km}{M})},

(8)

When K\geq M, we note that each of the summations has a form that looks like of a DFT, with the first being a DFT on the even sample points, and the second being a DFT on the odd sampled points. We rewrite this result as

X_k = E_k + e^{-(\frac{i2\pi k}{N})} O_k,

(9)

Where Ek represents the DFT for even samples and 0k is the DFT for the odd samples. These new DFT terms are now half the size, and all we have added is a single multiplication and a single addition. When K\geq M, we observe that

e^{-i2\pi(\frac{km}{M})} = e^{-i2\pi(\frac{(k-M)m}{M})} e^{-i2\pi(\frac{Mm}{M})} = e^{-i2\pi(\frac{(k-M)m}{M})} e^{-i2\pi m} = e^{-i2\pi(\frac{(k-M)m}{M})},

 

where we take advantage of Euler’s formula from complex arithmetic:

e^{-i2\pi m} = \mbox{cos}(2\pi m) + i \mbox{ sin}(2\pi m) = 1 + i \cdot 0 = 1.

 

Then by suitable factoring, we find

X_k = E_{k-M} + e^{-(\frac{i2\pi(k-M)}{N})} O_{k-M},\quad k\geq M.

(10)

Note that in Equation (10), the term Ek - M is a term that we have already computed for Equation (9) for some value of K\geq M, similarly for 0k - M.

To examine the issue of efficiency, we return to the idea of doubling the number of sample points. When we double the number of samples, we simply break the calculation into two problems of identical size as to what we had before doubling. Our work, therefore, is doubled, but we must also include the two operations (one more addition and multiplication) that are required for each of the N terms. Let us consider a concrete example. Suppose we start with N = 1024. We know that this will require over 1 million additions and 1 million multiplications. Instead, we make two problems of 512, which we turn into 4 problems of size 256, which we turn into … turns into 512 problems of size 2. The table below outlines this computational complexity.

Basic Operations
Compared to
1
0
1
2
4
4
16
8
64
16
256
32
1024
64
4096
128
16384
256
65536
512
262144
1024
1048576

The table helps us to understand why it is “fast,” at least in comparison to DFT. Without the FFT, applying Fourier analysis to data is generally not practical.