All listed libraries support forward/backward, complex-to-complex, and real-to-complex transforms unless otherwise noted. I won’t include benchmarks for performance or accuracy because your application’s usage will vary.
Library | Date of first release | License | Implementation | Types | Dims | Andrew’s notes |
---|---|---|---|---|---|---|
CPU libraries | ||||||
FFTW | 1997 | GPLv2+ or commercial | C generated with OCaml | double, single, long double, quad | 1-N | Large dependency but included on most Linux distros. Very fast, very accurate. |
KISS FFT | 2003 | BSD | C | any with macro | 1-2 | |
pffft | 2011 | FFTPACK, similar to BSD | C | single | 1 | Written by Julien Pommier, co-developer of Pianoteq. Currently used by VCV Rack. Very fast given its small size, due to manual SIMD up to AVX. |
marton78’s pffft fork | 2015 | same as pffft | C | single, double | 1 | |
pocketfft | 2018 | BSD | C | double | 1 | |
pocketfft C++ | 2019 | BSD | C++ header-only | any via templates | 1-N | No state needed, uses global caching instead. 2+ dimension supports C++ multithreading. Now used by Numpy/Scipy. |
FFTS | 2001 | BSD | C | single | 1-N | |
ffmpeg libavcodev | 2000 | GPLv2.1+ | C | single, fixed-32 | 1 | Initially written by Fabrice Bellard. |
Ooura’s FFT | 1996 | custom open-source | C and Fortran77 versions | double | 1 | |
FFTE | 2000 | custom open-source | Fortran77 and Nvidia CUDA (GPU) | ? | 1-3 | |
FFTReal | 1999 | WTFPL | C++ | any via templates | 1-N | |
FFTPACK | 1982 | public domain | Fortran translated to C | single | 1 | Grandfather of many other FFT libraries. Included for history, not recommended for modern use. |
KFR | 2016 | GPLv2+ or commercial | C++ | any via templates | 1 | Includes many other DSP routines. |
GNU Scientific Library | 1996 | GPLv3 | C | double | 1 | Includes many other numerical routines. |
Intel MKL | 2003 | freeware | ? | single, double | 1-N | Probably the fastest on this list for Intel CPUs. |
Apple vDSP | ~2001 | freeware | ? | single, double | 1-2 | Only for Apple Mac. |
muFFT | 2015 | MIT | C | single | 1-2 | |
meow_fft | 2017 | 0-Clause BSD | C header-only | single | 1 | |
wareya fft | 2017 | public domain | C header-only | double | 1 | No real-to-complex. |
dj_fft (for CPU) | 2019 | public domain or MIT | C++ header-only | any via templates | 1-3 | No real-to-complex. |
minfft | 2018 | MIT | C | single, double, long double | 1-3 | |
GPU libraries | ||||||
cuFFT | ? | freeware | Nvidia CUDA (GPU) | single, double | 1-N | |
clFFT | 2013 | Apache-2.0 | OpenCL (GPU) | single, double | 1-N | |
GLFFT | 2015 | MIT | OpenGL GLSL (GPU) | single, half-single | 1-2 | |
dj_fft (for GPU) | 2019 | public domain or MIT | C++ header-only, OpenGL GLSL (GPU) | single | 1-3 | No real-to-complex. |
Distributed memory libraries | ||||||
FFTW++ | 2004 | GPLv3+ | C++ | double? | 1-3 | |
fftMPI | <=2018 | BSD | C++ | single, double | 2-3 | 1D FFTs computed by FFTW, MKL, or KISS FFT. |
AccFFT | 2015 | GPLv2+ | C++ | double | 1-3 | |
SWFFT | 2017 | custom open-source | C++ | |||
P3DFFT | ||||||
pfft |
Comment below or email support@vcvrack.com for corrections or to recommend a missing library.