Expand description

ndrustfft: n-dimensional complex-to-complex FFT, real-to-complex FFT and real-to-real DCT

This library is a wrapper for RustFFT, RustDCT and RealFft that enables performing FFTs and DCTs of complex- and real-valued data on n-dimensional arrays (ndarray).

ndrustfft provides Handler structs for FFT’s and DCTs, which must be provided alongside with the arrays to the respective functions (see below) . The Handlers implement a process function, which is a wrapper around Rustfft’s process. Transforms along the outermost axis are in general the fastest, while transforms along other axis’ will temporarily create copies of the input array.

Parallel

The library ships all functions with a parallel version which leverages the parallel iterators of the ndarray crate.

Available transforms

Complex-to-complex

Real-to-complex

Complex-to-real

Real-to-real

Example

2-Dimensional real-to-complex fft along first axis

use ndarray::{Array2, Dim, Ix};
use ndrustfft::{ndfft_r2c, Complex, R2cFftHandler};

let (nx, ny) = (6, 4);
let mut data = Array2::<f64>::zeros((nx, ny));
let mut vhat = Array2::<Complex<f64>>::zeros((nx / 2 + 1, ny));
for (i, v) in data.iter_mut().enumerate() {
    *v = i as f64;
}
let mut fft_handler = R2cFftHandler::<f64>::new(nx);
ndfft_r2c(
    &data.view(),
    &mut vhat.view_mut(),
    &mut fft_handler,
    0,
);

Versions

  • v0.3.0: Upgrade RealFft to 3.0.0 and RustDCT to 0.7
  • >= v0.2.2:

The first and last elements of real-to-complex transforms are per definition purely real. This is now enforced actively, by setting the complex part to zero - similar to numpys rfft.

Structs

A complex number in Cartesian form.

n-dimensional real-to-real Cosine Transform.

n-dimensional complex-to-complex Fourier Transform.

n-dimensional real-to-complex Fourier Transform.

Traits

Generic floating point number, implemented for f32 and f64

Defines an additive identity element for Self.

Functions

Real-to-real Discrete Cosine Transform of type 1 DCT-I (serial).

Real-to-real Discrete Cosine Transform of type 1 DCT-I (parallel).

Real-to-real Discrete Cosine Transform of type 2 DCT-2 (serial).

Real-to-real Discrete Cosine Transform of type 2 DCT-2 (parallel).

Real-to-real Discrete Cosine Transform of type 3 DCT-3 (serial).

Real-to-real Discrete Cosine Transform of type 3 DCT-3 (parallel).

Real-to-real Discrete Cosine Transform of type 4 DCT-4 (serial).

Real-to-real Discrete Cosine Transform of type 4 DCT-4 (parallel).

Complex-to-complex Fourier Transform (serial).

Complex-to-complex Fourier Transform (parallel).

Real-to-complex Fourier Transform (serial).

Real-to-complex Fourier Transform (parallel).

Complex-to-complex Inverse Fourier Transform (serial).

Complex-to-complex inverse Fourier Transform (parallel).

Complex-to-real inverse Fourier Transform (serial).

Complex-to-real inverse Fourier Transform (parallel).