Meine Frage bezieht sich auf die Eingangsgröße eines Signals, das keine Potenz von 2 ist, und wir müssen die fft davon nehmen. Einige Lösungen besagen, dass wir, wenn wir das fft von 1800 nehmen wollen, es bis zur Länge von 2048 auf Null setzen sollten, um die Potenz 2 zu erreichen, und dann den Radix 2-Algorithmus anwenden sollten. Es gibt aber auch andere Lösungen, die eine Kombination verschiedener Algorithmen ohne Null-Auffüllung anwenden und dann die erforderliche FFT berechnen. Meine Frage ist: Macht das Auffüllen eines Signals mit einer Länge von 2048 für den Fall, dass wir fft von 1800 nehmen müssen, einen Unterschied in den Ergebnissen, wenn wir eine Kombination verschiedener Algorithmen verwenden, um den fft der Größe 1800 zu berechnen. Gibt es einen Unterschied oder den Ergebnis wäre das gleiche.
9
x
. FormX = fft(x,123456);
(oder eine andere seltsame Länge). Findenxx = ifft(X);
. Sehen Sie, wassum(abs(x-xx(1:length(x))));
ist.Antworten:
Die resultierende FFT ist anders: anstatt die FFT bei den Frequenzen zu berechnen2 πn / 1800 zum n = 0 … 1799 , Sie werden sie bei berechnen 2 πn / 2048 zum n = 0 … 2047 . Es gibt jedoch keine Verschlechterung der Informationen.
Beide Ansätze sind richtig: mit 1800 oder 2048. Ich würde die "Lösung mit minimaler Energie" verwenden (dh die einfachste, die faulste Lösung). Dies würde normalerweise die 2048-Längen-Transformation verwenden.
Menschen neigen dazu, Radix-2-Transformationen zu verwenden, weil sie es nicht besser wissen. Es scheint viele Fehlinformationen über FFTs zu geben, die Power-of-2 sein müssen. Es gibt keine solche Einschränkung. Außerdem wissen sie wahrscheinlich nichts über anständige Nicht-Radix-2-Algorithmen, wie sie in FFTW und anderen Bibliotheken verfügbar sind .
Um zu sehen, dass die FFT beliebiger Länge informationserhaltend ist:
Siehe auch diese Frage und ihre Antworten.
quelle
Man muss verstehen, dass FFT, da das Ergebnis (und die Quelle) diskret sind, nicht wirklich eine Fourier-Transformation ist, sondern in Wirklichkeit eine Fourier-Reihen-Entwicklung. Dies bedeutet, dass das Ergebnis einer FFT nicht die Transformation eines einzelnen Datenblocks ist, sondern die Transformation eines periodischen Signals, das aus einer unendlichen Verkettung desselben Datenblocks mit oder ohne Trennung besteht, die aus der Auffülllänge besteht . (Unter der Annahme, dass meine analysierten Daten wie «m» aussehen, wird die Transformation die Entwicklung von «... mmmmm ...» oder «... mmmmm ...» sein, die nicht dasselbe Signal sind.)
Infolgedessen bedeutet das Fehlen einer Auffüllung, dass implizit der Hochfrequenzfehler in den Quelldaten hinzugefügt oder entfernt wird, der aus der Diskontinuität beim Verbinden des Endes eines Blocks und des Beginns des nächsten Blocks (der derselbe ist) stammt. Das extreme Beispiel wäre, einen Block zu analysieren, der denselben Wert enthält. Das Auffüllen ohne Auffüllen macht den Unterschied zwischen einem kontinuierlichen und einem rechteckigen Signal.
Die andere Konsequenz daraus ist, dass je länger die Auffüllung ist, desto näher das Ergebnis der Transformation eines einzelnen Datenbursts ist und desto höher ist die Auflösung der Transformation. Es ist nicht ganz richtig zu sagen, dass es unabhängig von der Übergabe zu keiner Verschlechterung der Informationen kommen wird. Es wird (in begrenztem Umfang) aufgrund der Rundungsfehler und der Verwendung eines längeren Puffers helfen, dies zu verhindern (wiederum in sehr begrenzter Weise).
quelle