Artefakte in FFT

10

Ich habe kürzlich festgestellt, dass FFTs nicht perfekt sind. Das heißt, wenn ich ein Signal nehme und dann seine FFT nehme und dann eine inverse FFT mache, ist der resultierende Ausgang nicht genau der gleiche wie der Eingang. Hier ist ein Bild, das Ihnen zeigt, was ich meine:FFT funktioniert nicht immer

Ich denke, das Bild ist ziemlich selbsterklärend. Das IFFT-Signal ist nur eine inverse Transformation des "FFT-Spektrums", und das Diagramm "Differenz" ist die Differenz zwischen dem IFFT-Signal und dem Originalsignal ( ).IFFT - Original

Natürlich gibt es einige Artefakte, obwohl sie sehr klein sind. Ich würde gerne wissen, warum sie überhaupt auftreten. Liegt das am endlichen Fenster der Fourier-Transformation? Oder wegen etwas im FFT-Algorithmus?

Hinweis: Dieses Diagramm hat 32 Punkte, aber ich habe mit 100, 1000, 1024, 256 und 64 Punkten geprüft, und es gibt immer diesen Rest in der Differenz einer ähnlichen Größe (entweder oder ).10- -1610- -fünfzehn

Kitchi
quelle
4
Jede Mathematik mit begrenzter Genauigkeit weist diese Fehler auf, nicht nur FFTs.
Endolith

Antworten:

16

Die Unterschiede, die Sie sehen, sind auf numerische Fehler im Gleitkommaformat zurückzuführen. Alle Operationen, die zur Durchführung einer FFT und einer inversen FFT erforderlich sind, können nur mit endlicher Genauigkeit ausgeführt werden, und Sie haben das Ergebnis dieser endlichen Genauigkeit in Ihrem Diagramm unten rechts gezeigt.

Matt L.
quelle
Würde es eine Situation geben, in der dieser Fehler über die Gleitkomma-Genauigkeit hinaus explodieren könnte?
Kitchi
6
10- -162- -53
@Kitchi: Ja, es gibt viele Situationen, in denen numerische Fehler selbst im Gleitkommaformat ein großes Problem darstellen können. Die Matrixinversion wäre eines von vielen Beispielen. Alles hat mit der Bedingungsnummer zu tun .
Matt L.
1
@ MattL. - Wunderbar! Danke für den Hinweis.
Kitchi
7

Im Allgemeinen kann eine Zahl nicht genau in digitaler Form dargestellt werden. Ein Fehler wird eingeführt. Wenn Sie in Matlab sind, können Sie auf Befehl Befehl schreiben, es gibt Ihnen eine Nummer.

EPS ohne Argumente ist der Abstand von 1,0 zur nächstgrößeren Zahl mit doppelter Genauigkeit, dh EPS = 2 ^ (- 52).

Der Fehler, den Sie in Ihrem Plot sehen, liegt im Bereich, der von eps zurückgegeben wird (dh 2 ^ (- 52)).

Auch wenn Sie von Ihrer IFFT reale Werte in Ihrer Ausgabe erwarten, stellen Sie möglicherweise fest, dass Ihr Imaginärteil nicht genau gleich Null ist. Gleiche Sache.

Niaren
quelle