MF_FFT MD_FFT ME_FFT
MF_FFTtoC MD_FFTtoC ME_FFTtoC
MCF_FFT MCD_FFT MCE_FFT
FunktionZwei-dimensionale Schnelle Fourier-Transformation (Fast Fourier Transformation, FFT)
Syntax C/C++#include <MFstd.h>
void MF_FFT( fMatrix Y, fMatrix X, ui ht, ui len, int dir );
void MCF_FFT( cfMatrix Y, cfMatrix X, ui ht, ui len, int dir );
void MF_FFTtoC( cfMatrix Y, fMatrix X, ui ht, ui len );
C++ MatObj#include <OptiVec.h>
void matrix<T>::FFT( const matrix<T>& MX, int dir );
void matrix<complex<T> >::FFT( const matrix<complex<T> >& MX, int dir );
void matrix<complex<T> >::FFTtoC( const matrix<T>& MX );
Pascal/Delphiuses MFstd;
procedure MF_FFT( MY, MX:fMatrix; ht, len:UIntSize; dir:Integer );
procedure MCF_FFT( MY, MX:cfMatrix; ht, len:UIntSize; dir:Integer );
procedure MF_FFTtoC( MY:cfMatrix; MX:fMatrix; ht, len:UIntSize );
BeschreibungDie Fourier-Transformierte von MX wird in MY zurückgegeben. Die Vorwärts-Transformation erhält man für dir = 1, die inverse (oder Rückwärts-) Transformation für dir = -1. Der verwendete FFT-Algorithmus erfordert es, daß sowohl ht als auch len ganzzahlige Potenzen von 2 sind.
Komplexe Version: Sowohl die Eingabe-Matrix X also auch die Ausgabe-Matrix Y sind komplex.
Reell-zu-Komplex-Version: Die Eingabe-Matrix X ist reell. Die Ausgabe-Matrix Y ist komplex. Da diese Funktion nur in Vorwärts-Richtung ausgeführt werden kann, ist kein Argument "dir" erforderlich.
Rein reelle Version: Für die Vorwärts-Transformation ist MX eine reelle Matrix. Die Ausgabe-Matrix Y ist ebenfalls als reelle Matrix definiert, obwohl sie aus komplexen Zahlen besteht. Diese sind auf spezielle Weise so gepackt, daß sie in den für eine gleich große reelle Matrix zur Verfügung stehenden Speicherplatz passen. Die Reihenfolge der Elemente in MY ist von derjenigen im ein-dimensionalen Fall abgeleitet, wobei die Komprimierung zuerst auf alle Zeilen und danach auf die Spalten angewandt wird. Die folgende Tabelle faßt die sich so ergebende Anordnung zusammen. U ist die unkomprimierte Fourier-Transformierte von MX.
U0,0.ReU0,len/2.ReU0,1.ReU0,1.Im···U0,len/2-1.ReU0,len/2-1.Im
Uht/2,0.ReUht/2,len/2.ReU1,1.ReU1,1.Im···U1,len/2-1.ReU1,len/2-1.Im
U1,0.ReU1,len/2.ReU2,1.ReU2,1.Im···U2,len/2-1.ReU2,len/2-1.Im
U1,0.ImU1,len/2.ImU3,1.ReU3,1.Im···U3,len/2-1.ReU3,len/2-1.Im
·····················
Uht/2-1,0.ReUht/2-1,len/2.Re···············
Uht/2-1,0.ImUht/2-1,len/2.ImUht-1,1.ReUht-1,1.Im···Uht-1,len/2-1.ReUht-1,len/2-1.Im
 
Für die inverse FFT reeller Matrizen muß die Eingabe-Matrix in diesem gepackt-komplexen Format vorliegen. und als Ergebnis erhält man eine "echte" reelle Matrix. Falls Sie es vorziehen, das Ergebnis der Vorwärts-Transformation einer rellen Matrix ungepackt, also als komplexe Matrix zu erhalten, benutzen Sie bitte MF_FFTtoC.

Bezüglich spezieller Versionen mit den Präfixen MFl_ und MFs_ vergleiche man Kap. 4.8 von http://www.optivec.de/vecfuncs/.

FehlerbehandlungFalls entweder len oder ht nicht eine Potenz von 2 ist, meldet sich VF_FFT (worauf MF_FFT basiert) mit der Fehlermeldung "Size must be an integer power of 2" und bricht das Programm ab.
QuerverweisMF_Cols_FFT,   MF_Rows_FFT,   Kap. 12,   Kap. 4.8 von http://www.optivec.de/vecfuncs/

MatrixLib Inhaltsverzeichnis  OptiVec Home