La forma más eficiente de extraer componentes de frecuencia de la señal de audio con una precisión casi humana en tiempo real

14

Estoy tratando de averiguar cómo (si es posible) extraer los componentes de frecuencia de una muestra de audio arbitraria (típicamente música) de manera similar a FFT, pero en mi investigación sobre el algoritmo FFT, estoy aprendiendo que sufre algunos restricciones severas para este propósito.

Hay 3 problemas que presenta la FFT:

  1. Debido a que la resolución del contenedor FFT es equivalente al tamaño de su ventana, para lograr una precisión bastante razonable (digamos 1 Hz), necesita una ventana irrazonablemente larga (digamos 1 segundo). Esto significa que no puede detectar transitorios o frecuencias recién introducidas rápidamente. También significa que el problema no se puede resolver con una CPU más rápida y una frecuencia de muestreo más alta: la restricción está intrínsecamente ligada al tiempo.

  2. Los humanos perciben la frecuencia logarítmicamente, pero los contenedores FFT están espaciados linealmente. Por ejemplo, una diferencia de 20 Hz en el extremo inferior de nuestra audición es enorme , mientras que una diferencia de 20 Hz en el extremo superior es imperceptible. Entonces, para obtener la precisión que requerimos a bajas frecuencias, tenemos que calcular mucho más de lo que requerimos a altas frecuencias.

  3. Algunos de estos problemas pueden resolverse interpolando entre contenedores FFT. Esto puede funcionar para mucho audio musical, porque las frecuencias a menudo estarán separadas bastante y, por lo tanto, no se filtrará más de 1 frecuencia en un par de contenedores. Pero este no siempre será el caso, particularmente para sonidos inarmónicos como instrumentos de percusión. Entonces la interpolación es realmente solo una conjetura.

Por lo que entiendo del algoritmo DFT / FFT, las salidas (amplitudes de bin) son efectivamente la correlación del seno / coseno en la frecuencia de cada bin. Me sorprende que si el algoritmo pudiera rediseñarse de modo que las frecuencias del depósito se distribuyan de manera no lineal (es decir, correlacionamos un conjunto diferente de senos / cosenos), entonces podríamos lograr una resolución psicoacústicamente igual en todas las frecuencias. ¿Es esto posible, o es un sueño imposible basado en mi comprensión incompleta de las matemáticas involucradas?

Supongo que también podría resolver el problema con la fuerza bruta, correlacionando senos / cosenos en cada frecuencia que me interese. No estoy demasiado al tanto de las matemáticas aquí. es posible? ¿Qué tipo de eficiencia? ¿Resolvería mi problema?

¿Existe una forma diferente de lograr una descomposición de frecuencia más precisa y en tiempo real de una señal? La eficiencia de la CPU es una preocupación, pero no la principal. Estoy parcialmente interesado en saber si en teoría se puede hacer. Sin embargo, algo que sea factible en tiempo real en una máquina de escritorio moderna sería ideal.

Bryhoyt
fuente
3
¿Qué problema estás tratando de resolver? detección f0, detección múltiple f0 (para transcripción), reconocimiento de acordes, modelado de timbre ...? Existen soluciones ad-hoc para algunos de estos problemas. ¿Le importa la invertibilidad (para ser utilizada en un marco de análisis-> transformación-> resíntesis)?
pichenettes
El problema que estoy tratando de resolver es, sin duda, bastante abierto. Tengo un interés general en la música digital, cubriendo la mayor parte de su lista. Pero mi imprecisión se debe en parte a la falta de conocimiento de lo que se puede hacer y cuáles son los estándares de la industria específica o mejores formas de resolver cada problema que mencionas (hasta que me hice esta pregunta, yo siempre había asumido FFT fue que ). Pero el elemento de su lista que más me interesa es el modelado de timbres. También me gustaría encontrar formas de extraer timbres complejos que suenen simultáneamente en una grabación. La resíntesis es emocionante. Los algoritmos de IA son de interés.
bryhoyt
Un problema más específico que he intentado resolver en el pasado y me gustaría volver a intentar en algún momento: me gustaría escribir un programa para "improvisar" en tiempo real con un grupo de jugadores o cantantes grabados con un micrófono. Llegué a tener mi computadora "silbando" un seno conmigo, notablemente retrasado y desafinado. Sería vital para que tal improvisación se sintonice con precisión y al compás. Claro, hay otras maneras de lograr esto (los jugadores tocan instrumentos digitales o le dan a la computadora "información interna" como una progresión de acordes preestablecida, etc.) pero este no es mi objetivo.
bryhoyt
"El algoritmo podría ser rediseñado para que las frecuencias del depósito estén espaciadas de manera no lineal, entonces podríamos lograr una resolución psicoacústicamente igual en todas las frecuencias". Suena como una transformación continua de wavelet de Morlet
endolito el

