A simple, portable Fast Fourier Transform (FFT) library for C with support for fixed and floating point data types.
KISS FFT is a Fast Fourier Transform library written in C that implements mixed-radix FFT algorithms. It solves the need for a simple, portable FFT implementation that supports both fixed and floating point data types with minimal licensing restrictions. The library is designed to be easily incorporated into C programs while maintaining reasonable performance.
C/C++ developers working on signal processing, audio applications, or embedded systems who need a straightforward FFT implementation without the complexity of highly optimized libraries.
Developers choose KISS FFT for its simplicity, portability, and permissive licensing. Unlike larger, more complex FFT libraries, it offers a clean codebase (about 500 lines for the core) that's easy to understand and integrate, with support for multiple data types and build systems.
a Fast Fourier Transform (FFT) library that tries to Keep it Simple, Stupid
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Core routines are only about 500 lines for 1-D complex FFTs, making integration and auditing straightforward without bloat, as highlighted in comparisons with larger libraries.
Supports compilation with float, double, Q15, or Q31 samples via build flags, allowing adaptation to various precision needs across embedded and desktop platforms.
Uses a revised BSD license compatible with both open-source and commercial projects, reducing legal hurdles for integration into diverse codebases.
Offers both Make and CMake builds with configurable options like static/shared libraries and OpenMP support, ensuring easy adoption in different development environments.
Benchmarks show it's roughly half as fast as highly optimized libraries like FFTW, making it unsuitable for performance-critical applications where speed is paramount.
Real FFT optimization only works for even lengths, and fast convolution is unavailable for fixed-point data, limiting utility in specific signal processing tasks as noted in the TODO list.
The README admits gaps like undocumentated fast convolution methods and scaling issues, forcing developers to rely on code inspection or external resources for troubleshooting.