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

Implementation of the Good-Thomas Algorithm, specialized for smaller input sizes

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

Conceptually, this algorithm is very similar to MixedRadix, except because GCD(n1, n2) == 1 we can do some number theory trickery to reduce the number of floating point operations. It typically performs better than MixedRadixSmall, especially at the smallest sizes.

// Computes a forward FFT of size 56 using GoodThomasAlgorithmSmall
use std::sync::Arc;
use rustfft::algorithm::GoodThomasAlgorithmSmall;
use rustfft::algorithm::butterflies::{Butterfly7, Butterfly8};
use rustfft::{Fft, FftDirection};
use rustfft::num_complex::Complex;

let mut buffer = vec![Complex{ re: 0.0f32, im: 0.0f32 }; 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(FftDirection::Forward));
let inner_fft_n2 = Arc::new(Butterfly8::new(FftDirection::Forward));

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

Implementations

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

GCD(width_fft.len(), height_fft.len()) must be equal to 1

Trait Implementations

Returns FftDirection::Forward if this instance computes forward FFTs, or FftDirection::Inverse for inverse FFTs
Divides input and output into chunks of size self.len(), and computes a FFT on each chunk. Read more
Divides buffer into chunks of size self.len(), and computes a FFT on each chunk. Read more
Returns the size of the scratch buffer required by process_with_scratch Read more
Returns the size of the scratch buffer required by process_outofplace_with_scratch Read more
Computes a FFT in-place. Read more
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.