MATLAB Inverse Fast Fourier Transformation
In diesem Tutorial wird das Finden der inversen schnellen Fourier-Transformation mit der Funktion ifft()
von MATLAB erläutert.
MATLAB Inverse Fast Fourier Transformation
Wir können die Funktion ifft()
von Matlab verwenden, um die inverse schnelle Fourier-Transformation eines Vektors, einer Matrix oder eines mehrdimensionalen Arrays zu finden. Die Funktion ifft()
hat die vier unten gezeigten Syntaxen.
Out = ifft(X)
Out = ifft(X,n)
Out = ifft(X,n,dim)
Out = ifft(___,symflag)
Die erste Syntax gibt die inverse Fast-Fourier-Transformation der Eingabe X
unter Verwendung des Fast-Fourier-Transformationsalgorithmus zurück. Die Funktion ifft()
sucht nach konjugierten symmetrischen Vektoren, die in der Eingabe X
vorhanden sind; Wenn die Vektoren konjugiert symmetrisch sind, ist die Ausgabe schnell und real.
Ein Vektor ist konjugiert symmetrisch, wenn das Produkt seiner antidiagonalen Austauschmatrix und seiner komplexen Konjugierten gleich dem ursprünglichen Vektor ist. Im Fall eines Zeitbereichssignals enthält seine schnelle Fourier-Transformation ein halbes positives Frequenzspektrum und ein halbes negatives Frequenzspektrum.
Die Eingabe X
kann ein Vektor, eine Matrix oder ein mehrdimensionales Array sein. Die erste Syntax gibt einen Vektor zurück, der die inverse schnelle Fourier-Transformation eines Vektors enthält, falls die Eingabe ein Vektor ist, und der Ausgabevektor dieselbe Länge wie der Eingabevektor hat.
Wenn die Eingabe eine Matrix ist, gibt die Syntax eine Matrix zurück, die die inverse schnelle Fourier-Transformation der Spalten der Matrix enthält, und die Größe der Ausgabematrix ist die Eingabematrix. Wenn die Eingabe ein mehrdimensionales Array ist, gibt die Funktion die inverse schnelle Fourier-Transformation von Werten entlang der ersten Dimension zurück und behandelt sie als Vektoren.
Die zweite Syntax wird verwendet, um Punkte hinzuzufügen, an denen wir die inverse schnelle Fourier-Transformation als zweites Argument n
finden möchten. Wenn wir keine Punkte hinzufügen, verwendet die Funktion die Elementindizes als Punkte.
Wenn das Argument n
Null ist, ist die Ausgabe der Funktion eine leere Matrix. Wenn die Argumentlänge n
kleiner ist als die Länge des Eingabevektors oder der Matrix, ignoriert die ifft()
-Funktion die restlichen Werte.
Wenn die Argumentlänge n
größer ist als die Länge des Vektors oder der Matrix, fügt die Funktion Nullen zwischen den Eingabewerten hinzu, wodurch die Leistung der Funktion verbessert wird. Die Argumentlänge n
ist typischerweise das Produkt kleiner Primzahlen oder einer Potenz von 2.
Die dritte Syntax wird verwendet, um die Dimension als drittes Argument dim
festzulegen, das verwendet wird, um die inverse schnelle Fourier-Transformation im Fall einer Matrix und eines mehrdimensionalen Arrays zu finden. Bei einer Matrixeingabe findet die Funktion beispielsweise die inverse schnelle Fourier-Transformation jeder Spalte, aber wenn wir 2 als drittes Argument hinzufügen, gibt die Funktion die inverse schnelle Fourier-Transformation jeder Zeile zurück.
Das vierte Argument wird verwendet, um die Symmetrie der Eingabe als symmetrisch oder nicht symmetrisch festzulegen. Wenn die Eingabe nicht genau symmetrisch ist, können wir sie mit diesem Argument auf symmetrisch setzen, sodass die Funktion die Eingabe als symmetrisch behandelt.
Lassen Sie uns zum Beispiel einen Vektor erstellen und seine schnelle Fourier-Transformation mit der Funktion fft()
finden, und dann finden wir die inverse schnelle Fourier-Transformation mit der Funktion ifft()
. Siehe Code unten.
clc
clear
n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier)
Ausgabe:
n =
1 6 2
fourier =
9.0000 + 0.0000i -3.0000 - 3.4641i -3.0000 + 3.4641i
inverse_fourier =
1.0000 6.0000 2.0000
Im obigen Code haben wir einen Vektor aus drei Elementen verwendet, um die Fourier- und inverse Fourier-Transformation zu finden, um das Ergebnis der Funktion ifft()
zu überprüfen. Wir können in der Ausgabe sehen, dass der Eingabevektor n
und die Ausgabe der Funktion ifft()
identisch sind, was bedeutet, dass die Funktion perfekt funktioniert.
Wir können in der Ausgabe sehen, dass die Fourier-Transformation des Eingangsvektors n
Betrag und Phase enthält, die beide verwendet werden, um das ursprüngliche Signal zu rekonstruieren. Wenn wir einen Teil der Fourier-Transformation wie Größe oder Phase herausnehmen, können wir das ursprüngliche Signal nicht rekonstruieren.
Wir müssen sicherstellen, dass das Signal den Betrag und die Phase enthält, bevor wir die Funktion ifft()
verwenden, um das ursprüngliche Signal zu rekonstruieren. Wir müssen auch sicherstellen, dass das Signal nicht von seiner ursprünglichen Position verschoben wird.
Zum Beispiel können wir die Funktion fftshift()
verwenden, um die Fourier-Transformation zu finden und die Nullfrequenzkomponente in die Mitte des Spektrums zu verschieben. Wir können die ursprüngliche Single nicht richtig rekonstruieren, wenn wir die Funktion ifft()
verwenden, um ihre inverse Fourier-Transformation zu finden.
In diesem Fall können wir die Funktion ifftshift()
anstelle der Funktion ifft()
verwenden, und die Funktion ifftshift()
findet die inverse Fourier-Transformation und verschiebt das Signal zurück an seine ursprüngliche Position.
Die Ausgabe ändert sich auch, wenn wir die Punkte mit der zweiten oben gezeigten Syntax setzen. Im Fall von Punktlängen, die größer als die Länge des Eingangsvektors sind, enthält das rekonstruierte Signal beispielsweise mehr Elemente als die ursprünglichen Vektor- oder Matrixelemente.
Wenn wir die Dimension der Funktion ifft()
ändern, ändert sich auch die Ausgabe und stimmt möglicherweise nicht mit dem ursprünglichen Vektor oder der ursprünglichen Matrix überein. Lassen Sie uns zum Beispiel das obige Beispiel wiederholen und die Anzahl der Punkte ändern, die verwendet werden, um die inverse Fourier-Transformation des Eingabevektors zu nehmen.
Siehe Code unten.
clc
clear
n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier,4)
Ausgabe:
n =
1 6 2
fourier =
9.0000 + 0.0000i -3.0000 - 3.4641i -3.0000 + 3.4641i
inverse_fourier =
0.7500 + 0.0000i 3.8660 - 1.6160i 2.2500 + 1.7321i 2.1340 - 0.1160i
Wir können sehen, dass die Ausgabe der Funktion ifft()
nicht mit dem Eingabevektor n
übereinstimmt, weil wir die Anzahl der Punkte auf 4 geändert haben, was standardmäßig 3 war. Überprüfen Sie diesen Link für weitere Details über die Funktion ifft()
.