Warum kommt es bei einer FFT zu spektralen Leckagen?

18

Ich habe versucht, es zu googeln und zu wikipedia, aber ich habe keine Antworten erhalten, außer "es liegt daran, dass die Frequenz des Eingangssignals zwischen zwei Bins liegt".

Ich verstehe, dass dies der Grund ist, aber was ich nicht verstehe, ist, warum sich die Leckage auf mehrere benachbarte Behälter zu erstrecken scheint und nicht nur auf einen benachbarten Behälter.

Um zu veranschaulichen, wovon ich spreche, hier einige simulierte Daten (Code am Ende des Beitrags): Freq_10

Oben ist das FFT-Spektrum (aufgetragen auf einer logarithmischen Skala) einer Sinuswelle der Frequenz 10 dargestellt. Die Abtastrate ist eins und die Anzahl der Abtastungen beträgt 100. Die Grafik wurde FFT-verschoben. Es gibt eindeutig nur einen Peak bei Bin 10, und der Rest liegt in der Größenordnung von numerischen Fehlern oder ungefähr dort.

Freq_10_1

Dies ist das Frequenzspektrum bei einer erzeugten Frequenz von 10,1. Es liegt eindeutig ein Leck in mehr Behältern als nur in dem unmittelbar benachbarten Behälter vor.

freq_10_5

Dies ist die Darstellung für eine Frequenz von 10,5.

Frage: Warum tritt dieses Leck auf, und warum erstreckt es sich auf alle anderen Fächer und nicht auf das unmittelbar benachbarte Fach?


Code für alle Interessierten (Python-Code)

import numpy as np
import matplotlib.pyplot as plt

xFreq = 10.5
xSize = 100.0
xPeriod = xSize/xFreq
x = np.linspace(1,xSize,xSize)

data = np.sin(2*np.pi*x/xPeriod)
fft = np.fft.fft(data)
fft = np.fft.fftshift(fft)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(abs(fft), "o")
ax.set_yscale('log')
plt.show()

Ich habe den xFreqWert von 10.0auf 10.5usw. geändert .

Kitchi
quelle
Jedes Signal, das nicht genau in die Fensterlänge der FFT passt, erzeugt beim Umschließen eine Diskontinuität. Diskontinuitäten wie Impulse oder Sprungfunktionen enthalten einen Teil aller Frequenzen.
Endolith

Antworten:

12

Eine FFT hat eine endliche Länge und bildet somit ein voreingestelltes rechteckiges Fenster in einem Datenstrom. Ein Fenster im Zeitbereich führt zu einer Faltung im Frequenzbereich mit der Transformation des Fensters. Beachten Sie, dass die Transformation eines rechteckigen Fensters eine Sinc-Funktion (sin (x) / x) ist, die eine unendliche Breite hat. Es sind nicht nur 2 Fächer breit. Somit werden die Welligkeiten der Sinc-Funktion als "Leck" weit entfernt von jeglichen Spektralspitzen angezeigt, die in der Länge der FFT nicht perfekt periodisch sind.

Das folgende Bild zeigt einen Teil des Frequenzgangs der sinc-Funktion. Wenn der Ton auf einem der Bins zentriert ist, werden alle anderen Punkte mit den Nullen im Frequenzgang ausgerichtet. Wenn es nicht auf einem Bin zentriert ist, wird der gesamte Frequenzgang verschoben, wodurch die anderen Bins auf Nicht-Null-Bereiche des Frequenzgangs fallen.

Bildbeschreibung hier eingeben

Eine andere Sichtweise ist, dass eine FFT nur eine Filterbank ist, bei der jeder Filterstoppbandboden viele Welligkeiten aufweist und die Dämpfung mit Sicherheit nicht mehr als 1 Bin von der Mittenfrequenz entfernt ist. Einige Fenster (von Hann usw.), Die nicht rechteckig sind, haben untere Anschlagbänder, was ein Grund für ihre beliebte Verwendung ist.

hotpaw2
quelle
1
Es ist zu beachten, dass die sogenannte spektrale "Streuung" in der FFT von genau binzentrierten periodischen Eingaben nicht auftritt, da die Sinc-Funktion bei allen anderen Binmittenfrequenzen (vollständig orthogonal zu diesen Filterkernen und) genau Null ist (zwischen Vorzeichenwechseln) FFT-Basisvektoren).
Hotpaw2
Ich hoffe, die Bearbeitung macht Ihnen nichts aus. Fühlen Sie sich frei, es zu werfen, wenn Sie es nicht mögen.
Jim Clay
@ Jim Clay: Danke für das hinzugefügte Diagramm. Ich konnte nicht herausfinden, wie ich einen von meinem iPhone einreichen kann.
Hotpaw2
1
Danke danke danke. Vielen Dank, dass Sie die Leckage NICHT mit den Worten "Die FFT geht davon aus, dass ihre Eingabesequenz periodisch ist." Dieser alberne Begriff der "angenommenen Periodizität" wird in der DSP-Literatur leider viel zu oft wiederholt. [-Rick-]
Gelegentlich ist die Annahme der Eingabeperiodizität nützlich, wenn beispielsweise eine wellenrotationssynchrone Abtastung der FFT-Rahmenlänge durchgeführt wird (oder wenn synthetische Beispiele für Klassenräume erstellt werden). Bei Audio (usw.) ist das Unterteilen und Fenstern von Datenrahmen, die nicht mit Periodizitätslängen in Zusammenhang stehen, jedoch häufiger, so dass die Annahme für Arbeiten in diesen Bereichen in der Regel falsch ist.
Hotpaw2
0

hotpaw2Die Antwort ist gut, aber ich möchte noch etwas user5133näher auf den Kommentar eingehen:

Vielen Dank, dass Sie die Leckage NICHT mit den Worten "Die FFT geht davon aus, dass ihre Eingabesequenz periodisch ist." Dieser alberne Begriff der "angenommenen Periodizität" wird in der DSP-Literatur leider viel zu oft wiederholt

und gleichzeitig auch die Frage beantworten. Beachten Sie, dass ich ein Experte auf diesem Gebiet bin - zögern Sie nicht zu kommentieren, zu korrigieren oder zu bestätigen.

Z{1,2,,N}

X(ω)=n=x[n]eiωn.

NNZ

Xk =def n=0N1xne2πikn/N,kZ
X(2πk/N)n{1,2,,N}x[n]w[n]wn{1,,N}

Aber die Fourier-Transformation eines Produkts ist die Faltung der Fourier-Transformationen:

F{fg}=F{f}F{g}

sinc

w(f)ejωtdt=ττejωtdt=2τsinc(ωτ)

sinc

und verstanden
quelle
sieht aus wie @ user5133 ist nicht mehr rumhängen. Aber Ricks Dankbarkeit ist falsch: "Vielen Dank, dass Sie die Leckage NICHT mit den Worten" Die FFT geht davon aus, dass ihre Eingabesequenz periodisch ist "erklären. Diese dumme Vorstellung von 'angenommener Periodizität' wird in der DSP-Literatur leider viel zu oft wiederholt. " Er hat sich geirrt. Die DFT erweitert mit Sicherheit regelmäßig die ihr übergebenen Daten endlicher Länge. Die DFT nimmt an, dass die an sie übergebenen Daten eine Periode einer periodischen Sequenz sind.
Robert Bristow-Johnson