Führen Sie FFT bei niedrigen Frequenzen, aber hoher Auflösung durch?

Um dies in einen Zusammenhang zu bringen: Ich versuche, sowohl eine hohe Geschwindigkeit als auch eine hohe Genauigkeit für die Messung von Biosignalen durch die FFT zu erreichen. Ich werde ein kurzes Beispiel beschreiben, um zu sehen, ob ich das richtig verstehe, und um meine Frage zu veranschaulichen. Also, wenn ich das richtig habe, wenn ich eine niederfrequente FFT nehmen wollte, sagen wir zum Beispiel Frequenzen von 0-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 mit einer Abtastrate von nur 128 Hz konfrontiert, während ich 128 Abtastungen vornehmen müsste.

Letztendlich führt mich dies zu meiner eigentlichen Frage: Ist es bei niedrigen Frequenzen möglich, eine FFT mit hoher Auflösung (z. B. 1 oder 2 Hz pro Bin) zu verwenden und gleichzeitig einen gewissen Anschein von Geschwindigkeit beizubehalten? 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 das Oversampling und das Wegwerfen von Samples bei 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 schweife ich an dieser Stelle nur ab). So oder so, danke für jede Hilfe, die Sie im Voraus leisten können.

Bitte verwenden Sie Absatzabstände, um Ihre Frage lesbar zu machen.
Es gibt auch andere Methoden zum Schätzen eines Leistungsspektrums und verschiedene Arten zum Verarbeiten einer FFT. en.wikipedia.org/wiki/Spectral_density_estimation
Wavelet-Transformationen können in dieser Umgebung ebenfalls sehr nützlich sein, da sie eine erhöhte zeitliche Auflösung bei höheren Frequenzen bereitstellen, während sie es den niedrigeren Frequenzsignalen ermöglichen, so langsam wie nötig anzusteigen und abzufallen.
Wenn Sie FFT mit hoher Auflösung wünschen, führen Sie lange Messungen mit einer Abtastrate durch, die der Nyquist-Rate entspricht. FFT einer 1-Sekunden-Messung ergibt eine Auflösung von 1 Hz, eine 10-Sekunden-Messung ergibt eine Auflösung von 0,1 Hz

Antworten (4)

Normalerweise muss man mehrere Abtastwerte pro Wellenformperiode erfassen, um gute Ergebnisse aus einer FFT zu erhalten. Die Nyquist-Grenze von 2 Samples pro Periode ist eine untere Grenze, aber normalerweise werden 10 Samples pro Periode oder mehr in der Praxis 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 mehrere Wellenformperioden im Wert von Samples erfassen. Sie müssen bestimmen, welche Fenstergröße für Ihre Anwendung am sinnvollsten ist, aber um 1-Hz-Signale zu erfassen, würde ich vorschlagen, Daten im Wert von etwa 10 Sekunden zu erfassen.

Im Grunde müssen Sie Samples relativ zu Ihrer höchsten Frequenz mit einer hohen Rate und relativ zu Ihrer niedrigsten Frequenz über einen langen Zeitraum erfassen, um gute Ergebnisse zu erzielen. Dies erfordert, dass es eine Art Verarbeitungsverzögerung geben wird, die ein Vielfaches der Periode Ihrer niedrigsten Frequenz sein wird. 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 sehen möchten, wie die FFT bei hoher Rate aussieht, können Sie einfach so viele Samples aufnehmen, wie Sie benötigen. Führen Sie die FFT aus. Verschieben Sie alle Samples um 1 Position und führen Sie dann die FFT erneut zum nächsten Sample-Zeitpunkt durch.

BEISPIEL:
1) Abtastung mit 819,2 Abtastungen pro Sekunde mit einem Zeitfenster von 10 s.
2) Lassen Sie die Abtastwerte 10 s lang akkumulieren (für insgesamt 8192 Abtastwerte)
. 3) Führen Sie die FFT mit 8192 Abtastwerten aus.
4) Verwerfe den ersten Abtastwert im Puffer und behalte die anderen 8191 Abtastwerte, indem du sie um 1 Position verschiebst.
5) 1/819,2 Sekunden später fügen Sie den nächsten Abtastwert am Ende des Puffers hinzu und führen Sie die FFT erneut aus.
6) Wiederholen Sie die Schritte 4-6, bis Sie Ihre Analyse abgeschlossen haben.