Respuestas:

5

Como comenté en una publicación anterior, el método de análisis de frecuencia de tiempo conocido como "transformada de Fourier a corto plazo" es equivalente a un banco de filtros, analizando su señal x . Para una ventana de análisis dada w n , de tamaño N , el filtro a la frecuencia k / N es: XxwnNk/N

hnorte=w-nortemij2πnorteknorte

Para las ventanas de análisis habituales (Hann, Hamming o incluso un rectángulo), esto corresponde a un filtro de paso bajo, con una frecuencia de corte de alrededor de , que se "desplaza" al bin de frecuencia (gracias a la compleja modulación exponencial) , por lo tanto, conduce a un filtro de paso de banda.k1/ /nortek

En este punto, para responder directamente a su preocupación por reflejar la percepción humana, algunas personas derivaron la ["transformación Q constante" (CQT)] [Brown91]. Se basa en el mismo principio que el FT, en su interpretación del banco de filtros. Sin embargo, los centros no están linealmente espaciados como para un FT "normal", sino que están separados por log2. La escala está entonces estrechamente relacionada con una escala musical occidental: si uno elige , entonces obtenemos 12 frecuencias por octava (¿suena una campana? :-)), y el ancho de banda se establece en, por ejemplo,f k + 1 = 2 1 / 12 f kFkFk+1=21/ /12Fk. También puede elegir otros centros, según sus necesidades.21/ /12-12Fk

Puede encontrar implementaciones del CQT aquí y allá, una reciente del Prof. Klapuri, que viene con un inverso bastante decente aquí . El grupo Audio de Telecom ParisTech también tiene una implementación del Prof. Prado, pero aún no lo he probado.

[Brown91] J. Brown, "Cálculo de una transformación espectral Q constante", Journal of the Acoustical Society of America, 1991, 89, 425-434

