Verwirrung mit FFT-Algorithmus

7

Ich versuche den FFT-Algorithmus zu verstehen, und soweit ich weiß, verstehe ich das Hauptkonzept dahinter. Ich bin jedoch verwirrt über den Unterschied zwischen 'framesize' und 'window'.

Nach meinem Verständnis scheint es, dass sie miteinander redundant sind? Zum Beispiel präsentiere ich als Eingabe einen Block von Samples mit einer Framegröße von 1024. Also habe ich das Byte [1024] als Eingabe dargestellt.

Was ist der Zweck der Fensterfunktion? Seit Anfang dachte ich, der Zweck der Fensterfunktion ist, den Block von Proben aus den Originaldaten auszuwählen.

Danke!

    
user488792 16.02.2011, 03:00
quelle

3 Antworten

13
  

Was ist der Zweck der Fensterfunktion?

Es geht um sogenanntes "Spectral Leakage": Die FFT nimmt eine unendliche Reihe an, die den gegebenen Sample Frame immer wieder wiederholt. Wenn Sie eine Sinuswelle haben, bei der es sich um eine ganzzahlige Anzahl von Zyklen innerhalb des Sample-Rahmens handelt, dann ist alles gut und die FFT gibt Ihnen einen schönen schmalen Peak bei der richtigen Frequenz. Aber wenn Sie eine Sinuswelle haben, die keine ganzzahlige Anzahl von Zyklen ist, gibt es eine Diskontinuität zwischen der letzten und ersten Probe, und die FFT gibt Ihnen falsche Harmonische.

Windowing-Funktionen senken die Amplituden am Anfang und am Ende des Sample-Frames, um die durch diese Diskontinuität verursachten Oberwellen zu reduzieren.

einige Diagramme von einer Webseite von National Instruments zum Thema Windowing :

integrale Anzahl von Zyklen:

nicht ganzzahlige Anzahl von Zyklen:

für zusätzliche Informationen:

Ссылка

Ссылка

Ссылка

    
Jason S 16.02.2011, 03:14
quelle
6

Ein rechteckiges Fenster der Länge M hat eine Frequenzantwort von sin(ω*M/2)/sin(ω/2) , die Null ist, wenn ω = 2*π*k/M , für k ∈ 0. Für eine DFT der Länge N, wo ω = 2*π*n/N , gibt es Nullen bei n = k * N/M . Das Verhältnis N / M ist nicht notwendigerweise eine ganze Zahl. Wenn zum Beispiel N = 40 und M = 32, dann gibt es Nullen bei Vielfachen von 1,25, aber nur die ganzzahligen Vielfachen erscheinen in der DFT, was in diesem Fall die Bins 5, 10, 15 und 20 ist. p>

Hier ist ein Diagramm der 1024-Punkte-DFT eines rechteckigen 32-Punkt-Fensters:

%Vor%

Beachten Sie die Nullen bei jedem N / M = 32 Bins. Wenn N = M (d. H. Die Fensterlänge ist gleich der DFT-Länge), dann gibt es Nullen bei allen Bins außer bei n = 0.

Wenn Sie ein Fenster mit einem Signal multiplizieren, ist die entsprechende Operation im Frequenzbereich die kreisförmige Faltung des Fensterspektrums mit dem Signalspektrum. Zum Beispiel ist die DTFT einer Sinuskurve eine gewichtete Delta-Funktion (d. H. Ein Impuls mit unendlicher Höhe, infinitesimaler Ausdehnung und endlicher Fläche), der sich bei der positiven und negativen Frequenz der Sinuskurve befindet. Wenn ein Spektrum mit einer Delta-Funktion gefaltet wird, verschiebt es es einfach an den Ort des Deltas und skaliert es durch das Gewicht des Deltas. Wenn Sie daher ein Fenster mit einer Sinuskurve in der Sample-Domäne multiplizieren, wird die Frequenzantwort des Fensters skaliert und auf die Frequenz der Sinuskurve verschoben.

Es gibt einige Szenarien, die hinsichtlich der Länge eines rechteckigen Fensters untersucht werden müssen. Zuerst betrachten wir den Fall, in dem die Fensterlänge ein ganzzahliges Vielfaches der Sinusperiode ist, z. ein rechteckiges Fenster mit 32 Abtastwerten eines Kosinus mit einer Periode von 32/8 = 4 Abtastungen:

%Vor%

Wie zuvor gibt es Nullen bei Vielfachen von N / M = 32. Aber das Spektrum des Fensters wurde in den Bereich 256 der Sinuskurve verschoben und skaliert durch seine Größe, die 0,5 geteilt ist zwischen der positiven Frequenz und der negativen Frequenz ( Ich zeichne nur positive Frequenzen auf). Wenn die DFT-Länge 32 gewesen wäre, würden sich die Nullen an jeder Stelle anordnen, was zu dem Aussehen führen würde, dass es keine Lecks gibt. Aber diese irreführende Erscheinung ist nur eine Funktion der DFT-Länge. Wenn Sie das gefensterte Signal mit Nullen auffüllen (wie oben), werden Sie die sinc-artige Antwort bei Frequenzen zwischen den Nullen sehen.

Sehen wir uns nun einen Fall an, in dem die Fensterlänge kein ganzzahliges Vielfaches der Sinusperiode ist, z.B. ein Kosinus mit einer Winkelfrequenz von 7,5π / 16 (der Zeitraum beträgt 64 Abtastungen):

%Vor%

