ifft function
Compute the one-dimensional inverse discrete Fourier Transform.
X
An ArrayComplex with the input return An ArrayComplex with IFFT output
References
- "Fast Fourier Transform". // https://rosettacode.org/wiki/Fast_Fourier_transform#C++. Retrieved 2019-07-23.
Examples
var X = ArrayComplex([
Complex(real: 4.0, imaginary: 0.0),
Complex(real: 1.0, imaginary: -2.41421356),
Complex(real: 0.0, imaginary: 0.0),
Complex(real: 1.0, imaginary: -0.41421356),
Complex(real: 0.0, imaginary: 0.0),
Complex(real: 1.0, imaginary: 0.41421356),
Complex(real: 0.0, imaginary: 0.0),
Complex(real: 1.0, imaginary: 2.41421356)
]);
print(ifft(X));
/* output:
ArrayComplex([
Complex(real: 1.00000000e+00, imaginary: 0.00000000e+00),
Complex(real: 9.99999999e-01, imaginary: -5.55111512e-17),
Complex(real: 1.00000000e+00, imaginary: 0.00000000e+00),
Complex(real: 9.99999999e-01, imaginary: -5.55111512e-17),
Complex(real: 0.00000000e+00, imaginary: 0.00000000e+00),
Complex(real: 8.39015857e-10, imaginary: 5.55111512e-17),
Complex(real: 0.00000000e+00, imaginary: 0.00000000e+00),
Complex(real: 8.39015857e-10, imaginary: 5.55111512e-17)
])
*/
Implementation
ArrayComplex ifft(ArrayComplex X) {
// conjugate the complex numbers
var XConj = arrayComplexConjugate(X);
// forward fft
var xImag = fft(XConj);
// conjugate the complex numbers again
xImag = arrayComplexConjugate(xImag);
// scale the numbers
xImag = arrayComplexDivisionToScalar(xImag, xImag.length);
return xImag;
}