Skip to main content

ifft

Function ifft 

Source
pub fn ifft(a: &mut [Complex<f64>])
Examples found in repository?
crates/competitive/src/math/fast_fourier_transform.rs (line 417)
405pub fn inverse_transform_real(mut f: Vec<Complex<f64>>, len: usize) -> Vec<f64> {
406    let n = len.max(4).next_power_of_two();
407    assert_eq!(f.len(), n / 2);
408    f[0] = Complex::new((f[0].re + f[0].im) * 0.5, (f[0].re - f[0].im) * 0.5);
409    f[n / 4] = f[n / 4].conjugate();
410    real_twiddles(n, true, |k, wk| {
411        let c = wk.transpose().conjugate() + 1.;
412        let d = c * (f[k] - f[n / 2 - k].conjugate()) * 0.5;
413        f[k] -= d;
414        f[n / 2 - k] += d.conjugate();
415    });
416    bit_reverse(&mut f);
417    ifft(&mut f);
418    let inv = 1. / (n / 2) as f64;
419    (0..len)
420        .map(|i| inv * if i & 1 == 0 { f[i / 2].re } else { f[i / 2].im })
421        .collect()
422}