Haskell FFT posts
The Discrete Fourier Transform Introduction to the DFT and a naïve implementation.
Matrix factorisation The Cooley-Tukey approach to factorising Fourier matrices.
Cooley-Tukey for Powers of Two The “textbook” Cooley-Tukey algorithm for powers-of-two input lengths.
A Simple Application Audio filtering example.
Transforming Vectors of Arbitrary Lengths Extending the Cooley-Tukey idea to arbitrary input lengths.
Implementing the Mixed-Radix FFT Haskell code (and testing) for the arbitrary length Cooley-Tukey algorithm.
Where We’ve Got To, Where We’re Going Taking stock.
Benchmarking Experiments Benchmarking with Criterion, and a plan for optimisation.
Prime-Length FFT With Rader’s Algorithm Dealing with prime input lengths— some number theory, some group theory, and achieving $O(N \log N)$ scaling.
Building a package Code organisation.
Optimisation Part 1 Mutable vectors, unboxing.
Optimisation Part 2 Plan generation: heuristics and empirical plan selection.
Optimisation Part 3 Improvements to Rader’s algorithm, compiler flags, final benchmarking.
Wrap-up What we’ve done, lessons learned, what’s left to do.