[−][src]Crate realfft
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.
Documentation
The full documentation can be generated by rustdoc. To generate and view it run:
cargo doc --open
Benchmarks
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.
Example
Transform a vector, and then inverse transform the result.
use realfft::{ComplexToReal, RealToComplex}; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; // make dummy input vector, spectrum and output vectors let mut indata = vec![0.0f64; 256]; let mut spectrum: Vec<Complex<f64>> = vec![Complex::zero(); 129]; let mut outdata: Vec<f64> = vec![0.0; 256]; //create an FFT and forward transform the input data let mut r2c = RealToComplex::<f64>::new(256).unwrap(); r2c.process(&mut indata, &mut spectrum).unwrap(); // create an iFFT and inverse transform the spectum let mut c2r = ComplexToReal::<f64>::new(256).unwrap(); c2r.process(&spectrum, &mut outdata).unwrap();
Compatibility
The realfft
crate requires rustc version 1.34 or newer.
Structs
ComplexToReal | An FFT that takes a real-valued input vector of length 2*N and transforms it to a complex spectrum of length N+1. |
FftError | Custom error returned by FFTs |
RealToComplex | An FFT that takes a real-valued input vector of length 2*N and transforms it to a complex spectrum of length N+1. |