Vector.IFFTToReal Method

Overload List

#SignatureDescription
1function IFFTToReal(const Vec: TVec; NoScale: Boolean): TVec;Calculate the inverse FFT from all Vec elements.
2function IFFTToReal(NoScale: Boolean): TVec;The inverse FFT from complex to real.
3function IFFTToReal(const Vec: TMtxVec; VecIndex: Integer; Index: Integer; Len: Integer; NoScale: Boolean): TMtxVec;The inverse FFT from complex to real.

Overload 1: function IFFTToReal(const Vec: TVec; NoScale: Boolean): TVec;

Calculate the inverse FFT from all Vec elements.

#NameTypeDescription
1VecTVec
2NoScaleBoolean

Result: stored in self (calling object), returns self for chaining

Remarks:

Store the results in the calling vector. Vec Vector.Length must not be the power of two. Vector.Length and Vector.Complex properties of the calling vector are set implicitly the size and type of the result.

Overload 2: function IFFTToReal(NoScale: Boolean): TVec;

The inverse FFT from complex to real.

#NameTypeDescription
1NoScaleBoolean

Result: stored in self (calling object), returns self for chaining

Remarks:

Calculates the inverse Fast Fourier Transformation (FFT) from complex to real from all calling vector elements. The result is a real type vector.

Input vector must be a complex vector or an exception is raised. If the NoScale parameter is true then no scaling is performed for the calling vector. The results can be erroneous if overflow or underflow occurs.

In-place fsfCCS complication

When Vector.FFTStorageFormat is equal to fsfCCS the Length of the result will be equal to Length-2, because the source data is bigger than the result data by 2 real samples, if Vector.FFTOddLength is false. If Vector.FFTOddLength is True the result will fill up Length-1 samples.

Examples
var a,b: Vector;
begin //Even
    a.SetIt(True,[1,2,3,4]);
    b.FFTFromReal(a); // b = [(10, 0),( -2,2), (-2, 0)]
    b.IFFTToReal;     // b = [1, 2, 3, 4, -2, 0)]

    //Odd length
    a.SetIt(True,[1,2,3,0]);

    b.FFTOddLength := True; //use only Length-1 samples
    b.FFTFromReal(a); // b = [(6,0),( -1.5,0.8660)] //result requires 2 complex (= 4 real numbers)
    b.IFFTToReal;      //b = [1, 2, 3, 0.8660]

    //Event length
    a.SetIt(True,[1,2,3,4, 0,0]); //allocate two more elements
    a.FFTOddLength := false; //use only Length-2 samples
    a.FFTFromReal; // a = [(10, 0),( -2,2), (-2, 0)] //result requires 3 complex (= 6 real numbers)
    a.IFFToReal;   // a = [1, 2, 3, 4, -2, 0)]
end;
See Also: Vector.FFTFromReal, TDenseMtxVec.FFTFromReal, Vector.IFFT, TDenseMtxVec.FFT

Overload 3: function IFFTToReal(const Vec: TMtxVec; VecIndex: Integer; Index: Integer; Len: Integer; NoScale: Boolean): TMtxVec;

The inverse FFT from complex to real.

#NameTypeDescription
1VecTMtxVec
2VecIndexInteger
3IndexIntegerstart index
4LenIntegerelement count
5NoScaleBoolean

Result: stored in self (calling object), returns self for chaining

Remarks:

Calculate the inverse FFT from Vec elements [VecIndex]..[VecIndex+Len-1] and store the results in the calling object elements [Index]..[Index+Len-1]. The Len parameter must not be a power of two. Size and Vector.Complex properties of the calling object must be set explicitly. An exception is raised if Vector.ConditionCheck is True and array borders are overrun.

Note
This is the indexed version of the FFT routine . Look there for more information on FFT parameters and storage requirements.

See Also: Vector.IFFTToReal, Matrix.IFFT1DToReal