EDITAR 20121014: algunas respuestas y comentarios a sus preguntas (de bryhoyt).

  1. Solo ideas generales sobre sus propios comentarios a la pregunta principal: Parece que le interesan muchas aplicaciones que, para mí, no son problemas triviales para abordar. El "modelado de timbre" me parece más relacionado con el reconocimiento de voz o similares, para los cuales la resolución o precisión de tono o frecuencia no es un gran problema (considere cómo se calculan los MFCC).

    Considere también cuántos investigadores importantes ( F. Pachet y el equipo de repmus en IRCAM, Francia , por citar algunos) están trabajando en el tema de la improvisación automática y el acompañamiento: la tarea no es imposible, pero requiere experiencia en muchas áreas. Para resumir, un sistema típico necesita imitar el sistema auditivo humano (al menos), implementar la percepción de sonido / música / tono / ritmo, conocer la teoría de la música y tomar decisiones basadas en las estimaciones de todos los pasos anteriores. La transformación de Fourier, o cualquier representación de señal, es solo un paso (pequeño) hacia el objetivo final, y potencialmente, en mi opinión, el mejor entendido hasta ahora.

    Dicho esto, todavía existe la posibilidad de que todos estén mirando mucho más allá de lo que realmente sucede, ¡y que usted pueda acabar con una solución simple y elegante! ¡No olvides publicarlo una vez que esté listo! :-)

  2. una muestra de 0.1s a 44kHz es suficiente para contener un amplio rango de frecuencias

    Fs/ /norte=44100/ /4410=10Hz

  3. La FFT no puede detectar esto para frecuencias bajas y altas, pero usted dice que otros algoritmos pueden: ¿cuál es la compensación?

    Respuesta corta: ¡lee mi tesis sobre estimación de melodías!

    Para elaborar un poco más: muchos algoritmos de estimación de tono van más allá de las limitaciones del FT, gracias a los supuestos sobre los sonidos a procesar. Esperamos que las notas de los sonidos naturales (voz humana, oboe, saxo, piano ...) sean más complejas que las sinusoides individuales. La mayoría de los sonidos agudos son más o menos armónicos, lo que significa que pueden modelarse como sumas de sinusoides cuya frecuencia es un múltiplo de la frecuencia fundamental.

    Por lo tanto, es útil tener en cuenta estos armónicos al estimar el tono, ya que existen métodos que utilizan funciones de detección como sumas espectrales, productos espectrales o funciones de autocorrelación. Alguien comenzó un tema relacionado recientemente.

  4. ¿Cuáles son las compensaciones? Más específicamente, ¿qué nivel de precisión de frecuencia puedo esperar para una ventana razonablemente corta? (Entiendo que el tamaño de la ventana en CQT es variable, ¿cuánto?) Incluso más específicamente, ¿qué tan cerca podré llegar a mi aprox. objetivo de 0.5% de diferencia de frecuencia con una ventana de 0.005s?

    Como se dijo anteriormente, con una ventana de 0.005s, puede esperar algo así como 200Hz de "fuga de frecuencia". Eso es realmente un problema solo cuando tienes 2 sinusoides con frecuencias que están más cerca de 200Hz, de modo que el FT no podrá mostrar que son 2 sinusoides diferentes. Bueno, estamos lejos de su 0.5% (por cierto, ¡un semitono está al 6% de la frecuencia!) Y 0.005s es realmente un poco pequeño para su propósito. Sin embargo, si desea proporcionar una estimación cada 0.005s, aún puede procesar fotogramas superpuestos más largos, como generalmente se hace en el procesamiento de voz / música. ¿Es eso lo que realmente quieres?

    nortek=FsFk(21/ /si-1)
    sisi=48Fk=100Hzrequieren ventanas de aproximadamente 0.7s de largo. No es nada decir que luego perdemos un poco de la resolución temporal ... Pero como se mencionó anteriormente, este es un problema solo si olvidamos la estructura del sonido. Además, la psicoacústica considera que por debajo de 500Hz, los humanos realmente no distinguen tan bien las sinusoides: incluso los humanos son desafiados allí. Por supuesto, podemos esperar que nuestras computadoras funcionen mejor que nosotros, pero aquí, ¡enfrentamos un problema difícil!

    Por último, tenga en cuenta que existen otras formas de calcular una representación en tiempo y frecuencia de un sonido, considere, por ejemplo, los bancos de filtros gammatone. La ventaja de la CQT que mencioné anteriormente es que hay software tanto para la transformación como para su inversión. Personalmente, todavía me quedo con el STFT, sin embargo, por su simplicidad y porque, hasta ahora, nunca necesité una mejor resolución en bajas frecuencias, incluso para la separación de la fuente.

    [Schoerkhuber2010] Schoerkhuber, C. y Klapuri, A., "Caja de herramientas de transformación Constant-Q para procesamiento de música", 7ma Conferencia de computación de sonido y música, Barcelona, ​​España, 2010.

