Hier ist eine Sinuskurve der Frequenz f = 236.4 Hz
(sie ist 10 Millisekunden lang; sie hat N=441
Punkte mit Abtastrate fs=44100Hz
) und ihre DFT ohne Null-Auffüllung :
Die einzige Schlussfolgerung, die wir aus der DFT ziehen können, lautet: "Die Frequenz beträgt ungefähr 200 Hz."
Hier ist das Signal und seine DFT mit einer großen Null-Auffüllung :
Jetzt können wir eine viel genauere Schlussfolgerung ziehen : "Durch genaues Betrachten des Maximums des Spektrums kann ich die Frequenz 236 Hz schätzen" (ich habe gezoomt und festgestellt, dass das Maximum nahe 236 liegt).
Meine Frage ist: Warum sagen wir, dass "Null-Auffüllen die Auflösung nicht erhöht" ? (Ich habe diesen Satz sehr oft gesehen, dann sagen sie "es fügt nur Interpolation hinzu")
=> In meinem Beispiel hat mir das Auffüllen mit Null geholfen, die richtige Frequenz mit einer genaueren Auflösung zu finden!
Antworten:
Die Auflösung hat in diesem Zusammenhang eine sehr spezifische Definition. Es bezieht sich auf Ihre Fähigkeit , zwei separate Töne bei nahe gelegenen Frequenzen aufzulösen . Sie haben die Abtastrate Ihrer Spektrumschätzung erhöht, aber Sie haben keine Möglichkeit erhalten, zwischen zwei Tönen zu unterscheiden, die beispielsweise bei 236 Hz und 237 Hz liegen könnten. Stattdessen "schmelzen" sie zu einem einzigen Blob zusammen, unabhängig davon, wie viel Null-Polsterung Sie anwenden.
Die Lösung zur Erhöhung der Auflösung besteht darin, das Signal über einen längeren Zeitraum zu beobachten und dann eine größere DFT zu verwenden. Dies führt zu Hauptkeulen, deren Breite umgekehrt proportional zur DFT-Größe ist. Wenn Sie also lange genug beobachten, können Sie tatsächlich die Frequenzen mehrerer Töne auflösen, die nahe beieinander liegen.
- -
Um zu sehen, wie sich dies auswirkt, sehen Sie hier eine Darstellung der vergrößerten FFT der Addition von zwei Signalen: Ihrer ursprünglichen Sinuskurve und einer, deren Frequenz sich um 0 bis 100 Hz von dieser unterscheidet.
Nur in Richtung des 100-Hz-Differenzendes des Diagramms (hier links) können Sie die beiden unterscheiden (auflösen).
Scilab-Code zum Generieren des folgenden Diagramms.
quelle
x(n)
länger zu machen (mit0
am Ende), behalte ich diex(n)
Länge N bei, ABER die Änderung ist hier: stattDFT(k) = \sum x(n) exp(-2*i*pi*n*k/N)
fürk=0,1,...,N-1
, mache ichDFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
fürk=0,1,...,10*N-1
... Dies ist wie das Hinzufügen weiterer Bins (10 N
Bins anstelle vonN
Frequenzbins), aber das Beibehalten derselbenx(n)
von LängeN
. Jetzt wären die Bins 10 Hz, 20 Hz, ..., 100 Hz, 110 Hz, 120 Hz, ..... => Ist es dasselbe wie Null-Padding: keine echte zusätzliche Auflösung, sondern nur Interpolation?DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
fürk=0,1,...,10*N-1
und Beibehalten der gleichenx(n)
LängeN
das gleiche Ergebnis wie das Auffüllen mit Nullen: nicht wirklich mehr Auflösung, sondern nur Interpolation?Der Begriff "Auflösung" hat mehrere Bedeutungen, was Menschen, die versuchen zu kommunizieren, verwirren kann, wenn sie zwei verschiedene Bedeutungen verwenden.
Im optischen Sinne hilft es nicht, zwei nahegelegene klar getrennte Punkte (oder zwei benachbarte Peaks im Spektrum) anstelle eines verschwommenen Blobs aufzulösen. Dies ist die Bedeutung, die am wahrscheinlichsten verwendet wird, wenn angegeben wird, dass das Auffüllen mit Nullen die Auflösung nicht erhöht.
Wenn die Anforderung an die Auflösung einen Abfall (zum Beispiel eine Verringerung um mindestens 3 dB) zwischen den Spektralspitzen erfordert, ist die Auflösung sogar niedriger als der FFT-Bin-Abstand, z. B. nicht einmal Fs / N, sondern 2X bis 3X oder mehr. abhängig von der verwendeten Fensterung. Eine schwächere Anforderung für die Auflösung könnte nur der Frequenzabstand der orthogonalen Basisvektoren der DFT sein, z. B. Fs / N.
In Bezug auf das Zeichnen von Punkten gibt es beim Auffüllen mit Null mehr Punkte zum Zeichnen, wie bei der DPI-Auflösung (Plotpunkte pro Zoll). Das kann es einfacher machen, Extrema mit dem Augapfel zu erkennen. Dies sind jedoch die gleichen Punkte, die Sie erhalten würden, wenn Sie eine Plotinterpolation von sehr hoher Qualität (Sinc-Interpolation) ohne Null-Auffüllung durchführen würden. Sie fügen also wirklich keine Informationen hinzu, die ohne die Null-Auffüllung sonst nicht berechnet werden könnten.
In Bezug auf die Tonhöhenverfolgung kann eine parabolische oder Sinc-Interpolation (Interpolation zwischen FFT-Ergebnisfächern) eines nicht mit Nullen gepolsterten FFT-Ergebnisses mit Fenstern ein ebenso gutes Ergebnis liefern wie mit einem rechenintensiveren, längeren, mit Nullen gepolsterten FFT-Diagramm. Das Null-Auffüllen liefert somit ein "besseres" Pitch-Tracking-Ergebnis als das nicht-Null-aufgefüllte und nicht-interpolierte Peak-Picking, aber oft viel weniger effizient als nur die Interpolation.
Wenn Sie Ihrem Beispiel Rauschen hinzufügen, das jedoch etwas geringer als das Signal ist, werden Sie feststellen, dass der mit Null gepolsterte Peak genauso ungenau sein kann wie der mit Null gepolsterte Peak. Im allgemeineren Fall haben Sie möglicherweise die "richtige" Frequenz nicht genauer als zuvor gefunden. Das Null-Auffüllen interpoliert nur das ungenaue Ergebnis aufgrund von Rauschen, was ein weiterer Grund ist, warum es die Auflösung nicht erhöhen soll.
quelle
f=236.4 hz
während derselben habe10ms
, aber mit fs = 192 kHz anstelle von 44,1 kHz: Wird die wahre Frequenzauflösung dann höher sein?sinc
ähnliche Kurve in DFT enger oder nicht? Wenn nicht, bedeutet dies, dass durch Erhöhen der Abtastrate keine Auflösung hinzugefügt wird (dh die Fähigkeit, Frequenzen aufzulösen )