Dies würde Ihnen eine FFT geben, die ein gleitendes Datenfenster 819,2 Mal pro Sekunde analysiert

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

Okay, 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 sammeln musste, aber es macht Sinn, dass Sie die fft einfach jedes Mal ausführen könnten, wenn ein neues Datenelement in die verschoben wird Reihe. Das scheint auch das zu sein, worauf alle anderen hinaus wollen, aber es hat nicht wirklich geklickt, bis ich Ihre Erklärung gelesen habe. Vielen Dank
Zwei Dinge, die meiner Meinung nach für diesen Ansatz nützlich sein könnten, die vielleicht 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 geringerer Leistung plus einer DC-Vorspannung unterscheiden, das ist also eine mathematische Grenze . 2) Dieser Ansatz umgeht diese Grenze, sobald er vorbereitet ist, indem er alte Signale wiederverwendet. Dies hat den offensichtlichen Effekt, dass starke Korrelationen zwischen benachbarten Signalen erzeugt werden. Beides mag am Ende für Sie keine Rolle spielen, aber ich fand es nützlich, um zu erklären, warum dieser Ansatz zum „Betrügen“ zu führen scheint.

Ich gehe davon aus, dass Sie mit "Hochgeschwindigkeit" eine kleine Verzögerung von der Datenerfassung bis zur resultierenden FFT meinen. Bei einer niedrigen Abtastrate ist Ihre Rechenleistung angesichts moderner Computer nicht der limitierende Faktor. Das Verzögerungsproblem liegt 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 erhalten Sie bei einer festen Abtastrate mit einer längeren FFT eine höhere Frequenzauflösung.

Bei sehr niedrigen Frequenzen bedeutet Ihre niedrige Abtastrate (128 Hz) also, dass nur wenige Abtastungen erforderlich sind, um diese Frequenzen zu unterscheiden: Eine 128-Punkt-FFT hat eine Auflösung von 1 Hz und eine 256-Punkt-FFT hat eine Auflösung von 0,5 Hz. Das Problem liegt darin, diese Daten zu bekommen. 256 Punkte brauchen ganze 2 Sekunden, um sich bei einer Abtastrate von 128 Hz anzusammeln. Für eine schnellere FFT-Aktualisierungsrate könnten 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 verwerfen und die FFT viermal 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 ) Eine höhere Frequenzauflösung erfordert mehr Samples, sodass Ihre FFT eine lange Zeitspanne darstellt. Die Verwendung einer kurzen Zeitspanne bedeutet die Verwendung von weniger Samples, wodurch Ihre FFT-Frequenzauflösung niedriger wird. Sie müssen entscheiden, was in Ihrer Anwendung wichtiger ist.

+1 zum Erkennen des eigentlichen Problems (Daten aufnehmen); Die Wellenform muss auftreten, damit sie gemessen werden kann, und langsam variierende Daten erfordern definitionsgemäß viel Zeit, um Abweichungen zu messen.

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

Wenn Ihr einziges Werkzeug ein Hammer ist, sieht jedes Problem wie ein Nagel aus. Ich glaube, 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 wirklich einer Periodizität des Signals.

Infolgedessen werden die "Frequenz-Bins" bedeutungslos und entsprechen nur den tatsächlichen Merkmalen des Signals durch die Linse von Fensterartefakten und Streuspektren.

Während die Effizienz der FFT und die Beziehung ihrer Basisfunktionen zu den Eigenfunktionen linearer verschiebungsinvarianter Systeme es wahrscheinlich machen, dass das Arbeitspferd unter der Haube vieler frequenzbasierter Werkzeuge letztendlich eine FFT sein wird , die die Rohergebnisse in Begriffen interpretiert von "Frequenz-Bins" wird mit an Sicherheit grenzender Wahrscheinlichkeit bestenfalls in einem losen Bezug zur Realität enden.

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