# Lecture 9: The FFT

The FFT is a way of organizing the computations necessary to compute the DFT in such a way that the same work is done, but with less effort. I like to think of this as a bicycle analogy. If I ride my bike from home to work, I use the same engine (me!) as if I walk in. But, by organizing my efforts better (by means of wheels and gears), the engine is able to work more efficiently, and I get here faster.

To gauge the improvement, let's first approximate how many computations
are necessary to compute the DFT. If I have
data points, I can
compute one of the DFT outputs by the formula

There are terms in the summation, each of which requires a multiply (naturally, in the name of efficiency we would precompute and store all the complex exponential factors). So each points requires multiply-accumulate operations. There are points in the transform, so the overall DFT takes about multiply accumulates. If , this turns out to be a whopping 1,048,576 multiply-accumulates. We would say the complexity is , where the means ``order of'', which is to say, ``in the ballpark of.''

The FFT is able to reduce the computational requirements to about
. For the case of
this turns is 10240
operations, which is more than 100 times faster! And it provides
exactly the same result. This speedup has enabled some algorithms to
be developed and successfully deployed that never could have
happened. Note that this speedup is entirely
*
independent
*
of the
technology. It was 100 times faster 20 years ago, and will be 100
times faster 20 years from now. The discovery of the FFT laid the
foundation for modern DSP, as well as a variety of computational
disciplines. One of the morals of this story is that it
pays to pay attention to how the computations are done!

We will not go into two many details of how the FFT works -- we need to leave something to ECE 5630. We can, however, give a brief summary. The basic technique is divide and conquer: we take a problem with points, and divide it into two problems of points. Since the complexity goes up as the square of the number of points, each of these problems is four times as easy as the problem. If we can put these two problems together to give the overall answer, then we have saved computations. We then take each of these problems and split them into problems, each of which is easier, and so on. At every level, we split the number of points that go into the computation, until we get down to a DFT in just two points. This is easy to compute. This subdivision shows why the number of points must be a power of two: we split by two at every stage in the process. This also shows why the complexity has the factor of in it: we can split by two that many times.

All good routines to numerically compute the DFT are based upon some form of FFT.