Wie kann ich ein logarithmisches Leistungsspektrum berechnen?

20

Ich möchte ein Leistungsspektrum berechnen, in dem die Frequenzen logarithmisch voneinander beabstandet sind.

Bei der Welch-Methode gibt es einen Kompromiss zwischen der Frequenzauflösung des resultierenden Leistungsspektrums und der Anzahl der Mittelwerte (dh Fehler im Ergebnis). Ich möchte, dass dieser Kompromiss dynamisch ist, dh weniger Mittelwerte für Niederfrequenzpunkte erstellt, um eine feinere Auflösung bei Niederfrequenz zu erzielen.

Gibt es eine Standardmethode, um dies zu tun?

Ich nehme an, eine Möglichkeit wäre, zunächst pwelchmit einer sehr hohen Auflösung (niedrige Anzahl von Durchschnitten) zu arbeiten und dann das resultierende Spektrum unter Verwendung von logarithmischem Binning zu rebinieren.

Nibot
quelle
2
Normalerweise berechne ich das reguläre Spektrum und zeichne die Daten dann einfach auf einer logarithmischen Skala auf. Ich bin mir nicht sicher, ob es überhaupt möglich ist, die modifizierte Definition von DFT direkt zu verwenden, aber ich bin interessiert zu sehen, ob es tatsächlich Möglichkeiten gibt.
Phonon
OPs verwandte SO-Frage für Interessierte.
Lorem Ipsum
Eine weitere verwandte Frage zu SO: stackoverflow.com/questions/9849233/…
nibot

Antworten:

9

Ich habe einen Artikel gefunden, der diese Frage direkt anspricht:

Die ersten paar Abbildungen in der Veröffentlichung veranschaulichen das Problem, das dieser Algorithmus löst, und die Referenzen enthalten eine nützliche Bibliographie anderer Ansätze (Konstant-Q-Transformation, temperierte Fouriertransformation, ein Übersichtsartikel usw.).

Ihr Ansatz besteht nicht darin, die Ausgabe einer vorhandenen FFT-basierten Leistungsspektrumschätzung neu zu binieren, sondern nur die diskrete Fourier-Transformation bei den interessierenden (logarithmisch beabstandeten) Frequenzen zu berechnen. Für jede zu schätzende Frequenz implementieren sie grundsätzlich den Welch-Algorithmus, jedoch mit einer Transformationslänge (und damit auch einer Anzahl von Durchschnittswerten), die speziell für jede Frequenz ausgewählt wurde. Die Berechnung jedes Frequenzbereichs verwendet die gesamte Zeitreihe, ist jedoch unterschiedlich segmentiert. Die Ergebnisse haben die wünschenswerte Eigenschaft, dass die Auflösung (Bin-Breite) eine glatte Funktion der Frequenz ist und die Ergebnisse entweder als Leistungsspektraldichte oder als Leistungsspektrum kalibriert werden können.

Matlab-Implementierung hier: https://github.com/tobin/lpsd

Bildbeschreibung hier eingeben Offenlegung: Die Autoren dieses Papiers sind an der gleichen Institution wie ich.

Nibot
quelle
1
Was wären die Vorteile einer solchen Berechnung eines Spektrums? Was ist die Motivation für diese Methode?
Spacey
1
Dies kann schneller sein als das Berechnen des Leistungsspektrums mithilfe der FFT und unter bestimmten Umständen erneutes Binning.
Nibot
Ich habe eine Python-Implementierung gestartet: github.com/rudolfbyker/lpsd Es muss noch getestet werden. Beiträge sind willkommen.
Rudolfbyker
1

In diesem Fall würde ich eine Methode der kleinsten Quadrate verwenden , um die Häufigkeit einiger bekannter Wertelisten zu berechnen. Die gebräuchlichste Methode ist die Lomb-Methode. Es funktioniert ziemlich ähnlich wie eine FFT oder DFT, berechnet jedoch nur die Frequenz bei bestimmten Frequenzen und kann fehlende Daten verarbeiten, falls dies ein Problem sein sollte. Die Idee ist wie folgt:

  1. w
  2. wtjXj

Px(ω)=12([jXjcosω(tjτ)]2jcos2ω(tjτ)+[jXjsinω(tjτ)]2jsin2ω(tjτ))

Beachten Sie, dass dies nicht so gut skaliert wie eine FFT. Daher würde ich dies nur tun, wenn die Anzahl der gewünschten Frequenzen viel geringer ist als die FFT, die zum Sammeln aller Daten erforderlich wäre.

Ansonsten könnte man eine Interpolationsmethode oder eine andere Neuabtastung einer FFT oder DFT durchführen.

PearsonArtPhoto
quelle