FFT bei niedrigen Frequenzen aber hoher Auflösung durchführen?

7

Um dies in einen Zusammenhang zu bringen, möchte ich sowohl eine hohe Geschwindigkeit als auch eine hohe Genauigkeit für die Messung von Biosignalen über die FFT erreichen. Ich werde ein kurzes Beispiel beschreiben, um zu sehen, ob ich das richtig verstehe, und um meine Frage zu veranschaulichen. Wenn ich das richtig habe, wenn ich eine niederfrequente FFT nehmen möchte, zum Beispiel Frequenzen von 0 bis 64 Hz, um das Nyquist-Kriterium zu erfüllen, müsste meine Abtastfrequenz mindestens doppelt so hoch sein, also 128 Hz. Wenn ich dann eine Frequenzauflösung von 1 Hz zu einem Bin haben wollte, würde ich 64 Bins benötigen, was mich auf 128 Samples bringen würde, da es sowohl Real- als auch Imaginärteile gibt. Um diese 1-Hz-Auflösung zu erreichen, würde ich daher eine Abtastrate von nur 128 Hz haben, während 128 Abtastungen durchgeführt werden müssen.

Letztendlich führt mich dies zu meiner eigentlichen Frage: Ist es bei niedrigen Frequenzen möglich, eine hochauflösende FFT (z. B. 1 oder 2 Hz pro Bin) zu nehmen, während ein gewisser Anschein von Geschwindigkeit erhalten bleibt? Oder ist dies aufgrund der Einschränkungen der Transformation einfach unmöglich? Wenn ja, gibt es eine alternative Methode oder einen Kompromiss zwischen Auflösung und Geschwindigkeit? Nebenbei habe ich vor einiger Zeit einen Artikel über Überabtastung und das Herauswerfen von Samples mit bestimmten ganzzahligen Vielfachen nach einem bestimmten Punkt (oder so ähnlich, sorry, es ist eine Weile her) gelesen, um den Sampling-Prozess zu beschleunigen. Vielleicht weiß jemand, was das ist (oder vielleicht streife ich gerade). In jedem Fall vielen Dank für jede Hilfe, die Sie im Voraus leisten können.

Versengen
quelle
1
Bitte verwenden Sie den Absatzabstand, um Ihre Frage lesbar zu machen.
Peter Smith
Es gibt auch andere Methoden zum Schätzen eines Leistungsspektrums und verschiedene Methoden zum Verarbeiten einer FFT. en.wikipedia.org/wiki/Spectral_density_estimation
Spannungsspitze
3
Wavelet-Transformationen können auch in dieser Umgebung sehr nützlich sein, da sie bei höheren Frequenzen eine erhöhte zeitliche Auflösung bieten und gleichzeitig ermöglichen, dass die Signale mit niedrigerer Frequenz so langsam ansteigen und abfallen, wie es erforderlich ist.
Cort Ammon
Wenn Sie eine hochauflösende FFT wünschen, führen Sie lange Messungen mit einer Abtastrate durch, die der Nyquist-Rate entspricht. FFT von 1 Sekunde Messung ergibt 1 Hz Auflösung, 10 Sekunden Messung ergibt 0,1 Hz Auflösung
Aenid

Antworten:

11

Normalerweise müssen mehrere Abtastwerte pro Wellenformperiode erfasst werden, um gute Ergebnisse mit einer FFT zu erzielen. Die Nyquist-Grenze von 2 Proben pro Periode ist eine Untergrenze, aber normalerweise werden 10 Proben pro Periode oder mehr praktisch verwendet. Um ein 64-Hz-Signal zu analysieren, möchten Sie wahrscheinlich Samples mit einer Rate von 640 Hz oder mehr erfassen.

Außerdem erhalten Sie (bis zu einem gewissen Punkt) bessere Ergebnisse bei der Messung tatsächlicher periodischer Signale, wenn Sie Samples mit mehreren Wellenformperioden erfassen. Sie müssen bestimmen, welche Fenstergröße für Ihre Anwendung am sinnvollsten ist. Um jedoch 1-Hz-Signale zu erfassen, würde ich empfehlen, Daten im Wert von etwa 10 Sekunden zu erfassen.

