Comment puis-je calculer un spectre de puissance à espacement logarithmique?


20

Je voudrais calculer un spectre de puissance dans lequel les fréquences sont espacées logarithmiquement.

Dans la méthode de Welch, il existe un compromis entre la résolution en fréquence du spectre de puissance résultant et le nombre de moyennes (c'est-à-dire une erreur dans le résultat). Je voudrais que ce compromis soit dynamique, c'est-à-dire fasse moins de moyennes pour les points basse fréquence afin d'avoir une résolution plus fine à basse fréquence.

Existe-t-il un moyen standard de procéder?

Je suppose qu'une façon serait de faire initialement pwelchavec une très haute résolution (faible nombre de moyennes), puis de rebinner le spectre résultant en utilisant le binning logarithmique.


2
Je calcule habituellement un spectre régulier et je trace ensuite simplement les données sur une échelle logarithmique. Je ne suis pas sûr que ce soit même sans utiliser directement la définition modifiée de DFT, mais je suis intéressé de voir s'il existe effectivement des moyens.
Phonon

La question du SO liée au PO pour les personnes intéressées.
Lorem Ipsum

Une autre question connexe sur SO: stackoverflow.com/questions/9849233/…
nibot

Réponses:


9

J'ai trouvé un article qui répond directement à cette question:

Les premières figures de l'article illustrent bien le problème que cet algorithme résout, et les références contiennent une bibliographie utile d'autres approches (transformée Q constante, transformée de Fourier tempérée, article d'enquête, etc.).

Leur approche n'est pas de regrouper la sortie d'une estimation de spectre de puissance FFT existante, mais de calculer la transformée de Fourier discrète uniquement aux fréquences (espacées logarithmiquement) d'intérêt. Pour chaque fréquence à estimer, ils implémentent fondamentalement l'algorithme de Welch, mais avec une longueur de transformation (et donc aussi un nombre de moyennes) spécifiquement choisie pour chaque fréquence. Le calcul de chaque groupe de fréquences utilise la totalité de la série temporelle, mais segmenté différemment. Les résultats ont la propriété souhaitable que la résolution (largeur de la corbeille) soit une fonction régulière de la fréquence, et les résultats peuvent être calibrés en tant que densité spectrale de puissance ou spectre de puissance.

Implémentation de Matlab ici: https://github.com/tobin/lpsd

entrez la description de l'image ici Divulgation: Les auteurs de cet article sont dans la même institution que moi.


1
Quels seraient les avantages de calculer un spectre de cette manière? Quelle est la motivation de cette méthode?
Spacey

1
Il peut être plus rapide que de calculer le spectre de puissance à l'aide de la FFT puis de redémarrer dans certaines circonstances.
nibot

J'ai commencé une implémentation Python: github.com/rudolfbyker/lpsd Il a encore besoin de tests. Les contributions sont les bienvenues.
rudolfbyker

1

Dans ce cas, j'utiliserais une méthode des moindres carrés pour calculer la fréquence d'une liste de valeurs connue. La méthode la plus courante est la méthode Lomb. Il fonctionne de manière assez similaire à une FFT ou DFT, mais il ne calculera la fréquence qu'à des fréquences déterminées, et il pourrait gérer les données manquantes, si cela devait être un problème. L'idée est la suivante:

  1. Décidez d'une liste de fréquences ( ) sur lesquelles calculer, qui correspondent aux bandes de fréquences souhaitées que vous souhaitez échantillonner.w
  2. Étant donné les fréquences , les moments auxquels ils ont été échantillonnés et les valeurs , trouvez la puissance des fréquences comme suit:t j X jwtjXj

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

Notez que cela ne sera pas aussi bien mis à l'échelle qu'une FFT, donc je ne ferais cela que si le nombre de fréquences souhaitées est beaucoup plus faible que la FFT qui serait nécessaire pour collecter toutes les données.

Sinon, on pourrait faire une méthode d'interpolation ou tout autre rééchantillonnage d'une FFT ou DFT.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.