pub struct CFft1D<T> { /* private fields */ }
Expand description
Perform a complex-to-complex one-dimensional Fourier transform
When X is input array and Y is output array, the forward discrete Fourier transform of the one-dimensional array is
\[ \Large Y_k = \sum_{j=0}^{n-1} X_j e^{- \frac {2 \pi i j k}{n}} \]
also, the backward discrete Fourier transform of the one-dimensional array is
\[ \Large Y_k = \sum_{j=0}^{n-1} X_j e^{\frac {2 \pi i j k}{n}} \]
§Example
use num_complex::Complex;
use chfft::CFft1D;
fn main() {
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.forward(&input);
println!("the transform of {:?} is {:?}", input, output);
}
Implementations§
Source§impl<T: Float + FloatConst + NumAssign> CFft1D<T>
impl<T: Float + FloatConst + NumAssign> CFft1D<T>
Sourcepub fn new() -> Self
pub fn new() -> Self
Returns a instances to execute FFT
use chfft::CFft1D;
let mut fft = CFft1D::<f64>::new();
Sourcepub fn with_len(len: usize) -> Self
pub fn with_len(len: usize) -> Self
Returns a instances to execute length initialized FFT
use chfft::CFft1D;
let mut fft = CFft1D::<f64>::with_len(1024);
Sourcepub fn setup(&mut self, len: usize)
pub fn setup(&mut self, len: usize)
Reinitialize length
use chfft::CFft1D;
let mut fft = CFft1D::<f64>::with_len(1024);
// reinitialize
fft.setup(2048);
Sourcepub fn forward(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
pub fn forward(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
The 1 scaling factor forward transform
use chfft::CFft1D;
use num_complex::Complex;
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.forward(&input);
Sourcepub fn forward0(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
pub fn forward0(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
The 1 scaling factor forward transform
use chfft::CFft1D;
use num_complex::Complex;
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.forward0(&input);
Sourcepub fn forwardu(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
pub fn forwardu(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
The \(\frac 1 {\sqrt n}\) scaling factor forward transform
use chfft::CFft1D;
use num_complex::Complex;
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.forwardu(&input);
Sourcepub fn forwardn(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
pub fn forwardn(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
The \(\frac 1 {n}\) scaling factor forward transform
use chfft::CFft1D;
use num_complex::Complex;
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.forwardn(&input);
Sourcepub fn backward(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
pub fn backward(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
The \(\frac 1 n\) scaling factor backward transform
use chfft::CFft1D;
use num_complex::Complex;
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.backward(&input);
Sourcepub fn backward0(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
pub fn backward0(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
The 1 scaling factor backward transform
use chfft::CFft1D;
use num_complex::Complex;
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.backward0(&input);
Sourcepub fn backwardu(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
pub fn backwardu(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
The \(\frac 1 {\sqrt n}\) scaling factor backward transform
use chfft::CFft1D;
use num_complex::Complex;
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.backwardu(&input);
Sourcepub fn backwardn(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
pub fn backwardn(&mut self, source: &[Complex<T>]) -> Vec<Complex<T>>
The \(\frac 1 n\) scaling factor backward transform
use chfft::CFft1D;
use num_complex::Complex;
let input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
let output = fft.backwardn(&input);
Sourcepub fn forward0i(&mut self, source: &mut [Complex<T>])
pub fn forward0i(&mut self, source: &mut [Complex<T>])
The 1 scaling factor and in-place forward transform
use chfft::CFft1D;
use num_complex::Complex;
let mut input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
fft.forward0i(&mut input);
Sourcepub fn backward0i(&mut self, source: &mut [Complex<T>])
pub fn backward0i(&mut self, source: &mut [Complex<T>])
The 1 scaling factor and in-place backward transform
use chfft::CFft1D;
use num_complex::Complex;
let mut input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
fft.backward0i(&mut input);
Sourcepub fn forwardui(&mut self, source: &mut [Complex<T>])
pub fn forwardui(&mut self, source: &mut [Complex<T>])
The \(\frac 1 {\sqrt n}\) scaling factor and in-place forward transform
use chfft::CFft1D;
use num_complex::Complex;
let mut input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
fft.forwardui(&mut input);
Sourcepub fn backwardui(&mut self, source: &mut [Complex<T>])
pub fn backwardui(&mut self, source: &mut [Complex<T>])
The \(\frac 1 {\sqrt n}\) scaling factor and in-place backward transform
use chfft::CFft1D;
use num_complex::Complex;
let mut input = [Complex::new(2.0, 0.0), Complex::new(1.0, 1.0),
Complex::new(0.0, 3.0), Complex::new(2.0, 4.0)];
let mut fft = CFft1D::<f64>::with_len(input.len());
fft.backwardui(&mut input);