You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Public domain single header fast Fourier transform for arbitrary array sizes,
in about 100 lines of C code, which should be straightforward to understand.
A C++ implementation using the stdlib complex and vector is also provided in rfft.hpp.
Algorithms
The classic Cooley-Turkey algorithm
is used in place (without additional allocations) for arrays of size 2^k.
For more more general ones, Bluestein algorithm
is used. It utilizes the binomial identity 2nk = n^2 + k^2 - (k - n)^2 to
express the Fourier transform as a convolution of two sequences,
which can be computed using the algorith for the power of 2 sizes.
It needs to allocate two auxillary array of size at most 4n + 3.
The runnig time is always O(n log(n)). However, if the speed is crucial,
more optimized libraries like FFTW are recommended.
Inspiration
Inspired by Project Nayuki,
but written in a simpler and arguably more straightforward way.
License
Public domain.
About
Reasonably fast Fourier transform in a single header for C and C++