Struct rustfft::algorithm::GoodThomasAlgorithmDoubleButterfly[][src]

pub struct GoodThomasAlgorithmDoubleButterfly<T> { /* fields omitted */ }

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);

Methods

impl<T: FFTnum> GoodThomasAlgorithmDoubleButterfly<T>
[src]

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

impl<T: FFTnum> FFT<T> for GoodThomasAlgorithmDoubleButterfly<T>
[src]

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

impl<T> Length for GoodThomasAlgorithmDoubleButterfly<T>
[src]

The FFT size that this algorithm can process

impl<T> IsInverse for GoodThomasAlgorithmDoubleButterfly<T>
[src]

Returns false if this instance computes forward FFTs, true for inverse FFTs

Auto Trait Implementations