Jean-louis Durrieu
fuente
Un pequeño comentario: el CQT podría ayudar a resolver los puntos 1 y 2 de sus inquietudes, pero no el punto 3. En cuanto al punto 3, siempre hay una compensación entre el tiempo y la resolución de frecuencia, y si desea una buena resolución de frecuencia en baja componentes de frecuencia, es muy probable que necesite aceptar para perder resolución de tiempo. Ahora, para la estimación de tono, puede haber otras soluciones, puede leer la mía en mi tesis doctoral si está interesado: D
Jean-louis Durrieu
No entiendo del todo. Sé que no obtienes nada gratis: no puedo esperar que un algoritmo detecte con precisión las frecuencias que no se han muestreado a una buena resolución durante al menos un par de períodos de la frecuencia más baja. Pero una muestra de 0.1s a 44kHz es suficiente para contener un amplio rango de frecuencias, que un humano puede distinguir con precisión (en términos relativos: "aquí hay un quinto", "hay un cuarto disminuido plano", etc.), lo que demuestra la información está ahí en alguna parte. La FFT no puede detectar esto para frecuencias bajas y altas, pero usted dice que otros algoritmos pueden: ¿cuál es la compensación?
bryhoyt
De todas las excelentes respuestas anteriores, el CQT parece el más exacto para la pregunta que estaba haciendo. ¿Cuáles son las compensaciones? Más específicamente, ¿qué nivel de precisión de frecuencia puedo esperar para una ventana razonablemente corta? (Entiendo que el tamaño de la ventana en CQT es variable, ¿cuánto?) Incluso más específicamente, ¿qué tan cerca podré llegar a mi aprox. objetivo de 0.5% de diferencia de frecuencia con una ventana de 0.005s? (Esa es mi estimación aproximada de cuándo un humano podría comenzar a escuchar que algo está fuera de tono o fuera de ritmo)
bryhoyt
5

Primero, con el enfoque clásico de la transformación de Fourier a corto plazo, existen alternativas a la interpolación, en particular técnicas que utilizan la información de fase para recuperar la frecuencia instantánea ( vea esta pregunta ) que puede proporcionarle con mucha precisión la posición de un pico espectral sin un aumento del tamaño de FFT. El inconveniente, como dijiste correctamente, es que no estás aumentando la capacidad del sistema para discriminar picos adyacentes, pero esto ya es una gran mejora en comparación con el uso de la frecuencia central del índice FFT bin.

srFFT_ _syozmi

Existe otro enfoque de fuerza bruta que funciona: "sondear" sus señales con exponenciales complejas en ventanas (wavelets de Gabor). Estos se caracterizan por una frecuencia central, un tiempo central y un ancho de banda (que mide cómo se distribuye la wavelet en el tiempo o en la frecuencia). Tendrá que evaluar muchas, muchas, muchas correlaciones entre su señal y estas wavelets en la cantidad de desplazamientos, frecuencias y anchos de banda que desee. El resultado será el mismo que un STFT "en mosaico" muy flexible en el que se selecciona un tamaño de ventana óptimo para cada rango de tiempo y cada banda de frecuencia. Además del costo computacional, la desventaja es que no hay un algoritmo eficiente ni un algoritmo causal (necesitará conocer tantas muestras de antemano como la wavelet más larga en su diccionario). Si quieres experimentar con estas técnicas,MPTK .

k

  • k
  • Funcionan bien en presencia de ruido blanco; esto requiere que la señal se blanquee antes del análisis; También es útil realizar el análisis en canales individuales de un banco de filtros.

Estos son computacionalmente caros, pero pueden funcionar en línea, con ventanas cortas si los pedidos de modelos y / o el ruido son bajos.

pichenettes
fuente
4

Frecuencia o tono? Ya hay toneladas de trabajos de investigación y libros sobre la percepción del tono humano. Pero, IIRC, los humanos tienden a ser malos para "extraer" frecuencias con precisión a menos que sean un tono fundamental. Y los picos de frecuencia múltiples dentro de una "banda crítica" tienden a ser percibidos como ruido. Por lo tanto, cualquier método con "precisión casi humana" también puede incluir algunas fallas de estimación perceptiva humana.

