Was ist eine gute FFT-Fensterfunktion, um DC abzulehnen?


9

Ich verwende eine FFT, um zu analysieren, was im Wesentlichen die Leistungshüllkurve eines Signals ist (siehe hier für Informationen zum enthaltenen Projekt), und um die Gleichstromkomponente zu eliminieren, möchte ich ein Fenster verwenden, da die Leistungszahlen immer positiv sind Funktion, die 50/50 positiv und negativ ist, gegenüber der üblichen allpositiven Funktion.

Ich habe die " Flat Top " -Funktion übernommen, die a0Vorspannung entfernt und sie von Cosinus in Sinus konvertiert, bin mir aber nicht sicher, ob dies optimal (oder sogar sinnvoll) ist.

Irgendein Vorschlag?


9
subtrahieren Sie einfach den Mittelwert vor dem Fenster?
Endolith

Antworten:


1

Die erste Ableitung der gängigsten kontinuierlichen Fensterfunktionen (von Hann usw.) lehnt Gleichstrom ab, weist jedoch weiterhin einen Größenfrequenzgang auf, der dem der ursprünglichen Fensterfunktion ähnlich ist. Sie können also weiterhin Ihre ursprünglichen "Güte" -Kriterien für die Fensterauswahl verwenden, wenn diese nicht mit der Phase zusammenhängen.


2
Obwohl diese Antwort hauptsächlich richtig ist, handelt es sich eher um einen Kommentar, daher wäre es sehr nützlich, sie zu erweitern.
Phonon

Es geht jedoch bis zu einem gewissen Grad auf meine Frage ein.
Daniel R Hicks

1
Gibt es einen Grund, dies zu tun, anstatt nur den Mittelwert vor dem Fenster zu subtrahieren?
Nibot

Wenn die Antwort von JasonR richtig ist, funktioniert diese Idee, DC über die Fensterfunktion abzulehnen (und trotzdem eine gute Spektralschätzung zu erhalten), nicht.
Nibot

@nibot: Ein möglicher Grund könnte sein, dass eine Summe plus Subtraktion nicht möglich ist (zum Beispiel in einer festen Hardware-Pipeline oder Latenz nicht verfügbar).
hotpaw2

7

Wenn Sie eine Spektralanalyse für ein Signal mit einer großen Gleichstromkomponente durchführen möchten und diese Gleichstromspitze unterdrücken möchten, ist eine Fensterfunktion nicht das, was Sie wollen. Wie einige andere Antworten feststellten, ist ein Hochpassfilter (oder, anders betrachtet, ein Sperrfilter mit einer Kerbe bei einer Frequenz von Null) eine geeignete Lösung.

Um zu verstehen, warum, müssen Sie darüber nachdenken, was das Anwenden einer Fensterfunktion auf den Frequenzgang jedes DFT-Ausgangs bewirkt. Die DFT ist definiert als:

X.[k]]=n=0N.- -1x[n]]e- -j2πnkN.

Eine Interpretation der Funktionsweise der DFT ist eine Reihe von Filtern mit gleich beabstandeten Frequenzen zwischen - f sN. undfs- -fs2 . Fassen Sie die obige Summe wie folgt um:fs2

X.[k]]=n=0N.- -1xk[n]]

wo:

xk[n]]=x[n]]e- -j2πnkN.

Der te DFT-Ausgang wird also erzeugt, indem zuerst das Eingangssignal x [ n ] genommen und mit einem komplexen Exponential bei einer Frequenz von - 2 π k multipliziert wirdkx[n]] , um ein herunterkonvertiertes Signalxk[n] zu erhalten. Das resultierende Signal wird dann über dasN-Abtastfenstersummiert, um den DFT-AusgangX[k] zu ergeben. Dies ist effektiv ein Filter mit gleitendem Durchschnitt (manchmal auch als Boxcar-Filter bezeichnet), dessen Impulsantwort wie folgt beschrieben werden kann:- -2πkN.xk[n]]N.X.[k]]

b[n]]={1, x=0,1,,N.- -10, Andernfalls

Die Größenantwort des Boxcar-Filters kann ermittelt werden, indem die zeitdiskrete Fourier-Transformation (DTFT) dieser Impulsantwort verwendet wird:

|H.(f)|=|Sünde(N.πffs)Sünde(πffs)|

f

x[n]]

X.[k]]=n=0N.- -1w[n]]x[n]]e- -j2πnkN.=n=0N.- -1w[n]]xk[n]]

xk[n]]

|H.(f)|=|W.(f)|

W.(f)w[n]]x[n]]

Wenn Sie also wirklich nur die DC-Komponente des Signals löschen möchten, ist es der richtige Weg, sie über eine andere Art der Vorverarbeitung und nicht über Zeitbereichsfenster zu entfernen. Sie können beispielsweise ein lineares Hochpassfilter mit einer sehr niedrigen Grenzfrequenz verwenden oder zuerst den geschätzten Mittelwert vom Signal subtrahieren. Die Auswahl zwischen diesen Methoden sollte auf den anderen Einschränkungen Ihres Systems basieren.


3

Ich denke nicht, dass die Verwendung einer Fensterfunktion ein guter Weg ist, um DC zu entfernen. Wie der Endolith erwähnt, besteht eine übliche Methode darin, den Mittelwert vor dem Fenster zu subtrahieren. Eine andere Möglichkeit wäre, vor der Analyse ein Hochpassfilter auf Ihr Signal anzuwenden, beispielsweise mit einer Grenzfrequenz von etwa 10 Hz.


Das Anwenden eines Hochpassfilters ist keine Option, wenn das Signal nicht in analoger Form vorliegt. Aber ich glaube, Sie (& Endolith) haben Recht, dass das Subtrahieren des Mittelwerts funktionieren sollte, insbesondere wenn auch ein Fenster verwendet wird, das die Endpunkte auf Null zieht. (Und ein Hochpassfilter würde einen niedrigeren Grenzwert benötigen, da ich das Signal auf vielleicht 0,01 Hz herunter analysiere.)
Daniel R Hicks

2
Warum brauchen Sie Ihrer Meinung nach ein analoges Signal, um einen Hochpassfilter anzuwenden? Es ist sicherlich möglich, ein digitales HPF zu erstellen.
Jason R

@JasonR - Ich gebe zu, dass ich in solchen Dingen ziemlich unwissend bin (meine Signalkurse waren vor 40 Jahren, ziemlich genau vor FFT et al.), Aber es scheint mir, dass ich einen digitalen Hochpassfilter erschaffe Ich müsste zuerst die Fourier-Transformation des Signals erzeugen.
Daniel R Hicks

1
Das ist überhaupt nicht der Fall; Sie können ein Hochpassfilter genauso gut erzeugen wie ein Tiefpassfilter, einen Bandpass usw. Tatsächlich gibt es Techniken, um einen Tiefpassfilter -Prototyp in ein Hochpassfilter mit analoger Reaktion umzuwandeln. Die meiste Software für das Filterdesign (z. B. MATLAB) kann verwendet werden, um alle Arten von Filtern herzustellen.
Jason R

1
Ich bin mir nicht sicher, woher Sie den Eindruck haben, dass die Implementierung eines Hochpassfilters eine Differenzierung erfordert. Die Differenzierung ist eine Hochpassoperation, jedoch keine geeignete Implementierung für ein Hochpassfilter (da sein Frequenzgang eine Rampe ist, wodurch höhere Frequenzen verstärkt werden, wenn häufig Rauschen vorhanden ist). Der Wikipedia-Artikel über Hochpassfilter wäre ein guter Anfang.
Jason 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.