In einer Antwort auf eine vorherige Frage wurde angegeben, dass man sollte
Null-Pad der Eingangssignale (fügen Sie am Ende Nullen hinzu, so dass mindestens die Hälfte der Welle "leer" ist)
Was ist der Grund dafür?
In einer Antwort auf eine vorherige Frage wurde angegeben, dass man sollte
Null-Pad der Eingangssignale (fügen Sie am Ende Nullen hinzu, so dass mindestens die Hälfte der Welle "leer" ist)
Was ist der Grund dafür?
Antworten:
Das Auffüllen mit Nullen ermöglicht die Verwendung einer längeren FFT, wodurch ein längerer FFT-Ergebnisvektor erzeugt wird.
Ein längeres FFT-Ergebnis hat mehr Frequenzbereiche, deren Frequenz enger beieinander liegt. Sie liefern jedoch im Wesentlichen das gleiche Ergebnis wie eine hochqualitative Sinc-Interpolation einer kürzeren, nicht mit Nullen aufgefüllten FFT der ursprünglichen Daten.
Dies kann zu einem glatter aussehenden Spektrum führen, wenn es ohne weitere Interpolation geplottet wird.
Diese Interpolation hilft zwar nicht beim Auflösen oder der Auflösung von und / oder zwischen benachbarten oder nahe gelegenen Frequenzen, erleichtert jedoch möglicherweise das visuelle Auflösen der Spitze einer einzelnen isolierten Frequenz, die keine signifikanten benachbarten Signale oder Rauschen im Spektrum aufweist . Statistisch gesehen macht es die höhere Dichte der FFT-Ergebnisbereiche wahrscheinlich wahrscheinlicher, dass der Spitzengrößenbereich näher an der Frequenz einer zufälligen isolierten Eingangsfrequenz-Sinuskurve liegt und nicht weiter interpoliert wird (parabolisch usw.).
Das Auffüllen mit Nullen vor einer DFT / FFT ist jedoch im Wesentlichen eine rechnerisch effiziente Methode zum Interpolieren einer großen Anzahl von Punkten.
Null-Auffüllung für Kreuzkorrelation, Autokorrelation oder Faltungsfilterung wird verwendet, um Faltungsergebnisse nicht zu mischen (aufgrund von Kreisfaltung). Das volle Ergebnis einer linearen Faltung ist länger als einer der beiden Eingangsvektoren. Wenn Sie keinen Ort angeben, an dem das Ende dieses längeren Faltungsergebnisses erreicht werden kann, wird es von FFT Fast Convolution nur mit dem gewünschten Ergebnis gemischt und zusammengestellt. Das Auffüllen mit Nullen bietet eine Reihe von Nullen, in die das längere Ergebnis gemischt werden kann. Und es ist weitaus einfacher, etwas zu entmischen, das nur mit einem Vektor von Nullen gemischt / summiert wurde.
Es gibt ein paar Dinge zu beachten, bevor Sie sich entscheiden, Ihr Zeitdomänensignal auf Null zu setzen. Möglicherweise müssen Sie das Signal gar nicht auf Null setzen!
1) Verlängern Sie die Zeitbereichsdaten (nicht das Auffüllen mit Nullen), um eine bessere Auflösung im Frequenzbereich zu erzielen.
2) Erhöhen Sie die Anzahl der FFT-Punkte über Ihre Zeitbereichs-Signallänge hinaus (Null-Auffüllung), wenn Sie eine bessere Definition der FFT-Bins wünschen, obwohl Sie dadurch keine echte Auflösung mehr erhalten. Sie können auch auffüllen, um eine Potenz von 2 FFT-Punkten zu erhalten.
3) Achten Sie beim Spielen mit den FFT-Punkten (im vorherigen Punkt) darauf, dass Ihre Frequenzpunkte dort landen, wo Sie sie haben möchten. Der Abstand der Punkte beträgt , wobei die Abtastfrequenz und die Anzahl der FFT-Punkte ist.f s N
Unter http://www.bitweenie.com/listings/fft-zero-padding/ gibt es einige nette Zahlen, die diese Punkte veranschaulichen.
Eine letzte zu erwähnende Sache: Wenn Sie das Signal in der Zeitdomäne auf Null setzen und eine Fensterfunktion verwenden möchten, stellen Sie sicher, dass Sie das Signal vor dem Nullsetzen anzeigen. Wenn Sie die Fensterfunktion nach dem Auffüllen mit Nullen anwenden, werden Sie nicht erreichen, was das Fenster erreichen soll. Genauer gesagt haben Sie immer noch einen scharfen Übergang vom Signal zu Null anstatt eines sanften Übergangs zu Null.
Im Allgemeinen ist das Auffüllen mit Nullen vor der DFT gleichbedeutend mit einer Interpolation oder einer häufigeren Abtastung in der transformierten Domäne.
Hier ist eine kurze Visualisierung, wie das Gegenteil funktioniert. Wenn Sie ein bandbegrenztes Signal zeitlich mit einer höheren Rate abtasten, erhalten Sie ein "gequetschteres" Spektrum, dh ein Spektrum mit mehr Nullen an beiden Enden. Mit anderen Worten, Sie können zeitlich mehr Abtastwerte erhalten, indem Sie nach dem DFT-Vorgang einfach die Frequenz auf Null setzen und dann das Ergebnis mit Nullen auffüllen.
Der gleiche Effekt gilt umgekehrt, wenn das Auffüllen mit Nullen im Laufe der Zeit erfolgt. Dies ist alles, weil die perfekte Signalrekonstruktion möglich ist, solange ein Signal bandbegrenzt ist und mindestens mit der Nyquist-Rate abgetastet wird.
Der Begriff "Auflösung" hängt davon ab, wie Sie ihn definieren. Für mich bedeutet dies, wie gut die beiden benachbarten Beobachtungszeitpunkte oder -häufigkeiten zuverlässig (statistisch) unterschieden werden können. In diesem Fall hängt die Auflösung aufgrund der spektralen Leckage tatsächlich von der DFT-Größe ab. Das heißt, die Fenstergröße ist kleiner, das transformierte Signal verschwommener oder verschmiert und umgekehrt. Es unterscheidet sich davon, wie oft Sie Stichproben nehmen oder was ich als "Definition" bezeichne. Sie können beispielsweise ein sehr unscharfes Bild mit hoher Abtastrate (High Definition) aufnehmen, aber Sie können immer noch nicht mehr Informationen erhalten als mit niedrigerer Abtastrate. Zusammenfassend kann gesagt werden, dass das Auffüllen mit Nullen die Auflösung überhaupt nicht verbessert, da Sie nicht mehr Informationen als zuvor erhalten.
Wenn jemand Interesse an dem Spektrum der Fensterfunktion hat, die zum Isolieren der Zeitbereichsabtastung verwendet wird, erhöht das Auffüllen mit Nullen die Frequenzauflösung der Fensterfunktion.
Wenn das Zeitsignal , wobei die Fensterfunktion ist, dann ist das Gesamtspektrum · , wobei die Faltung auslöst. w ( t ) X ( f ) ≤ W ( f ) ≤
Wenn Ihre Fensterfunktion ein einfaches Rechteck ist (eine Extraktion einiger Werte aus . Dann ist die Synchronisationsfunktion. Wenn also beispielsweise Nfft der Breite Ihres Rechtecks entspricht, und Wenn Sie bei genau einer der Bin-Frequenzen eine Sinuskurve hatten, fallen die Samples der Synchronisationsfunktion, die auf diesem Bin zentriert erscheinen würden, genau auf die Nulldurchgänge außerhalb der Spitzen und Sie sehen die Form der Synchronisation nicht in das Spektrum überhaupt. Wenn Sie jetzt Null-Pad Ihre Daten in die FFT gehenX ( f )Sie werden einige Samples an anderen Stellen als dem Peak und den Nulldurchgängen sehen, wodurch die Form der Synchronisationsfunktion im resultierenden Spektrum sichtbar wird. Was nützt das Auffüllen mit Nullen? Es ist sicherlich von pädagogischem Nutzen, wenn es darum geht, die Art der diskreten Transformation von Fenstersignalen aufzudecken, wie dies in der Regel der Fall ist. In praktischer Hinsicht kann es in jedem Fall nützlich sein, wenn Sie sich für die spektrale Form einer isolierten Hüllkurve auf einer Trägerwelle interessieren.
Dies kann verschiedene Gründe haben, je nachdem, welche Prozesse vor und nach der Fouriertransformation ausgeführt werden. Der häufigste Grund ist, bei jeder resultierenden Transformation eine höhere Frequenzauflösung zu erzielen. Das heißt, je größer die Anzahl der in Ihrer Transformation verwendeten Abtastwerte ist, desto schmaler ist die Binbreite im resultierenden Leistungsspektrum. Denken Sie daran: binwidth = sample_frequency / transform_size (häufig als Fenstergröße bezeichnet). Daraus können Sie sich vorstellen, dass mit zunehmender Transformation die Binbreite abnimmt (= bessere Frequenzauflösung). Das Auffüllen mit Nullen ist eine Möglichkeit, die Transformationsgröße zu erhöhen, ohne neue Informationen in das Signal einzufügen.
Warum also nicht einfach eine größere Transformation ohne Auffüllen durchführen? Würde das nicht den gleichen Effekt erzielen? Gute Frage. In vielen Fällen möchten Sie möglicherweise einen Strom von Zeitbereichsdaten analysieren, für die Sie möglicherweise eine Kurzzeit-Fouriertransformation (stft) verwenden. Dazu wird alle N Abtastwerte eine Transformation entsprechend der Zeitauflösung durchgeführt, die Sie zur Charakterisierung von Änderungen im Frequenzspektrum benötigen. Hier liegt das Problem. Wenn Sie ein zu großes Fenster haben, verlieren Sie die Zeitauflösung, wenn Sie ein zu kleines Fenster haben, verlieren Sie die Frequenzauflösung. Die Lösung besteht dann darin, kleine Zeitbereichsfenster für eine gute Zeitauflösung zu nehmen und diese dann mit Nullen zu füllen, um eine gute Frequenzauflösung zu erzielen. Hoffe das ist nützlich für dich
Update habe
ich nicht gut erklärt. Ich hätte es besser klären sollen. Bezogen auf eine Fenstertransformation erhalten Sie zwar keine "tatsächliche" höhere Frequenzauflösung, aber für Visualisierungszwecke (Lesen des Leistungsspektrums mit dem Auge) können klarere Ergebnisse erzielt werden. Bei Verwendung der kritischen Abtastrate belegt jede Nebenkeule ein einzelnes Bin, was je nach Grafiktechnik irreführend sein kann. Das Auffüllen mit Nullen liefert ein interpoliertes Frequenzspektrum, das aufschlussreicher sein kann. Wenn Sie für die Frequenzschätzung eine einfache Peak-Picking-Methode verwenden, erhalten Sie durch den spektralen Interpolationseffekt des Null-Paddings eine spektrale Probe, die näher am wahren Peak der Hauptkeule liegt. Dieser Link enthält einige nützliche Diagramme: http://www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html
Ich habe diese in den vorherigen guten Antworten nicht erwähnt, daher füge ich die folgenden zusätzlichen wichtigen Gründe für das Auffüllen mit Null hinzu:
Radix-2-Algorithmen sind effizienter, sodass die Leistung in Echtzeit verbessert werden kann, wenn keine Auffüllung auf die nächste Potenz von 2 (oder in einigen Fällen auf die Potenz von 4 für Radix-4) erfolgt. Auch wenn die FFT für die Analyse verwendet wird, wird häufig eine Null-Auffüllung durchgeführt, um Abtastwerte der DTFT zu berechnen, beispielsweise um den Frequenzgang einer FIR zu bestimmen: Vergleichen Sie fft ([1 1 1 1]) mit fft ([1 1 1 1], 512), der mit freqz ([1 1 1 1]) identisch ist.