We introduce eFFT, an efficient method for the calculation of the exact Fourier transform of an asynchronous event stream. It is based on keeping the matrices involved in the Radix-2 FFT algorithm in a tree data structure and updating them with the new events, extensively reusing computations, and avoiding unnecessary calculations while preserving exactness. eFFT can operate event-by-event, requiring for each event only a partial recalculation of the tree since most of the stored data are reused. It can also operate with event packets, using the tree structure to detect and avoid unnecessary and repeated calculations when integrating the different events within each packet to further reduce the number of operations.
eFFT is provided as a header-only file for easy integration and relies solely on C++ standard and Eigen3 libraries.
Note: FFTW3 served as the benchmark for testing and evaluation. To enable it, define
EFFT_USE_FFTW3during compilation (e.g.,-DEFFT_USE_FFTW3).
Here's a minimal working example:
And another example handling event packets:
Please refer to the official documentation for more details.
The eFFT library also provides Python bindings for seamless integration into Python-based workflows. These bindings are built using nanobind and offer the same functionality as the C++ library. You can build and install the bindings using the following commands:
Here's an example of how to use the Python bindings:
If you use this work in an academic context, please cite the following publication:
R. Tapia, J.R. Martínez-de Dios, A. Ollero eFFT: An Event-based Method for the Efficient Computation of Exact Fourier Transforms, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2024.
Distributed under the GPLv3 License. See LICENSE for more information.