A C++11 header-only FFT library with support for multidimensional arrays, DCT/DST, and optimized performance for large prime factors.
PocketFFT is a header-only Fast Fourier Transform library for C++11 that provides high-performance, multidimensional FFT, DCT, and DST implementations. It solves the need for a modern, accurate, and flexible FFT library in C++ projects, especially those dealing with scientific computing or signal processing where transform sizes may include large prime factors.
C++ developers working on scientific computing, signal processing, audio analysis, or numerical simulation projects that require efficient Fourier transforms, including support for multidimensional data and various transform types.
Developers choose PocketFFT for its strict C++11 compliance, excellent numerical accuracy, support for challenging transform sizes via Bluestein's algorithm, and its flexible, header-only design that avoids external dependencies while offering a comprehensive feature set.
Fork of https://gitlab.mpcdf.mpg.de/mtr/pocketfft to simplify external contributions
Implements advanced techniques like angle reduction to [0; pi/4] and symmetric evaluations to minimize trigonometric errors, ensuring high precision in transforms as detailed in the README.
Supports transforms on arbitrary axes within N-dimensional arrays with optional multi-threading, making it ideal for scientific data processing where selective axis transformation is needed.
Includes complex FFTs, real FFTs with multiple conventions, DCT, DST types I-IV, and Hartley transforms, covering a comprehensive range of use cases beyond basic FFTs.
As a strictly C++11 compliant header-only library, it's easy to integrate into projects without external dependencies or complex build systems, simplifying deployment.
Requires manual management of strides, shapes, and axes in bytes, which can be error-prone and less intuitive compared to libraries with higher-level abstractions or automatic memory handling.
Multi-threading is only supported for multidimensional transforms and disabled for 1D transforms, as noted in the README, potentially limiting performance scalability in single-axis applications.
Plan caching is turned off by default (POCKETFFT_CACHE_SIZE undefined) to save memory, meaning repeated 1D transforms may incur plan creation overhead unless explicitly configured, impacting performance.
The README is technically dense with minimal examples or tutorials, assuming prior FFT knowledge, which can make onboarding difficult for developers new to Fourier transforms.
A Collection of Useful C++ Classes for Digital Signal Processing
a Fast Fourier Transform (FFT) library that tries to Keep it Simple, Stupid
DSP IIR realtime filter library written in C++
C Implementation of 1D and 2D Wavelet Transforms (DWT,SWT and MODWT) along with 1D Wavelet packet Transform and 1D Continuous Wavelet Transform.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.