pub struct GoodThomasAlgorithmDoubleButterfly<T> { /* private fields */ }
Expand description

Implementation of the Good-Thomas Algorithm, specialized for the case where both inner FFTs are butterflies

This algorithm factors a size n FFT into n1 * n2, where GCD(n1, n2) == 1

Conceptually, this algorithm is very similar to the Mixed-Radix FFT, except because GCD(n1, n2) == 1 we can do some number theory trickery to reduce the number of floating-point multiplications and additions. It typically performs better than Mixed-Radix Double Butterfly Algorithm, especially at small sizes.

// Computes a forward FFT of size 56, using the Good-Thoma Butterfly Algorithm
use std::sync::Arc;
use rustfft::algorithm::GoodThomasAlgorithmDoubleButterfly;
use rustfft::algorithm::butterflies::{Butterfly7, Butterfly8};
use rustfft::FFT;
use rustfft::num_complex::Complex;
use rustfft::num_traits::Zero;

let mut input:  Vec<Complex<f32>> = vec![Zero::zero(); 56];
let mut output: Vec<Complex<f32>> = vec![Zero::zero(); 56];

// we need to find an n1 and n2 such that n1 * n2 == 56 and GCD(n1, n2) == 1
// n1 = 7 and n2 = 8 satisfies this
let inner_fft_n1 = Arc::new(Butterfly7::new(false));
let inner_fft_n2 = Arc::new(Butterfly8::new(false));

// the good-thomas FFT length will be inner_fft_n1.len() * inner_fft_n2.len() = 56
let fft = GoodThomasAlgorithmDoubleButterfly::new(inner_fft_n1, inner_fft_n2);
fft.process(&mut input, &mut output);

Implementations

Creates a FFT instance which will process inputs/outputs of size width_fft.len() * height_fft.len()

GCD(n1.len(), n2.len()) must be equal to 1

Trait Implementations

Computes an FFT on the input buffer and places the result in the output buffer. Read more
Divides the input and output buffers into chunks of length self.len(), then computes an FFT on each chunk. Read more
Returns false if this instance computes forward FFTs, true for inverse FFTs
The FFT size that this algorithm can process

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.