real_ifft
template<class G1,class G2> inline void real_ifft(Vector<G1> &X, Vector<G2> &Y)
template<class G> inline typename DenseVector<typename Vector<G>::value_type::value_type >::self real_ifft(Vector<G> &X)
template<class G1,class G2> inline void real_ifft(const Matrix<G1> &X, Matrix<G2> &Y)
template<class G> inline typename DenseMatrix<typename Matrix<G>::value_type::value_type >::self real_ifft(const Matrix<G> &X)
IFFT of a complex-symmetric signal
Parameters
Y | The real IFFT |
X | A complex or half-complex signal |
Remarks
The complex input signal is supposed to correspond to the FFT of a real signal, and therefore to respect the following symmetry property:
Y[N-i] = conj(Y[i])
Only the first values of the input signal (indexes 0 to N/2) are therefore considered. For any signal of real values, the following statments equal X to within roundoff error:
real_ifft(fft(X)) real_ifft(half_real_fft(X))
The present algorithm has 2 limitations:
It only works with input signal of even length. For odd lengths, use the slowler ifft function with a complex-symmetric input.
Y=real(ifft(X));
In order to achieve better performances, it overwrites the vectotial input with arbitrary data. (Matrix inputs are not overwritten). Copy the input signal in a temporary array if you need to preserve it.
T=X; Y=real_ifft(T);
See Also