Me gustaría usar STFT para el análisis multipitch. Me doy cuenta de que detectar los parciales existentes en la señal es solo el comienzo. Todavía tengo problemas con eso.
Digamos que tengo señal muestreada con frecuencia 'CD' 44100Hz
. Con la ventana de 1024
muestras obtengo la resolución del bin de frecuencia 22500Hz/512=43Hz
. Esto es suficiente solo para discernir notas altas de piano como:
C5 = 523.251Hz
y C#5 = 554.365
.
Solía pensar que 1024
es una ventana bastante grande. ¿Pero tal vez no lo es y normalmente se usan ventanas más grandes para detectar parciales?
¿Se puede aumentar la resolución de frecuencia con algún otro método que no sea aumentar el tamaño de la ventana, lo que empeora la resolución de tiempo? Pensé en dos métodos:
Método 1:
- Divida la señal en bandas de frecuencia con filtros de paso de banda (por ejemplo
0-11.25Hz
y11.25-22.5Hz
). - Reduzca la muestra de las bandas más altas para que las frecuencias altas originales ahora sean bajas (así que hágalo para la segunda banda
11.25-22.5Hz -> 0Hz-22.5Hz
), no estoy seguro de que esto sea posible. - Conjuntos de contenedores resultantes de Concat con etiquetas ajustadas.
Método2:
- Utilice series de filtros de paso bajo con límite creciente.
- Realice FFT en rangos de frecuencia crecientes.
- Para cada frecuencia, utilice la mejor resolución posible (contenedores del primer FFT en el que se incluyó esta frecuencia).
- Esto hará que las frecuencias bajas tengan una mejor resolución, pero creo que esto está bien porque para notas más altas la diferencia de frecuencia es mayor.
Le agradeceré cualquier comentario sobre este tema.
También leí aquí: ¿Cómo influyen el tamaño de la ventana, la frecuencia de muestreo en la estimación del tono FFT? sobre el método para mejorar los resultados de picking pico. Creo que intentará usarlo.
Respuestas:
Si realmente insiste en usar FFT (en lugar de métodos paramétricos, que no sufrirían compensaciones de tiempo / frecuencia), puede falsificar una resolución mucho mejor utilizando la información de fase para recuperar la frecuencia instantánea para cada contenedor FFT. Entonces, los parciales se pueden detectar buscando mesetas en la función que den una frecuencia instantánea en función del índice del contenedor FFT. La implementación común de esta técnica como se describe en este documento le "costará" un STFT adicional (la frecuencia instantánea se recupera mediante operaciones en el STFT de la señal y el STFT de la derivada de la señal).
Vea, por ejemplo, la función de ifgram en esta implementación de Matlab de modelado sinusoidal de señales de audio.
Tenga en cuenta que esto no ayudará a resolver dos parciales que caen en contenedores FFT adyacentes. Simplemente proporcionará una estimación de frecuencia mucho más precisa que simplemente convertir en una frecuencia el índice de bin FFT de un pico espectral.
fuente
El término "resolución" tiene múltiples significados. En general, no puede aumentar su capacidad de separar (o "resolver") los picos espectrales espaciados por interpolación utilizando la misma longitud de ventana de datos. Pero puede estimar la frecuencia de los picos espectrales estacionarios aislados que están muy por encima del nivel de ruido con una resolución más fina (a veces, una resolución mucho más fina) que el espaciado del compartimento FFT mediante varios métodos de interpolación.
Los métodos comunes de interpolación de resultados de FFT para estimaciones de mayor resolución incluyen la interpolación parabólica, la interpolación de Sinc, rellenar con cero los datos en una FFT mucho más larga y los métodos de vocoder de fase utilizando ventanas superpuestas de compensación (ligeramente).
Una FFT es esencialmente un banco de filtros de paso de banda, cada uno con una transición muy empinada pero toneladas de ondulación de banda de detención para una longitud dada del núcleo del filtro FIR. Como tal, estos filtros no tienen un gran rechazo de ruido del ruido no periódico en la ventana. Si sospecha que este tipo de interferencia es un problema, una FFT con ventana o un banco de filtros personalizado puede funcionar mejor.
fuente
Después de más investigaciones invocadas por la pregunta de Jim Clay y la respuesta de las pichenettes en los comentarios, descubrí que mi Método2 se reinventa con la transformación Q limitada descrita, por ejemplo, por Kashima y Mont-Reynaud (no estoy seguro de poder vincular a este artículo, el archivo parece desgarrado ) .
Su enfoque es algorítmicamente más eficiente, ya que comienzan desde el rango de frecuencia más grande y reducen la muestra iterativamente en 2 hasta llegar a la octava más baja.
Brown, por ejemplo, también exploró los beneficios de las transformaciones Q aquí . Puede que no sea tan eficiente como una sola FFT, pero tiene la ventaja de no calcular la FFT gruesa en bandas de alta frecuencia que no lo requieren.
Gracias por todas las respuestas, comentarios y enlaces.
fuente
Si mantiene un "historial" de entradas y lo usa para superponer sus DFT, entonces le proporcionaría más información para extraer el contenido espectral. Por supuesto, eso depende de la naturaleza variable de su señal en el tiempo. Sería similar en forma a una función de distribución de probabilidad.
Esto le daría DFT que están más cerca en el tiempo. Sin embargo, aún aumentaría la incertidumbre temporal de cada DFT, que está limitado por las leyes de la naturaleza: el valor exacto del comportamiento temporal y espectral no puede determinarse simultáneamente.
Sin embargo, si el contenido de frecuencia no varía mucho dentro de la ventana, entonces debería estar bien.
fuente