Vector.FFT Method

Overload List

#SignatureDescription
1function FFT(const Vec: TVec; ConjugateExtend: Boolean): TVec;Calculate the FFT from all Vec elements.
2function FFT(ConjugateExtend: Boolean): TVec;Fast Furier Transformation (FFT) from complex to complex or from real to complex.
3function FFT(const Vec: TMtxVec; ConjugateExtend: Boolean; VecIndex: Integer; Index: Integer; Len: Integer): TMtxVec;Fast Furier Transformation (FFT) from complex to complex or from real to complex.

Overload 1: function FFT(const Vec: TVec; ConjugateExtend: Boolean): TVec;

Calculate the FFT from all Vec elements.

#NameTypeDescription
1VecTVec
2ConjugateExtendBoolean

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

Remarks:

Store the results in the calling vector. Vec Vector.Length must not be a power of two, but highest performance will be achieved if it is a power of two. Length and Vector.Complex properties of the calling vector are set implicitly to match Vec vector. If Vec is complex then complex to complex forward FFT is performed. If Vec is real then real to complex FFT is performed and the conjugate symmetric part is appended.

Overload 2: function FFT(ConjugateExtend: Boolean): TVec;

Fast Furier Transformation (FFT) from complex to complex or from real to complex.

#NameTypeDescription
1ConjugateExtendBoolean

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

Remarks:

Fast Furier Transformation (FFT) from complex to complex or from real to complex. Calculate the FFT from all calling vector elements in-place. If the calling vector is complex then complex to complex forward FFT is performed. If the calling vector is real then real to complex FFT is performed.

The Vector.Length of the transforming vector can be any number but highest performance will be achieved if it is a power of two.

Note
When performing FFT from real to complex the conjugated symmetric part is also generated by conjugating and mirroring the first half of the spectrum. If Complex is false, the operation will not be performed in-place, if the Length of the destination will allocate more than amount of the memory preallocated for the TVec object. Instead, the data will be copied first to allocate enough space to store the result.

There are two important parameters to consider that affect how will the FFT be computed: Vector.FFTStorageFormat and Vector.FFTScrambled. The default storage format is fsfCCS.

Examples
var a,b: Vector;
begin
    a.SetIt(False,[1,2,3,4]);
    b.FFT(a);
    a.FFT;     // a = [(10, 0),( -2,2), (-2, 0), (-2,-2)]
    if not a.Equal(b) then ERaise('Not equal');
end;
See Also: Vector.FFTFromReal, Vector.IFFT, Vector.FFTStorageFormat, Vector.FFTScrambled

Overload 3: function FFT(const Vec: TMtxVec; ConjugateExtend: Boolean; VecIndex: Integer; Index: Integer; Len: Integer): TMtxVec;

Fast Furier Transformation (FFT) from complex to complex or from real to complex.

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

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

Remarks:

Calculate the 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 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. If Vec is complex, then complex to complex forward FFT is performed. If Vec is real, then real to complex forward FFT is performed.

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