TimeToFrequencyDomainOperations

Trait TimeToFrequencyDomainOperations 

Source
pub trait TimeToFrequencyDomainOperations<S, T>: ToFreqResult
where S: ToSliceMut<T>, T: RealNumber,
{ // Required methods fn plain_fft<B>(self, buffer: &mut B) -> Self::FreqResult where B: for<'a> Buffer<'a, S, T>; fn fft<B>(self, buffer: &mut B) -> Self::FreqResult where B: for<'a> Buffer<'a, S, T>; fn windowed_fft<B>( self, buffer: &mut B, window: &dyn WindowFunction<T>, ) -> Self::FreqResult where B: for<'a> Buffer<'a, S, T>; }
Expand description

Defines all operations which are valid on DataVecs containing time domain data.

§Failures

All operations in this trait set self.len() to 0 if the vector isn’t in time domain.

Required Methods§

Source

fn plain_fft<B>(self, buffer: &mut B) -> Self::FreqResult
where B: for<'a> Buffer<'a, S, T>,

Performs a Fast Fourier Transformation transforming a time domain vector into a frequency domain vector.

This version of the FFT neither applies a window nor does it scale the vector.

§Example
use std::f32;
use basic_dsp_vector::*;
let vector = vec!(Complex::new(1.0, 0.0), Complex::new(-0.5, 0.8660254), Complex::new(-0.5, -0.8660254)).to_complex_time_vec();
let mut buffer = SingleBuffer::new();
let result = vector.plain_fft(&mut buffer);
let actual = &result[..];
let expected = &[Complex::new(0.0, 0.0), Complex::new(3.0, 0.0), Complex::new(0.0, 0.0)];
assert_eq!(actual.len(), expected.len());
for i in 0..actual.len() {
       assert!((actual[i] - expected[i]).norm() < 1e-4);
}
Source

fn fft<B>(self, buffer: &mut B) -> Self::FreqResult
where B: for<'a> Buffer<'a, S, T>,

Performs a Fast Fourier Transformation transforming a time domain vector into a frequency domain vector.

§Example
use std::f32;
use basic_dsp_vector::*;
let vector = vec!(Complex::new(1.0, 0.0), Complex::new(-0.5, 0.8660254), Complex::new(-0.5, -0.8660254)).to_complex_time_vec();
let mut buffer = SingleBuffer::new();
let result = vector.fft(&mut buffer);
let actual = &result[..];
let expected = &[Complex::new(0.0, 0.0), Complex::new(0.0, 0.0), Complex::new(3.0, 0.0)];
assert_eq!(actual.len(), expected.len());
for i in 0..actual.len() {
       assert!((actual[i] - expected[i]).norm() < 1e-4);
}
Source

fn windowed_fft<B>( self, buffer: &mut B, window: &dyn WindowFunction<T>, ) -> Self::FreqResult
where B: for<'a> Buffer<'a, S, T>,

Applies a FFT window and performs a Fast Fourier Transformation transforming a time domain vector into a frequency domain vector.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<S, T, N, D> TimeToFrequencyDomainOperations<S, T> for DspVec<S, T, N, D>
where DspVec<S, T, N, D>: ToFreqResult, <DspVec<S, T, N, D> as ToFreqResult>::FreqResult: RededicateForceOps<DspVec<S, T, N, D>> + FrequencyDomainOperations<S, T>, S: ToSliceMut<T>, T: RealNumber, N: NumberSpace, D: TimeDomain,