Real-to-complex FFT and complex-to-real iFFT based on RustFFT
This library is a wrapper for RustFFT that enables faster computations when the input data is real. It packs a 2N long real vector into an N long complex vector, which is transformed using a standard FFT. It then post-processes the result to give only the first half of the complex spectrum, as an N+1 long complex vector.
The iFFT goes through the same steps backwards, to transform an N+1 long complex spectrum to a 2N long real result.
The speed increase compared to just converting the input to a 2N long complex vector and using a 2N long FFT depends on the length f the input data. The largest improvements are for long FFTs and for lengths over around 1000 elements there is an improvement of about a factor 2. The difference shrinks for shorter lengths, and around 100 elements there is no longer any difference.
The full documentation can be generated by rustdoc. To generate and view it run:
cargo doc --open
To run a set of benchmarks comparing real-to-complex FFT with standard complex-to-complex, type:
cargo bench
The results are printed while running, and are compiled into an html report containing much more details.
To view, open target/criterion/report/index.html
in a browser.
Transform a vector, and then inverse transform the result. ```rust use realfft::{ComplexToReal, RealToComplex}; use rustfft::numcomplex::Complex; use rustfft::numtraits::Zero;
// make dummy input vector, spectrum and output vectors
let mut indata = vec![0.0f64; 256];
let mut spectrum: Vec
//create an FFT and forward transform the input data
let mut r2c = RealToComplex::
// create an iFFT and inverse transform the spectum
let mut c2r = ComplexToReal::
The realfft
crate requires rustc version 1.34 or newer.
License: MIT