Grundsätzlich müssen Sie also Proben mit einer hohen Rate relativ zu Ihrer höchsten Frequenz und für eine lange Zeit relativ zu Ihrer niedrigsten Frequenz erfassen, um gute Ergebnisse zu erzielen. Dies setzt voraus, dass es zu einer Verarbeitungsverzögerung kommt, die ein Vielfaches der Periode Ihrer niedrigsten Frequenz beträgt. Dies hindert Sie jedoch nicht daran, diese Verarbeitung so oft wie einmal pro Abtastzeit durchzuführen.

Wenn Sie also die Frequenzkomponenten eines Signals analysieren möchten, während es sich im Laufe der Zeit ändert, und Sie sehen möchten, wie die FFT mit einer hohen Rate aussieht, können Sie einfach so viele Samples aufnehmen, wie Sie benötigen. Führen Sie die FFT aus. Verschieben Sie alle Proben über eine Position und nehmen Sie die FFT zur nächsten Probenzeit erneut.

BEISPIEL:
1) Probe mit 819,2 Proben pro Sekunde mit einem Zeitfenster von 10 s.
2) Lassen Sie die Proben 10 s lang akkumulieren (für insgesamt 8192 Proben).
3) Führen Sie die FFT mit 8192 Proben durch.
4) Verwerfen Sie die erste Probe im Puffer und verschieben Sie die anderen 8191 Proben über eine Position.
5) 1 / 819,2 Sekunden später fügen Sie die nächste Probe am Ende des Puffers hinzu und führen Sie die FFT erneut aus.
6) Wiederholen Sie die Schritte 4 bis 6, bis Sie Ihre Analyse abgeschlossen haben.

Dies würde Ihnen eine FFT geben, die ein Schiebefenster von Daten 819,2-mal pro Sekunde analysiert.

Die für das Beispiel benötigte Verarbeitungsleistung würde ungefähr 13 * 8192 * 819,2 betragen. Multiplizieren Sie akkumulierte Operationen pro Sekunde (87 Millionen MACs / s). Ein gewöhnlicher PC könnte dies leicht handhaben. Sie können die Verarbeitungsleistung natürlich um den Faktor N reduzieren, indem Sie nur die FFT je N Samples ausführen (zum Beispiel erfordert das Ausführen alle 8 Samples nur 11 Millionen MACs pro Sekunde).

user4574
quelle
OK, das macht Sinn, denke ich. Meine ursprüngliche Prämisse war die Idee, dass ich jedes Mal, wenn ich eine Transformation durchführen wollte, einen völlig neuen Datensatz erfassen musste, aber es ist sinnvoll, dass Sie das fft einfach jedes Mal ausführen können, wenn ein neues Datenelement in das Verzeichnis verschoben wird Array. Das scheint auch das zu sein, worauf sich alle anderen einlassen, aber es hat nicht wirklich geklickt, bis ich Ihre Erklärung gelesen habe. Danke
Scorch
6
Zwei Dinge, die meiner Meinung nach für diesen Ansatz nützlich sein könnten, die möglicherweise zu offensichtlich waren, um sie zu erwähnen: 1) Sie können ein 1-Hz-Signal nicht schneller als 1 Sekunde von einem 1-Hz-Signal mit niedrigerer Leistung plus einer Gleichstromvorspannung unterscheiden, was eine mathematische Grenze darstellt . 2) Dieser Ansatz umgeht nach dem Grundieren diese Grenze, indem alte Signale wiederverwendet werden. Dies hat den offensichtlichen Effekt, dass starke Korrelationen zwischen benachbarten Signalen erzeugt werden. Beides mag Ihnen am Ende nicht wichtig sein, aber ich fand sie nützlich, um zu erklären, warum dieser Ansatz zu "betrügen" scheint.
Cort Ammon
13

