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 pwelch
avec une très haute résolution (faible nombre de moyennes), puis de rebinner le spectre résultant en utilisant le binning logarithmique.
Réponses:
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
Divulgation: Les auteurs de cet article sont dans la même institution que moi.
la source
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:
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.
la source