Un FFT es solo un banco de filtros que no son óptimos para muchos propósitos, a menos que la ortogonalidad y la invertibilidad sean requisitos. Son posibles otros bancos de filtros si no los necesita (y la percepción humana claramente no), como un banco de filtros de frecuencia MEL. Una vez que se identifica un pico de frecuencia mediante un banco de filtros de frecuencia MEL, un análisis adicional por interpolación FFT o técnicas de codificador de fase puede ser útil para refinar una estimación de frecuencia de cualquier pico de frecuencia espectral aislado.

Tenga en cuenta que ninguna de estas técnicas de filtrado utilizadas en el mismo lapso de datos en el dominio del tiempo recopila más información, en comparación con una FFT. Lo que está sucediendo en realidad podría ser la pérdida de información para que coincida mejor con la "inexactitud" o anomalías del sistema auditivo humano.

Y la estimación de tono de un conjunto de frecuencias es un problema completamente diferente, nuevamente un tema con muchos trabajos de investigación y capítulos en libros sobre audiología y demás.

La última parte de su pregunta sobre el rendimiento puede ser una pista falsa. Hoy en día, se pueden hacer docenas de FFT y docenas de diferentes bancos de filtros en un procesador de teléfono celular. Dadas las bibliotecas FFT muy eficientes disponibles de los proveedores de CPU, una FFT con miles de contenedores de "exceso" puede ser más eficiente que un banco de filtros significativamente más pequeño pero más ingenuo.

hotpaw2
fuente
Respuesta muy informativa, gracias. Soy consciente de la diferencia entre tono y frecuencia, pero su respuesta realmente ayudó a resaltar cuánto depende la precisión humana del sonido que cumpla con ciertos requisitos. Según mi conocimiento de la armonía, parece que los humanos son bastante malos para extraer frecuencias que no son un tono fundamental. Puedo distinguir con precisión los intervalos dentro de la sintonía entre sí y de los intervalos fuera de sintonía (intervalos de consonantes más fácilmente que disonantes). Pero tendría problemas para distinguir dos intervalos desafinados (que no sean "plano", "muy plano", "agudo", etc.).
bryhoyt
2

Hay muchas alternativas, pero depende de lo que esté haciendo. Físicamente, diría que nuestros oídos se parecen más a un banco de filtros paralelos que a un FFT, lo que les da una buena resolución de tiempo, y un proceso llamado "enfoque" les da una buena resolución de frecuencia. Entonces, en algunos casos, teóricamente podrías usar un banco de filtros, pero esto requiere mucho procesamiento y te deja con una gran cantidad de datos para procesar.

Es posible ver wavelets como un conjunto de filtros particularmente eficientes y relacionados. El problema con las wavelets para el análisis musical y de audio es que generalmente solo te dan una resolución de 1 octava (aunque puedes hacer varias cosas al respecto, realmente no he visto que las wavelets sean particularmente útiles en audio).

Otro enfoque es utilizar ventanas FFT superpuestas. Puede aumentar la resolución de frecuencia de la FFT mirando no solo la información de magnitud, sino también la información de fase. Esto le permite usar ventanas mucho más cortas de lo que podría usar, lo que resulta en un mejor rendimiento y una mejor resolución de tiempo. Las ventanas superpuestas son difíciles de volver a sintetizar correctamente, y hacer demasiados supuestos sobre la fase también puede ser peligroso. Sea como fuere, este tipo de trucos son probablemente el elemento básico para resolver problemas complejos de análisis de frecuencia de tiempo.

También hay otras herramientas para aplicaciones específicas.

Bjorn Roche
fuente
1
XnorteXkmetrownorte
XFmetro=norteXnorte+metrownortemi-j2πnorteknorte
norteXnortemetro
XFmetro=pagXpagwpag-metromi-j2π(pag-metro)knorte=pagXpaghmetro-pag
hnorte=w-nortemij2πnorteknorte
1
Un STFT puede ser un banco de filtros, pero no todos los bancos de filtros son STFT.
Bjorn Roche