Transformada logarítmica de Fourier (LFT) en señal de audio

9

Estoy tratando de analizar las músicas de la manera más precisa posible. Por supuesto que probé FFT, pero tuve algunos problemas.

Encontré que las frecuencias bajas tienen una resolución muy baja que la del oído humano. Intenté mucho tiempo con FFT para resolver este problema, pero incluso analizando con 8192 muestras / s en una frecuencia de muestreo de 44100Hz (Significa falta de resolución de tiempo), no obtuve suficiente resolución en bajas frecuencias.

Encontré que hay pocas soluciones.

En primer lugar, una interpolación cuadrática en contenedores FFT.
Pero parece que no es una manera perfecta. Los problemas de este método son:

1. 'Si quiero determinar las frecuencias entre los contenedores de frecuencias, ¿qué tres contenedores debo seleccionar para hacer una interpolación?'
2. 'Incluso si hago esto, no hay información adicional real sobre el resultado. Sé que las interpolaciones son un tipo de método complicado.

En segundo lugar, extrayendo los contenedores de frecuencia con la frecuencia deseada, para poder extraer los contenedores logarítmicamente.
Pero tenga un problema crítico de costo computacional: (tal vez más) N ^ 2.

En tercer lugar, LFT (Transformación logarítmica de Fourier).
Esto requiere muestras espaciadas logarítmicamente y me da el resultado exactamente lo que estaba buscando con una velocidad increíblemente rápida; /programming/1120422/is-there-an-fft-that-uses-a-logarithmic-division-of-frequency

Pero no tengo idea con ese algoritmo. Traté de entender el documento e implementarlo, pero fue imposible debido a la falta de mi inglés y mis habilidades matemáticas.

Entonces, necesito una ayuda de implementación de LFT.

Laie
fuente

Respuestas:

8

La solución más simple y pragmática es utilizar una FFT normal de un tamaño suficientemente grande para obtener la resolución requerida con la frecuencia de interés más baja. Por ejemplo, si desea una resolución de 1 Hz con la frecuencia de interés más baja, necesitará una ventana de FFT de 1 segundo, es decir, el tamaño de FFT debería ser igual a la frecuencia de muestreo, por ejemplo, 44100.

Tenga en cuenta que incluso si pudiera implementar una FFT logarítmica, entonces estaría sujeta a las leyes de la física (teoría de la información) y aún necesitaría una ventana de muestra de longitud similar; todo lo que obtendría sería conveniencia (no tener que agregar contenedores de salida ) a expensas del rendimiento.

Paul R
fuente
Es raro. Sé que teóricamente no hay más datos. Si utilizo un FFT de gran tamaño, es cierto que no puede analizar la aparición de instrumentos musicales muy rápido. Y también es cierto que no puedo obtener una resolución más alta en baja frecuencia. Pero, ¿qué hay del sistema auditivo humano? ¿Cómo ese sistema está obteniendo una resolución más alta tanto en tiempo como en frecuencias?
3
¿Quizás debería considerar un enfoque jerárquico, en el que diezma cada octava sucesiva por un factor de 2, para que pueda usar ventanas de tiempo corto a frecuencias más altas y ventanas de tiempo más largo a frecuencias más bajas? Esto sería algo análogo a un banco de filtros auditivos, donde el ancho de banda aumenta con la frecuencia.
Paul R
Gran enfoque ¿Goertzel de larga duración en bajas frecuencias, goertzel de corta duración en altas frecuencias? Tiene sentido. Pero requerirá un gran costo computacional.
Probablemente sea más eficiente que hacer una gran FFT, a pesar de que es más complejo. Por ejemplo, para una jerarquía de 4 octavas, es posible que desee 4 x 2048 puntos FFT y 3 filtros de paso bajo para x2 muestreo descendente. La resolución de la FFT más baja será tan buena como una sola FFT de 16384 puntos a la frecuencia de muestreo completa, pero dado que FFT es O (n log n), el costo computacional total será mucho menor.
Paul R
aha, FFT 2048, muestra abajo x2, FFT 2048, muestra abajo x2 ... que tengo resolución de tiempo y frecuencia, con costos mucho menores que 16384 FFT. Excelente. Y justo ahora tengo la otra solución: en la muestra 16384, goertzel cada vez por 32. Entonces, con la acumulación, puedo extraer frecuencias bajas y altas con menores costos. Muchas gracias. :)
0

Si el análisis que desea realizar requiere la frecuencia de las señales en cada contenedor, puede usar la Transformada de Fourier de tiempo corto para lograrlo.

Cada contenedor de la FFT produce un número complejo que representa el componente real e imaginario, o después de un poco de fase y magnitud de manipulación.

Como frecuencia = dPhi / dt, (Phi == fase), al tomar contenedores correspondientes de pares de espectros STFT consecutivos, puede calcular la frecuencia.

DSP Dimension tiene un buen artículo sobre el proceso.

Marko
fuente
Parece que estoy contemplando un problema más complejo. Puedo usar FFT, pero en el análisis de señal de audio, sin embargo, no es adecuado.
3
Mire la versión "Q constante" de la Transformada de Fourier de corto tiempo. Esta disposición del STFT proporciona una resolución de frecuencia que se ajusta logarítmicamente para acomodar los requisitos para diferentes rangos de frecuencia.
user2718
Le echaré un vistazo. Pensé que era solo una simple operación de transformación de banco de filtros aplicada al resultado fft.
Laie