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:
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 ( ).
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 ).
quelle
Antworten:
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.
quelle
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.
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.
quelle