Ich gehe davon aus, dass Sie mit "hoher Geschwindigkeit" eine kleine Verzögerung von der Datenerfassung bis zur resultierenden FFT meinen. Bei einer niedrigen Abtastrate ist Ihre Rechenfähigkeit angesichts moderner Computer nicht der einschränkende Faktor. Das Verzögerungsproblem besteht darin, genügend Daten für die Analyse zu haben. Wenn Sie möchten, dass sich Ihr 1-Hz-Bin von DC / 0-Hz unterscheidet, müssen Sie genügend Signaldaten sammeln, um einen vollständigen Zyklus dieses Signals zu erfassen. Aus diesem Grund bietet eine längere FFT bei einer festen Abtastrate eine höhere Frequenzauflösung.

Bei sehr niedrigen Frequenzen bedeutet Ihre niedrige Abtastrate (128 Hz), dass nur wenige Abtastwerte erforderlich sind, um diese Frequenzen zu unterscheiden: Eine 128-Punkt-FFT hat eine Auflösung von 1 Hz und eine 256-Punkt-FFT eine Auflösung von 0,5 Hz. Das Problem liegt darin, diese Daten zu erhalten. Die Akkumulation von 256 Punkten dauert ganze 2 Sekunden bei einer Abtastrate von 128 Hz. Für eine schnellere FFT-Aktualisierungsrate können Sie Samples wiederverwenden: Nehmen Sie beispielsweise 32 Samples als Datenblöcke und berechnen Sie dann eine 256-Punkte-FFT mit den letzten 8 Blöcken. Wenn Sie dann 32 neue Samples haben, können Sie das älteste wegwerfen und die FFT 4 Mal pro Sekunde aktualisieren.

Im Wesentlichen sind Sie auf die Kompromisse gestoßen, die beim Erstellen eines Spektrogramms erforderlich sind : Sie müssen zwischen Frequenzauflösung und Zeitlokalität wählen. (MATLAB-Aktivität und Beispiel hier ) Für eine höhere Frequenzauflösung sind mehr Samples erforderlich, sodass Ihre FFT eine lange Zeitspanne darstellt. Wenn Sie eine kurze Zeitspanne verwenden, werden weniger Samples verwendet, wodurch sich Ihre FFT-Frequenzauflösung verringert. Sie müssen auswählen, was in Ihrer Anwendung wichtiger ist.

user2943160
quelle
4
+1 zum Erkennen des eigentlichen Problems (Datenerfassung); Die Wellenform muss auftreten, damit sie gemessen werden kann, und das langsame Variieren von Daten per Definition dauert lange, um Abweichungen von zu messen.
helloworld922
2

Moderne DSP-Schiffe können die von Ihnen beschriebene Funktion problemlos ausführen. Wenn Sie nur 128 Mal pro Sekunde abtasten, können Sie problemlos eine FFT für jede Probe durchführen und eine Probe pro FFT verschieben.

John Birckhead
quelle
2

Wenn Ihr einziges Werkzeug ein Hammer ist, sieht jedes Problem wie ein Nagel aus. Ich denke, Sie verstehen nicht, was eine FFT eigentlich ist. Es ist eine schnelle Implementierung einer DFT (diskrete Fourier-Transformation). Die DFT ist ein Analysewerkzeug für diskrete Signale mit einer Periodizität des Analyseintervalls.

Bei realen Signalen (außerhalb der Analyse von Motorsignalen oder anderen rotierenden Maschinen) entspricht Ihr Messintervall nicht der Periodizität des Signals.

Infolgedessen werden die "Frequenzbereiche" bedeutungslos und entsprechen nur den tatsächlichen Merkmalen des Signals durch die Linse von Fensterartefakten und Spreizspektren.

Während die Effizienz der FFT und ihre Basisfunktionen Verhältnisses zu den Eigenfunktionen von linearen verschiebungsinvariante Systemen macht es wahrscheinlich , dass das Arbeitspferd unter der Haube von vielen frequenzbasierten Tool wird ist , um eine FFT am Ende, die rohen Ergebnisse hinsichtlich der Interpretation von "Frequenzbereichen" ist fast sicher, dass sie bestenfalls lose mit der Realität verbunden sind.

Wenn es sich um ein einzelnes Signal handelt, das Sie verfolgen / charakterisieren möchten, ist es wahrscheinlich besser, wenn Sie etwas verwenden, das auf LPC-Koeffizienten basiert.

user113378
quelle