An algorithm to solve the FFT- Fast Fourier Transform.
How it works
Radix-2 FFT Algorithms
Dividing the DFT - Discrete Fourier Transform problem into smaller successively smaller DFTs, then solving recursively.
X(k)&=\sum^{N-1}_{n=0}x[n]e^{-jw\pi nk/N} \\ X(k)&=\sum_{n=0}^{N-1}x[n]W^{nk}_{N} \end{align}We do this by exploiting the symmetry and periodicity of
W_{N}^{k+N} &=e^{-j2\pi(k+N)/N}=W_{N}^k \\ W_{N}^{k+N/2} &=e^{-j2\pi(k+N/2)/N}=-W_{N}^k \\ W_{N}^{2k} &=e^{-j2\pi k/(N/2)}=W_{N/2}^k \end{align}Now, if we assume that , and split our signal, into even and odd numbers:
f_{1}[n] &= x[2n] \\ f_{2}[n] &= x[2n+1] \end{align}We can split our DFT into both odd and even values of .
X(k) &= \sum_{\ce{ n even }}x[n]W_{N}^{nk} +\sum_{\ce{ n odd }}x[n]W^{nk}_{N} \\ X(k) &=\sum_{m=0}^{N/2-1}x[2m]W_{N}^{2mk}+\sum_{m=0}^{N/2-1}x[2m+1]W_{N}^{(2m+1)k} \end{align}Which is the same as
For .
We have now reduced the problem into two subproblems of size . Since and are periodic (?), is also periodic. This reduces the number of operations to
If we continue doing this, aka dividing in two again and again
We can reduce the problem times, giving us a total computational complexity of
\frac{N}{2}\log_{2}N \; \; \ce{multiplications } \\ N\log_{2}N \; \; \ce{ Additions } \end{align}This gives us a final model which does the computations as an In-Place Algorithm Runtime -
Link to original