Die Position des mittleren Fachs befindet sich nicht länger auf einem ganzzahligen Vielfachen von 32, sondern ist um eine Hälfte nach Fach 240 verschoben. Sehen wir uns an, wie die entsprechende 32-Punkte-DFT aussehen würde (folgernd ein rechteckiges 32-Punkte-Fenster). Ich berechne und zeichne die 32-Punkte-DFT von x2 [n] und überlagere auch eine 32x dezimierte Kopie der 1024-Punkte-DFT:

%Vor%

Wie Sie im vorherigen Diagramm sehen können, sind die Nullen nicht mehr auf ein Vielfaches von 32 ausgerichtet, so dass die Größe der 32-Punkte-DFT in jeder Bin ungleich Null ist. In der 32-Punkte-DFT sind die Nullen des Fensters immernoch mit jedem N / M = 32/32 = 1 bin beabstandet, aber da ω0 = 7,5 π / 16, liegt das Zentrum bei "bin" 7,5, was die Nullen bei 0,5, 1,5 setzt usw., so dass sie in der 32-Punkte-DFT nicht vorhanden sind.

Die allgemeine Meldung besagt, dass der spektrale Verlust eines Fenstersignals immer vorhanden ist, aber in der DFT maskiert werden kann, wenn Signalspektrum, Fensterlänge und DFT-Länge genau richtig zusammenpassen Richte die Nullen aus. Darüber hinaus sollten Sie diese DFT-Artefakte einfach ignorieren und sich auf die DTFT Ihres Signals konzentrieren (d. H. Mit Nullen auffüllen, um die DTFT mit höherer Auflösung abzutasten, so dass Sie die Leckage eindeutig untersuchen können).

Spektralverluste, die durch Faltung mit dem Spektrum eines Fensters verursacht werden, sind immer vorhanden, weshalb die Kunst des Formens besonders geformter Fenster so wichtig ist. Das Spektrum jedes Fenstertyps wurde für eine bestimmte Aufgabe wie Dynamikbereich oder Empfindlichkeit angepasst.

Hier ist ein Beispiel, das die Ausgabe eines rechteckigen Fensters mit einem Hamming-Fenster vergleicht:

%Vor%

    
eryksun 17.02.2011 14:19
quelle
2

Wenn Sie die Beispielwerte nicht ändern und dieselbe Datenlänge wie die FFT-Länge auswählen, entspricht dies der Verwendung eines rechteckigen Fensters. In diesem Fall sind der Rahmen und das Fenster identisch. Das Multiplizieren der Eingangsdaten mit einem rechteckigen Fenster im Zeitbereich ist jedoch dasselbe wie das Falten des Spektrums des Eingangssignals mit einer Sinc-Funktion in der Frequenzdomäne, wodurch spektrale Spitzen für Frequenzen, die in der FFT-Blende nicht exakt periodisch sind, gespreizt werden gesamtes Spektrum.

Nicht-rechteckige Fenster werden oft verwendet, so dass das resultierende FFT-Spektrum mit etwas mehr "konzentriert" als eine Sinc-Funktion gefaltet wird.

Sie können auch ein rechteckiges Fenster verwenden, das eine andere Größe als die FFT-Länge oder Blende hat. Im Fall eines kürzeren Datenfensters kann der FFT-Rahmen mit Null gepolt sein, was zu einem glatter aussehenden interpolierten FFT-Ergebnisspektrum führen kann. Sie können sogar ein rechteckiges Fenster verwenden, das länger ist als die Länge der FFT, indem Sie Daten rund um die FFT-Blende in einer summierten kreisförmigen Weise für einige interessante Effekte mit der Frequenzauflösung einwickeln.

HINZUGEFÜGT aufgrund einer Anfrage:

Die Multiplikation mit einem Fenster in der Zeitdomäne führt zu demselben Ergebnis wie die Faltung mit der Transformation dieses Fensters in der Frequenzdomäne.

Im Allgemeinen erzeugt ein engeres Zeitbereichsfenster eine breiter aussehende Frequenzbereichs-Transformation. Dies ist der Grund, warum Zero-Padding ein glatteres Frequenzdiagramm erzeugt. Das engere Zeitbereichsfenster erzeugt einen breiteren Sinc mit fetteren und glatteren Kurven in Bezug auf die Rahmenbreite als ein Fenster mit der vollen Breite des FFT-Rahmens, wodurch die Ergebnisse der interpolierten Frequenz glatter erscheinen als eine nicht gefüllte FFT derselben Rahmenlänge.

Das Gegenteil trifft auch zu. Ein breiteres rechteckiges Fenster erzeugt einen schmaleren Sinc, wobei die Nullen näher an der Spitze liegen. Sie können also ein sorgfältig ausgewähltes, breiteres Fenster verwenden, um ein schmaler aussehendes Sinc zu erzeugen, um eine Frequenz näher an einer interessierenden Bin zu löschen als 1 Frequenzfach entfernt. Wie benutzt du ein breiteres Fenster? Wickeln Sie die Daten um und addieren Sie sie, was der Verwendung von FT-Basisvektoren entspricht, die nicht auf 1 FFT-Frame in der Länge abgeschnitten sind. Da jedoch der FFT-Ergebnisvektor dabei kürzer als die Daten ist, ist dies ein verlustreicher Prozess, der Artefakte einführt und einige neue Alias-Effekte einführt. Aber es gibt Ihnen einen schärferen Frequenzauswahl-Peak bei jedem Bin und Kerbfilter, die weniger als 1 Bin entfernt platziert werden können, sagen etwa auf halber Strecke zwischen den Bins, etc.

    
hotpaw2 16.02.2011 06:51
quelle