Interpolation der Größe der diskreten Fourier-Transformation (DFT)


7

Zum Beispiel scheint es für die Ermittlung der Spitzenfrequenz gültig zu sein, bandbegrenzte Interpolationsmethoden für die komplexen DFT-Bins oder getrennt für deren Real- und Imaginärteil zu verwenden und die Größen oder quadratischen Größen der Ergebnisse zu berechnen. Aber wie wäre es mit einer bandbegrenzten Interpolation der Größen der Bins (ich glaube nicht, dass das gültig ist) oder ihrer quadratischen Größen (möglicherweise gültig)? Mit gültig meine ich, dass perfekt interpolierte Werte gleich denen sein sollten, die durch Berechnung aus einer größeren DFT einer mit Nullen aufgefüllten Version des Zeitbereichssignals ermittelt wurden.

Der erste Ansatz garantiert ein nicht negatives Ergebnis, im Gegensatz zu den anderen, wenn die Interpolation nicht perfekt ist. Siehe diese Frage zur nichtnegativen oder positiven bandbegrenzten Interpolation .


Hey Olli, ist das eine Frage?
Robert Bristow-Johnson

@ robertbristow-johnson Ja, es ist ... der "wie wäre es" Teil. Ich habe dort allerdings meine Vermutungen.
Olli Niemitalo

1
BTW, ist die Gaußsche AN Eigenfunktion der Fourier - Transformation. Es gibt tatsächlich unendlich viele Eigenfunktionen und es ist ziemlich einfach, eine Eigenfunktion zu konstruieren.
Robert Bristow-Johnson

1
@ robertbristow-johnson Etwas tangential werden, aber was ist noch?
Olli Niemitalo

1
Jede Funktion mit gerader Symmetrie plus die Fourier-Transformation von sich selbst (wobei durch ) ist eine Eigenfunktion der Fourier-Transformation. ft
Robert Bristow-Johnson

Antworten:


4

Interpolierte Punkte der DFT können unter Verwendung eines Punktprodukts einiger Abtastwerte um den Peakbereich mit einem vorberechneten Interpolationsvektor berechnet werden. Der Interpolationsvektor wird durch den Ort der gewünschten interpolierten Probe bestimmt, wobei der Betrag der erforderlichen Nullauffüllung usw. usw. berücksichtigt wird.

Diese Technik und die Methode zur Berechnung der Interpolationsvektoren werden in Anhang B dieses Dokuments behandelt:

http://ericjacobsen.org/FTinterp.pdf

Ich hoffe das hilft ein bisschen.


Danke Eric, es ist schön zu sehen, dass Sie auch bei der Größeninterpolation festgestellt haben, dass "die Nichtlinearität bei der Größenerkennung zu einem Signal führt, das im Wesentlichen unterabgetastet ist". Ich zeige in meiner Antwort, dass die quadratische Größe nicht unterabgetastet wird, wenn das Zeitbereichssignal auf 2x Länge auf Null aufgefüllt wurde. Leider werden in Chrome nicht alle Gleichungen im PDF korrekt angezeigt, z. 3.5.
Olli Niemitalo

1
Es wird nicht unterabgetastet, bis die Größe erkannt wird. Wenn Sie also die komplexen Koeffizienten interpolieren, um den komplexen interpolierten Koeffizienten zu erhalten, und dann die Größe (oder quadratische Größe) berechnen, wird dieses Problem vermieden.
Eric Jacobsen

Einverstanden! Das PDF funktioniert gut in Edge.
Olli Niemitalo

5

Zuerst eine Demonstration, dass die Quadrate von beiden

[,0,0,1,- -1,0,0,]] und[,0,0,1,- -1,0,0,]]

gleich

[,0,0,1,- -1,0,0,]] und

Die Quadrate ihrer Sinc-Interpolationen unterscheiden sich jedoch (Abb. 1):

Quadrate von Sinusinterpolationen
Abbildung 1. Quadrate der Sinusinterpolationen von [1,1]] (blau) und [1,- -1]] (rot).

Dies zeigt, dass es im Allgemeinen nicht möglich ist, das Quadrat eines bandbegrenzten Signals aus seinen einheitlichen Abtastwerten wiederherzustellen, die bei der kritischen Abtastfrequenz des bandbegrenzten Signals entnommen wurden.


Testen wir verschiedene Interpolationsansätze in Octave. Der Goldstandard der bandbegrenzten Interpolation ist DFT-Zero-Pad-DFT:

>> format free
>> x = [1 2 3];
>> y = [1 2 3  0 0 0];
>> abs(fft(x))
ans =

 6 1.73205 1.73205

>> abs(fft(y))
ans =

 6 4.3589 1.73205 2 1.73205 4.3589

Der letzte Satz von Zahlen sind die Größenwerte, die aus perfekt interpolierten Frequenzbereichsfächern berechnet wurden. Versuchen wir stattdessen, die Größe zu interpolieren :

>> fft(fftshift(horzcat([0 0], fftshift(ifft(abs(fft(x)))), [0])))
ans =

 6 4.57735 1.73205 0.309401 1.73205 4.57735

Scheint ziemlich weit weg zu sein. Versuchen wir nun, die quadratische Größe zu interpolieren :

