Jak obliczyć widmo mocy rozmieszczone w logach?

20

Chciałbym obliczyć widmo mocy, w którym częstotliwości są logarytmicznie rozmieszczone.

W metodzie Welcha występuje kompromis między rozdzielczością częstotliwości wynikowego widma mocy a liczbą średnich (tj. Błąd wyniku). Chciałbym, aby ten kompromis był dynamiczny, tzn. Robiłem mniej średnich dla punktów o niskiej częstotliwości, aby uzyskać lepszą rozdzielczość przy niskiej częstotliwości.

Czy istnieje standardowy sposób to zrobić?

Przypuszczam, że jednym ze sposobów byłoby początkowo pwelchuzyskanie bardzo wysokiej rozdzielczości (małej liczby średnich), a następnie ponowne zestawienie uzyskanego widma przy użyciu binowania logarytmicznego.

nibot
źródło
2
Zwykle obliczam regularne widmo, a następnie po prostu wykreślam dane w skali logarytmicznej. Nie jestem pewien, czy to możliwe, nawet bez bezpośredniego zmodyfikowania definicji DFT, ale interesuje mnie, czy rzeczywiście istnieją sposoby.
Phonon
Powiązane pytanie OP dla zainteresowanych.
Lorem Ipsum
Kolejne powiązane pytanie na SO: stackoverflow.com/questions/9849233/...
nibot

Odpowiedzi:

9

Znalazłem artykuł, który odnosi się bezpośrednio do tego pytania:

Pierwsze kilka liczb w dokumencie dobrze ilustruje problem, który rozwiązuje ten algorytm, a odnośniki zawierają przydatną bibliografię innych podejść (stała transformata Q, temperowana transformata Fouriera, artykuł z badania itp.).

Ich podejście nie polega na ponownym binowaniu danych wyjściowych istniejącej estymacji widma mocy opartej na FFT, ale jedynie na obliczeniu dyskretnej transformaty Fouriera przy (logarytmicznie rozmieszczonych) interesujących częstotliwościach. Dla każdej częstotliwości, która ma być oszacowana, w zasadzie implementują algorytm Welcha, ale z długością transformacji (a zatem także liczbą średnich) specjalnie wybraną dla każdej częstotliwości. Obliczenia każdego przedziału częstotliwości wykorzystują całe szeregi czasowe, ale segmentują inaczej. Wyniki mają pożądaną właściwość polegającą na tym, że rozdzielczość (szerokość przedziału) jest płynną funkcją częstotliwości, a wyniki można skalibrować jako gęstość widmową mocy lub widmo mocy.

Implementacja Matlab tutaj: https://github.com/tobin/lpsd

wprowadź opis zdjęcia tutaj Ujawnienie: Autorzy tego artykułu są w tej samej instytucji co ja.

nibot
źródło
1
Jakie byłyby korzyści z obliczenia widma w ten sposób? Jaka jest motywacja do tej metody?
Spacey,
1
Może to być szybsze niż obliczenie widma mocy za pomocą FFT, a następnie ponowne uruchomienie w niektórych okolicznościach.
nibot
Rozpocząłem implementację języka Python: github.com/rudolfbyker/lpsd Nadal wymaga testowania. Wkłady są mile widziane.
rudolfbyker
1

W tym przypadku użyłbym metody najmniejszych kwadratów do obliczenia częstotliwości pewnej znanej listy wartości. Najpopularniejszą metodą jest metoda Lomb. Działa dość podobnie do FFT lub DFT, ale będzie obliczać częstotliwość tylko dla określonych częstotliwości i może obsłużyć brakujące dane, gdyby to był problem. Pomysł jest następujący:

  1. Wybierz listę częstotliwości (w
  2. wtjotXjot znajdziesz moc częstotliwości w następujący sposób:

P.x(ω)=12)([jotXjotsałataω(tjot-τ)]2)jotsałata2)ω(tjot-τ)+[jotXjotgrzechω(tjot-τ)]2)jotgrzech2)ω(tjot-τ))

Zauważ, że to nie będzie skalować się tak ładnie jak FFT, więc zrobiłbym to tylko wtedy, gdy liczba pożądanych częstotliwości jest znacznie mniejsza niż FFT, która byłaby wymagana do zebrania wszystkich danych.

W przeciwnym razie można wykonać metodę interpolacji lub dowolne inne ponowne próbkowanie FFT lub DFT.

PearsonArtPhoto
źródło