JA EN
LearnNumerical Computing
·★ MEMBER·PAPER·9 min read

The FFT from Scratch — Why Convolution Turns into Multiplication

A from-zero walk through the Fourier transform: a smoothie metaphor, the spinning-needle intuition, the DFT formula, and the divide-and-conquer trick behind the FFT — ending with the polynomial-multiplication view that makes the convolution theorem feel obvious.

ModalitytextTasknumerical

An Algorithm for the Machine Calculation of Complex Fourier Series (Cooley & Tukey

Primary source — what this article is built on

undefined2026-08-13

An Algorithm for the Machine Calculation of Complex Fourier Series (Cooley & Tukey"doi:10.1090/S0025-5718-1965-0178586-1
https://www.ams.org/journals/mcom/1965-19-090/S0025-5718-1965-0178586-1/"1965)

Your Ear Already Does This

Play a C-major chord on a piano — three keys at once — and the air carries a single wave. A microphone records exactly that: one long column of numbers, "air pressure at each instant," with all three notes dissolved into it. And yet your ear pulls the three notes back apart without effort.

The Fourier transform is that trick, written down as mathematics: it unmixes a tangled wave into "how much of each pitch is inside." The FFT (Fast Fourier Transform) is the algorithm that makes the computation dramatically cheaper. It spread through the world via Cooley and Tukey's 1965 paper (the core idea appears in Gauss's notebooks from the early 1800s), and it routinely tops lists of the most important algorithms of the 20th century. It is the beating heart of signal processing.

The Metaphor: Guessing a Smoothie's Recipe

There are two "languages" for describing a signal.

The Fourier transform is a machine that takes one sip of the smoothie and recites the complete recipe. The inverse transform rebuilds the smoothie from the recipe. Nothing is lost in either direction — they are the same information written in two languages.

Why bother translating? Because different operations are easy in different languages. "Keep the low notes, remove the hiss" is hopeless to express directly on a waveform, but on the recipe side it's just "delete the high-frequency rows." The same is true of convolution, the subject of this article's subtitle: heavy labor in the time domain, a plain multiplication in the frequency domain.

The Intuition: Winding a Signal Around a Spinning Needle

So how do you measure "how much of frequency ff is inside"? This is the most beautiful part of the whole subject.

Picture a clock hand whose speed you control. To probe frequency ff, wind the signal around a needle that spins ff times per second, plotting it on a disc — at each instant, place a weight at the needle's tip, heavy when the signal is large, light when it is small.

The distance of that drift is the strength of the component; its direction is the timing offset (the phase). To describe rotation with a single number we use the complex exponential eiθe^{i\theta} (=cosθ+isinθ= \cos\theta + i\sin\theta, the point on the unit circle at angle θ\theta). Complex numbers show up not to make things harder, but because they let "rotate" be written as one multiplication.

The Machinery: the Discrete Fourier Transform (DFT)

Computers don't hold continuous waves; they hold NN samples x0,x1,,xN1x_0, x_1, \dots, x_{N-1} measured at regular intervals. The tool that unmixes them is the discrete Fourier transform (DFT), and its entire definition is one line:

Xk=n=0N1xne2πikn/NX_k = \sum_{n=0}^{N-1} x_n \, e^{-2\pi i \, kn/N}
(1)

Put in words: "wind the signal around a needle that makes exactly kk full turns across the NN samples, and compute the center of mass (times NN)." Here xnx_n is the signal value at time step nn, e2πikn/Ne^{-2\pi i\,kn/N} is the direction the needle points at step nn, and the sum is the act of loading all the weights and finding the balance point. Sweep kk from 00 to N1N-1 and you get every component, from the slowest wave to the fastest.

Each XkX_k is a complex number: its magnitude is the component's strength, its angle is the phase. The spectrum display in any audio app is simply Xk|X_k| plotted across kk.

Computed Naively, That's N² Operations

Take equation (1) literally and each XkX_k costs NN multiply-adds, and there are NN values of kk — about N2N^2 operations total. One second of CD-quality audio is 44,100 samples, and 44100244100^2 is roughly 1.9 billion operations. For one second of sound. That rules out real-time audio, video frames arriving dozens of times per second, and most of modern communications.

Just how different N2N^2 and NlogNN \log N are is better felt than told:

FIG 1How O(n²) and O(n log n) pull apart as n grows. Switch to the log scale and the FFT's contribution stops looking like "faster" and starts looking like "possible versus impossible"

Now for the main event: the trick that crushes N2N^2 down to NlogNN \log N, and the payoff promised in the title — why convolution becomes multiplication.

The Cooley–Tukey idea is divide and conquer. Split the samples into the even-indexed ones () and the odd-indexed ones (). Split the sum in equation (1) the same way, tidy up with the laws of exponents, and something remarkably clean falls out. Writing for the size- DFT of the even samples and for the DFT of the odd sam

What's behind this

§

Members-only from here

371 walkthroughs, 26 textbook chapters, 48 student units and 6 close readings — all included for $4.99/mo, with three new explainers every day. Cancel any time; access runs to the end of the period.

Already a member? Sign in to keep reading

References

  1. An Algorithm for the Machine Calculation of Complex Fourier Series (Cooley & Tukey. "doi:10.1090/S0025-5718-1965-0178586-1
  2. https://www.ams.org/journals/mcom/1965-19-090/S0025-5718-1965-0178586-1/". 1965)

This article is written from the source paper above. Where they differ, the original is authoritative.

Comments

Sign in to comment