Vector.FFTFromReal Method

Overload List

#SignatureDescription
1function FFTFromReal: TVec;The forward Fast Fourier Transformation (FFT) from real to complex.
2function FFTFromReal(const Vec: TVec): TVec;Calculate the FFT from all Vec elements and store the result in the calling vector.
3function FFTFromReal(const Vec: TMtxVec; VecIndex: Integer; Index: Integer; Len: Integer): TMtxVec;The forward Fast Fourier Transformation (FFT) from real to complex.

Overload 1: function FFTFromReal: TVec;

The forward Fast Fourier Transformation (FFT) from real to complex.

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

Remarks:

Calculates the forward Fast Fourier Transformation (FFT) from real to complex for the calling vector in-place. The transform should be used, when the conjugate symmetric part of the frequency spectrum is not desired. If the calling vector is complex an exception will be raised. The operation implicitly sets the calling vector Complex property to True. The highest performance will be achieved if the transform length will be a power of two. The transform length is equal to Vector.Length, when the Vector.FFTStorageFormat is fsfPack or fsfPerm. The default storage format is fsfCCS.

In-place fsfCCS complication

The transform length in case of fsfCCS will be equal to Length-2, because the result is bigger than the source data by 2 real samples, if the source data is even. If the source data length is odd, then Vector.FFTOddLength must be set to True and only Length-1 samples will be used, but Length must of course in that case be even, or Length-1 will not be odd. The last two (one) samples in the vector will be ignored and will be overwritten with the result.

Examples
var a,b: Vector;
begin //Even
    a.SetIt(false,[1,2,3,4]);
    b.FFTFromReal(a); // b = [(10, 0),( -2,2), (-2, 0)]
    a.SetIt(false,[1,2,3,4, 0, 0]); //result requires 3 complex (or 6 real values)
    a.FFTFromReal; // b = [(10, 0),( -2,2), (-2, 0)]

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

    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)

    a.SetIt(false,[1,2,3,0]);

    a.FFTOddLength := True; //use only Length-1 samples
    a.FFTFromReal; // b = [(6,0),( -1.5,0.8660)] //result requires 2 complex (= 4 real numbers)
end;
See Also: Vector.FFT, TDenseMtxVec.FFT, Vector.IFFT, TDenseMtxVec.IFFT

Overload 2: function FFTFromReal(const Vec: TVec): TVec;

Calculate the FFT from all Vec elements and store the result in the calling vector.

#NameTypeDescription
1VecTVec

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

Remarks:

Vector.Length of the calling vector is set to match the length of the result.

Overload 3: function FFTFromReal(const Vec: TMtxVec; VecIndex: Integer; Index: Integer; Len: Integer): TMtxVec;

The forward Fast Fourier Transformation (FFT) from real to complex.

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

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

Remarks:

Calculate the FFT from real 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 Vec is not complex or if 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.IFFT, Matrix.IFFT1D