>> fft(fftshift(horzcat([0 0], fftshift(ifft(abs(fft(x)).^2)), [0])))
ans =

 36 25 3 -8 3 25

>> sqrt(ans)
ans =

 (6,0) (5,0) (1.73205,0) (0,2.82843) (1.73205,0) (5,0)

Es ist nicht nur ausgeschaltet, sondern gibt auch sqrt()eine komplexe Zahl für einen negativen interpolierten Wert zurück. Ist also die einzig gültige Möglichkeit, die Bin-Werte zu interpolieren?

Geben wir diesem eine weitere Chance, indem wir versuchen, Frequenzbereichsdaten zu interpolieren, die um den Faktor 2 hochgetastet wurden. Aufgrund der Transformation mit gerader Länge muss das "Nyquist-Sample" dupliziert werden. Entschuldigen Sie daher, wenn der Code schwer zu lesen ist.

>> z = [1 2 3  0 0 0  0 0 0  0 0 0];
>> abs(fft(z))
ans =

 6 5.55485 4.3589 2.82843 1.73205 1.77302 2 1.77302 1.73205 2.82843 4.3589 5.55485

Das Obige ist was wir wollen. Versuchen wir, 2x hochgetastete Größe zu interpolieren :

>> fftshift(horzcat([0 0 0], fftshift(ifft(abs(fft(y)))), [0 0 0]))
ans =

 3.36365 1.10447 0.318175 0 0 0 0 0 0 -0.208949 0.318175 1.10447

>> ans(4) = ans(length(ans)-2)
ans =

 3.36365 1.10447 0.318175 -0.208949 0 0 0 0 0 -0.208949 0.318175 1.10447

>> fft(ans)
ans =

 5.79105 5.59483 4.56785 2.7273 1.5231 1.76882
 2.20895 1.76882 1.5231 2.7273 4.56785 5.59483

Das ist noch aus. Versuchen wir, 2x hochgetastete quadratische Größe zu interpolieren :

>> fftshift(horzcat([0 0 0], fftshift(ifft(abs(fft(y)).^2)), [0 0 0]))
ans =

 14 8 3 0 0 0 0 0 0 1.18424e-15 3 8

>> ans(4) = ans(length(ans)-2)
ans =

 14 8 3 1.18424e-15 0 0 0 0 0 1.18424e-15 3 8

>> sqrt(fft(ans))
ans =

 6 5.55485 4.3589 2.82843 1.73205 1.77302 2 1.77302 1.73205 2.82843 4.3589 5.55485

Jetzt funktioniert es perfekt! Die Nachricht zum Mitnehmen besteht darin, vor dem Versuch, im Frequenzbereich zu interpolieren, ein Upsampling (Zeitbereich-Null-Pad) um mindestens den Faktor zwei durchzuführen und die quadratische Größe anstelle der Größe zu interpolieren. Dies funktioniert, weil die quadratische Größe der Multiplikation jedes Bin-Werts mit seinem komplexen Konjugat entspricht. Die komplexe Konjugation bewahrt die Bandbreite der durch die Daten dargestellten bandbegrenzten Funktion, sodass die Multiplikation die "Zeitbereichsbandbreite" verdoppelt, da sie der Zeitbereichsfaltung entspricht. Beachten Sie, dass bei der Auswahl der Interpolationsmethode die 2x hochgetastete quadratische Größe immer noch kritisch abgetastet wird, sodass eine weitere Überabtastung die genaue Interpolation erheblich erleichtern sollte.

Ich habe ungefähr meine eigene Frage beantwortet, werde aber weitere Einsichten als Antwort akzeptieren!

PS Ich habe gerade herausgefunden, dass es auch eine interpftInterpolation mit weniger Syntax gibt.

Zusätzliche Informationen nutzen

Die Interpolation wird durch zusätzliche Informationen zu den Daten einfacher oder sogar genauer, zum Beispiel, dass es sich um eine kritisch abgetastete quadratische zeitversetzte Sinc handelt. In diesem Fall gegeben die zwei Probenα kurz vor und γ kurz nach der größten Stichprobe die Zeit - -1<d<1 des Peaks kann berechnet werden durch:

d={0wenn α=γ,1- -1- -p2p,p=γ- -αα+γAndernfalls,

mit d=0Dies bedeutet, dass der Sinc genau auf die Zeit der größten Stichprobe verschoben wird. Dieselbe Interpolation kann mit der halben Abtastrate durchgeführt werden, bei der es sich um die kritische Abtastfrequenz der zugrunde liegenden Funktion handelt, deren Größe der einer zeitversetzten Sinc mit den beiden aufeinanderfolgenden Abtastwerten mit dem größten Wert entsprichtα und β des Quadrats des Absolutwerts der zugrunde liegenden Funktion:

0d1d={0wenn β=0,1wenn α=0,1+p- -1- -p22p,p=β- -αα+βAndernfalls,

Die Formeln werden durch die Amplitudenskalierung der Daten nicht beeinflusst. Für die Frequenzschätzung hätten Sie selten eine rein zeitversetzte Sinc in Echtzeit, aber wenn Sie dies tun, gibt es genaue Interpolationsformeln dafür .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.