Extracción de funciones MFCC


7

Tengo un bloque de audio y he realizado un FFT en él. Ahora, lo que quiero hacer es convertir este FFT en un conjunto de MFCC, sin embargo, aunque sé que necesito hacer algo para ponderar las muestras de FFT en función de un conjunto de filtros triangulares, realmente no tengo ni idea de lo que esto implica.

¿Alguien puede entrar en buenos detalles? Si me va a dar un ejemplo de matlab, explique bien cada paso, ya que matlab le permite cortar bastantes esquinas e intento implementar la extracción de MFCC en iPhone.

Respuestas:


11

Hay mucha literatura sobre MFCC en la web, por lo que sería un poco más fácil si pudiera ser más específico en cuanto a qué parte del procesamiento no comprende. Pero daré una descripción general de lo que hay que hacer, esperando que esto sea útil para usted:

  1. calcular las magnitudes al cuadrado de los contenedores FFT
  2. pesar los contenedores usando ventanas triangulares; por lo general, las ventanas se eligen de manera que los centros de los triángulos sean equidistantes en una escala de frecuencia de mel, y de manera que cada triángulo comience y termine en los centros de los dos triángulos adyacentes. La escala de frecuencia de mel está definida por
    m=2595log10(1+f/700)
    dónde fes la frecuencia en Hz. Mire la figura para ver cómo funciona: ingrese la descripción de la imagen aquí Tenga en cuenta que los núcleos están normalizados de tal manera que la suma de los pesos por triángulo es igual a 1. Por lo general, se usan alrededor de 20 de esas ventanas triangulares.
  3. Tome el logaritmo de los coeficientes ponderados.
  4. Calcule el DCT.

Saludos Matt, he leído todo esto, pero donde me caigo es "pesar los contenedores con ventanas triangulares" No tengo ni idea de lo que esto significa. ¿Debo tomar un conjunto de contenedores y luego ponderar cada contenedor dependiendo de esta "ventana" triangular y luego agregarlos todos juntos y llamarlo un "contenedor"? (Esta es mi mejor suposición). Si es así, ¿cómo calculo la ventana triangular? La ecuación de frecuencia de mel que publicó ... No entiendo cómo las frecuencias múltiples pueden relacionarse con un "bin" de mel a través de eso ... ¡Cualquier información adicional sobre este paso específico sería muy apreciada! :)
Goz

Tiene razón sobre las ventanas: calcula sumas ponderadas de sus contenedores FFT. Los pesos son los valores individuales de las funciones triangulares. La escala mel es solo para centrar los triángulos. Elija, por ejemplo, 20 puntos equidistantes en la escala de mel y transforme de nuevo a Hertz mediante la fórmula para obtener las frecuencias centrales en Hz. Por supuesto, debe redondear el resultado para que los valores coincidan con los contenedores FFT válidos.
Matt L.

Saludos, la parte de centrar los contenedores tiene sentido. Pero, ¿cómo peso triangularmente (mala elección de la palabra pero es genial tratar de decirlo)) las ventanas? es decir, ¿qué tan anchos deberían ser? Además, ¿por qué triangular y no algún otro tipo de ventana? Gaussiano tal vez?
Goz

Como otro lado (y potencialmente debería preguntarse en otras preguntas), ¿por qué calculan los MFCC (ignorando la ponderación) de manera tan diferente a un cepstrum? es decir, ¿por qué DCT y no FFT inversa?
Goz

Bueno, no pesas las ventanas sino los contenedores FFT. Ejemplo simple: triángulo con valores 1,2,1, por lo que su salida ponderada para este triángulo sería 1 * (primer bin FFT) + 2 * (segundo bin FFT) + 3 * (tercer bin FFT). Por qué triangular es una buena pregunta, esa es solo la forma estándar de hacerlo. Pruebe otros si lo desea, pero dudo que obtenga resultados considerablemente mejores.
Matt L.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.