Me gustaría calcular un espectro de potencia en el que las frecuencias están logarítmicamente espaciadas.
En el método de Welch, existe una compensación entre la resolución de frecuencia del espectro de potencia resultante y el número de promedios (es decir, error en el resultado). Me gustaría que esta compensación sea dinámica, es decir, hacer menos promedios para puntos de baja frecuencia para tener una resolución más fina a baja frecuencia.
¿Hay una forma estándar de hacer esto?
Supongo que una forma sería hacer inicialmente pwelch
con una resolución muy alta (bajo número de promedios), y luego refinar el espectro resultante usando binning logarítmico.
Respuestas:
Encontré un artículo que aborda esta pregunta directamente:
Las primeras figuras en el documento ilustran muy bien el problema que resuelve este algoritmo, y las referencias contienen una bibliografía útil de otros enfoques (transformación Q constante, transformación de Fourier templada, un artículo de encuesta, etc.).
Su enfoque no es volver a enlazar la salida de una estimación de espectro de potencia basada en FFT existente, sino solo calcular la transformada de Fourier discreta en las frecuencias de interés (espaciadas logarítmicamente). Para cada frecuencia a estimar, básicamente implementan el algoritmo de Welch, pero con una longitud de transformación (y, por lo tanto, también un número de promedios) elegidos específicamente para cada frecuencia. El cálculo de cada intervalo de frecuencia utiliza la serie de tiempo completa, pero segmentada de manera diferente. Los resultados tienen la propiedad deseable de que la resolución (ancho del depósito) es una función suave de la frecuencia, y los resultados pueden calibrarse como una densidad espectral de potencia o un espectro de potencia.
Implementación de Matlab aquí: https://github.com/tobin/lpsd
Divulgación: Los autores de este artículo están en la misma institución que yo.
fuente
En este caso, usaría un método de mínimos cuadrados para calcular la frecuencia de alguna lista de valores conocida. El método más común es el método Lomb. Funciona bastante similar a una FFT o DFT, pero solo calculará la frecuencia a frecuencias predeterminadas, y podría manejar los datos faltantes, en caso de que sea un problema. La idea es la siguiente:
Tenga en cuenta que esto no se escalará tan bien como lo haría una FFT, por lo que solo haría esto si el número de frecuencias deseadas es mucho menor que la FFT que se requeriría para recopilar todos los datos.
De lo contrario, se podría hacer un método de interpolación o cualquier otro muestreo de una FFT o DFT.
fuente