Come posso calcolare uno spettro di potenza spaziato tra i log?


20

Vorrei calcolare uno spettro di potenza in cui le frequenze sono spaziate logaritmicamente.

Nel metodo di Welch c'è un compromesso tra la risoluzione in frequenza dello spettro di potenza risultante e il numero di medie (cioè errore nel risultato). Vorrei che questo compromesso fosse dinamico, vale a dire fare meno medie per i punti a bassa frequenza al fine di avere una risoluzione più fine a bassa frequenza.

Esiste un modo standard per farlo?

Suppongo che un modo sarebbe inizialmente quello di fare pwelchcon una risoluzione molto alta (basso numero di medie), e quindi affinare lo spettro risultante usando il binning logaritmico.


2
Di solito computo lo spettro regolare e quindi semplicemente traccia i dati su una scala di registro. Non sono sicuro che sia anche possibile senza usare direttamente la definizione modificata di DFT, ma sono interessato a vedere se effettivamente ci sono modi.
Phonon,

La domanda SO relativa dell'OP per gli interessati.
Lorem Ipsum,

Un'altra domanda relativa su SO: stackoverflow.com/questions/9849233/...
nibot

Risposte:


9

Ho trovato un documento che affronta direttamente questa domanda:

Le prime figure nel documento illustrano bene il problema che questo algoritmo risolve e i riferimenti contengono un'utile bibliografia di altri approcci (trasformazione a Q costante, trasformata di Fourier temperata, un articolo di indagine, ecc.).

Il loro approccio non è quello di ri-binare l'output di una stima dello spettro di potenza basata su FFT esistente, ma di calcolare solo la trasformata discreta di Fourier alle frequenze di interesse (spaziate logaritmicamente). Per ogni frequenza da stimare, fondamentalmente implementano l'algoritmo di Welch, ma con una lunghezza di trasformazione (e quindi anche un numero di medie) scelti appositamente per ciascuna frequenza. Il calcolo di ogni bin di frequenza utilizza l'intera serie temporale, ma segmentato in modo diverso. I risultati hanno la proprietà desiderabile che la risoluzione (larghezza del contenitore) sia una funzione regolare della frequenza e che i risultati possano essere calibrati come densità spettrale di potenza o spettro di potenza.

Implementazione di Matlab qui: https://github.com/tobin/lpsd

inserisci qui la descrizione dell'immagine Divulgazione: gli autori di questo documento sono nella mia stessa istituzione.


1
Quali sarebbero i vantaggi del calcolo di uno spettro in questo modo? Qual è la motivazione per questo metodo?
Spacey,

1
Può essere più veloce rispetto al calcolo dello spettro di potenza utilizzando la FFT e quindi in alcuni casi il reinserimento.
nibot

Ho iniziato un'implementazione di Python: github.com/rudolfbyker/lpsd Ha ancora bisogno di essere testato. I contributi sono benvenuti.
Rudolfbyker,

1

In questo caso, utilizzerei un metodo dei minimi quadrati per calcolare la frequenza di alcuni elenchi di valori noti. Il metodo più comune è il metodo Lomb. Funziona in modo abbastanza simile a un FFT o DFT, ma calcolerà solo la frequenza a frequenze determinate e potrebbe gestire i dati mancanti, qualora ciò costituisse un problema. L'idea è la seguente:

  1. w
  2. wtjXj

PX(ω)=12([ΣjXjcosω(tj-τ)]2Σjcos2ω(tj-τ)+[ΣjXjpeccatoω(tj-τ)]2Σjpeccato2ω(tj-τ))

Nota, questo non si ridimensionerà come una FFT, quindi lo farei solo se il numero di frequenze desiderate è molto più basso della FFT che sarebbe necessario per raccogliere tutti i dati.

Altrimenti, si potrebbe fare un metodo di interpolazione o qualsiasi altro ricampionamento di un FFT o DFT.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.