Skip to main content

Fft

Trait Fft 

Source
pub trait Fft<T: FftNum>:
    Length
    + Direction
    + Sync
    + Send {
    // Required methods
    fn process_with_scratch(
        &self,
        buffer: &mut [Complex<T>],
        scratch: &mut [Complex<T>],
    );
    fn process_outofplace_with_scratch(
        &self,
        input: &mut [Complex<T>],
        output: &mut [Complex<T>],
        scratch: &mut [Complex<T>],
    );
    fn process_immutable_with_scratch(
        &self,
        input: &[Complex<T>],
        output: &mut [Complex<T>],
        scratch: &mut [Complex<T>],
    );
    fn get_inplace_scratch_len(&self) -> usize;
    fn get_outofplace_scratch_len(&self) -> usize;
    fn get_immutable_scratch_len(&self) -> usize;

    // Provided method
    fn process(&self, buffer: &mut [Complex<T>]) { ... }
}
Expand description

Trait for algorithms that compute FFTs.

This trait has a few methods for computing FFTs. Its most conveinent method is process(slice). It takes in a slice of Complex<T> and computes a FFT on that slice, in-place. It may copy the data over to internal scratch buffers if that speeds up the computation, but the output will always end up in the same slice as the input.

Required Methods§

Source

fn process_with_scratch( &self, buffer: &mut [Complex<T>], scratch: &mut [Complex<T>], )

Divides buffer into chunks of size self.len(), and computes a FFT on each chunk.

Uses the scratch buffer as scratch space, so the contents of scratch should be considered garbage after calling.

§Panics

This method panics if:

  • buffer.len() % self.len() > 0
  • buffer.len() < self.len()
  • scratch.len() < self.get_inplace_scratch_len()
Source

fn process_outofplace_with_scratch( &self, input: &mut [Complex<T>], output: &mut [Complex<T>], scratch: &mut [Complex<T>], )

Divides input and output into chunks of size self.len(), and computes a FFT on each chunk.

This method uses both the input buffer and scratch buffer as scratch space, so the contents of both should be considered garbage after calling.

This is a more niche way of computing a FFT. It’s useful to avoid a copy_from_slice() if you need the output in a different buffer than the input for some reason. This happens frequently in RustFFT internals, but is probably less common among RustFFT users.

For many FFT sizes, self.get_outofplace_scratch_len() returns 0

§Panics

This method panics if:

  • output.len() != input.len()
  • input.len() % self.len() > 0
  • input.len() < self.len()
  • scratch.len() < self.get_outofplace_scratch_len()
Source

fn process_immutable_with_scratch( &self, input: &[Complex<T>], output: &mut [Complex<T>], scratch: &mut [Complex<T>], )

Divides input and output into chunks of self.len(), and computes a FFT on each chunk while keeping input untouched.

This method uses the scratch buffer as scratch space, so the contents should be considered garbage after calling.

§Panics

This method panics if:

  • output.len() ! input.len()
  • input.len() % self.len() > 0
  • input.len() < self.len()
  • scratch.len() < get_immutable_scratch_len()
Source

fn get_inplace_scratch_len(&self) -> usize

Returns the size of the scratch buffer required by process_with_scratch

For most FFT sizes, this method will return self.len(). For a few small sizes it will return 0, and for some special FFT sizes (Sizes that require the use of Bluestein’s Algorithm), this may return a scratch size larger than self.len(). The returned value may change from one version of RustFFT to the next.

Source

fn get_outofplace_scratch_len(&self) -> usize

Returns the size of the scratch buffer required by process_outofplace_with_scratch

For most FFT sizes, this method will return 0. For some special FFT sizes (Sizes that require the use of Bluestein’s Algorithm), this may return a scratch size larger than self.len(). The returned value may change from one version of RustFFT to the next.

Source

fn get_immutable_scratch_len(&self) -> usize

Returns the size of the scratch buffer required by process_immutable_with_scratch

For most FFT sizes, this method will return something between self.len() and self.len() * 2. For a few small sizes it will return 0, and for some special FFT sizes (Sizes that require the use of Bluestein’s Algorithm), this may return a scratch size larger than self.len(). The returned value may change from one version of RustFFT to the next.

Provided Methods§

Source

fn process(&self, buffer: &mut [Complex<T>])

Computes a FFT in-place.

Convenience method that allocates a Vec with the required scratch space and calls self.process_with_scratch. If you want to re-use that allocation across multiple FFT computations, consider calling process_with_scratch instead.

§Panics

This method panics if:

  • buffer.len() % self.len() > 0
  • buffer.len() < self.len()

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for BluesteinsAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix2xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix3xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix4xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix5xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix6xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix7xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix8xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix9xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix11xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix12xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for MixedRadix16xnAvx<A, T>

Source§

impl<A: AvxNum, T: FftNum> Fft<T> for RadersAvx2<A, T>

Source§

impl<S: SseNum, T: FftNum> Fft<T> for SseRadix4<S, T>

Source§

impl<T: FftNum> Fft<T> for BluesteinsAlgorithm<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly1<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly2<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly3<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly4<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly5<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly5Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly5Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly6<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly7<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly7Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly7Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly8<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly8Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly8Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly9<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly9Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly9Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly11<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly11Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly11Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly12<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly12Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly12Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly13<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly16<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly16Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly16Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly17<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly18Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly19<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly23<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly24<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly24Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly24Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly27<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly27Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly27Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly29<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly31<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly32<T>

Source§

impl<T: FftNum> Fft<T> for Butterfly32Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly32Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly36Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly36Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly48Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly54Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly64Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly64Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly72Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly128Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly128Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly256Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly256Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Butterfly512Avx64<f64>

Source§

impl<T: FftNum> Fft<T> for Butterfly512Avx<f32>

Source§

impl<T: FftNum> Fft<T> for Dft<T>

Source§

impl<T: FftNum> Fft<T> for GoodThomasAlgorithm<T>

Source§

impl<T: FftNum> Fft<T> for GoodThomasAlgorithmSmall<T>

Source§

impl<T: FftNum> Fft<T> for MixedRadix<T>

Source§

impl<T: FftNum> Fft<T> for MixedRadixSmall<T>

Source§

impl<T: FftNum> Fft<T> for RadersAlgorithm<T>

Source§

impl<T: FftNum> Fft<T> for Radix3<T>

Source§

impl<T: FftNum> Fft<T> for Radix4<T>

Source§

impl<T: FftNum> Fft<T> for RadixN<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly1<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly2<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly3<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly4<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly5<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly6<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly7<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly8<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly9<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly10<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly11<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly12<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly13<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly15<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly16<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly17<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly19<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly23<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly24<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly29<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly31<T>

Source§

impl<T: FftNum> Fft<T> for SseF32Butterfly32<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly1<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly2<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly3<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly4<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly5<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly6<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly7<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly8<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly9<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly10<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly11<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly12<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly13<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly15<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly16<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly17<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly19<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly23<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly24<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly29<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly31<T>

Source§

impl<T: FftNum> Fft<T> for SseF64Butterfly32<T>