Ayuda para calcular / comprender los MFCC: Coeficientes de Cepstrum de frecuencia de mel


17

He estado leyendo fragmentos en línea, pero simplemente no puedo juntarlo todo. Tengo algunos conocimientos previos de señales / DSP que deberían ser requisitos previos suficientes para esto. Estoy interesado en eventualmente codificar este algoritmo en Java, pero aún no lo entiendo completamente, por eso estoy aquí (cuenta como matemática, ¿verdad?).

Así es como creo que funciona junto con las lagunas en mi conocimiento.

  1. Comience con su muestra de voz de audio, digamos un archivo .wav, que puede leer en una matriz. Llame a esta matriz , donde varía de (entonces muestras). Supongo que los valores corresponden a la intensidad de audio: amplitudes.n 0 , 1 , , N - 1 NX[norte]norte0 0,1,...,norte-1norte

  2. Divida la señal de audio en distintos "cuadros" de 10 ms aproximadamente, donde suponga que la señal de voz es "estacionaria". Esta es una forma de cuantización. Entonces, si su frecuencia de muestreo es 44.1KHz, 10 ms es igual a 441 muestras, o valores de .X[norte]

  3. Haz una transformación de Fourier (FFT por el bien de la computación). Ahora, ¿se hace esto en toda la señal o en cada cuadro separado de ? Creo que hay una diferencia porque, en general, la transformada de Fourier analiza todos los elementos de una señal, por lo que unió a unido con donde son los cuadros más pequeños. De todos modos, digamos que hacemos algo de FFT y terminamos con por el resto de esto.F ( x [ n ] ) F ( x 1 [ n ] ) F ( x 2 [ n ] ) F ( x N [ n ] ) x i [ n ] X [ k ]X[norte]F(X[norte])F(X1[norte])F(X2[norte])...F(Xnorte[norte])Xyo[norte]X[k]

  4. Mapeo a la escala Mel, y registro. Sé cómo convertir números de frecuencia regulares a la escala Mel. Para cada de (el "eje x" si me lo permite), puede hacer la fórmula aquí: http://en.wikipedia.org/wiki/Mel_scale . Pero, ¿qué hay de los "valores y" o las amplitudes de ? ¿Siguen siendo los mismos valores pero cambiaron a los puntos apropiados en el nuevo eje Mel (x-)? Vi en algún artículo que había algo acerca de registrar los valores reales de porque si donde se supone que una de esas señales es ruido, no desea , la operación de registro en esta ecuación convierte el ruido multiplicativo en ruido aditivo, que con suerte se puede filtrar (?).kX[k]X[k]X[k]X[k]=UN[k]si[k]

  5. Ahora el paso final es tomar un DCT de su modificado desde arriba (sin embargo, terminó siendo modificado). Luego tomas las amplitudes de este resultado final y esos son tus MFCC. Leí algo sobre tirar valores de alta frecuencia.X[k]

Así que estoy tratando de resolver cómo calcular a estos tipos paso a paso, y claramente algunas cosas me están eludiendo desde arriba.

Además, escuché sobre el uso de "bancos de filtros" (una serie de filtros de paso de banda básicamente) y no sé si esto se refiere a hacer los cuadros a partir de la señal original, o tal vez haces los cuadros después de la FFT.

Por último, ¿hay algo que vi sobre los MFCC que tienen 13 coeficientes?


1
Esta es una gran pregunta, pero hay mucho aquí para responder. Recomendaría dividir esto en 2-3 preguntas diferentes (puede hacer referencia a una de la otra si desea mantener la continuidad) para que pueda responderse más fácilmente.
jonsca

Como ya ha formulado la misma pregunta sobre math.SE (y se le ha informado que dsp.SE es un mejor lugar para hacerlo), tal vez debería eliminar la pregunta sobre math.SE.
Dilip Sarwate

Eliminé la versión en matemáticas
SE

Tutorial muy agradable e informativo thankssssssssssssss

1
Oye, dijiste en tu pregunta que "Mapeo a la escala Mel y registro. Sé cómo convertir números de frecuencia regulares a la escala Mel". ¿Me pueden ayudar a calcular esta parte? Como tengo mi salida FFt de x [k] = 1 * 184 pero mi filtro de paso de banda triangular es del conjunto 20 * 3. entonces, ¿cómo puedo multiplicarlos? Por favor, ASAp
Ayush Agrawal

Respuestas:


25

Paso a paso...

1. y 2 . Esto es correcto. Tenga en cuenta que los marcos generalmente se superponen, por ejemplo, el marco 0 son muestras de 0 a 440; el cuadro 1 son muestras 220 a 660; el marco 2 son muestras 440 a 880 y así sucesivamente ... Observe también que se aplica una función de ventana a las muestras en el marco.

3 . La transformación de Fourier se realiza para cada cuadro. La motivación detrás de esto es simple: una señal de voz varía con el tiempo, pero es estacionaria en segmentos cortos. Desea analizar cada segmento corto individualmente, porque en estos segmentos la señal es lo suficientemente simple como para ser descrita eficientemente por unos pocos coeficientes. Piensa en alguien que dice "hola". No desea ver todos los fonemas contraídos en un solo espectro (FFT contrae la información temporal) analizando todo el sonido a la vez. Desea ver "hhhhheeeeeeeeeeelloooooooooo" para reconocer la palabra etapa por etapa, por lo que debe dividirse en segmentos cortos.

4 . "Mapear a la escala Mel" es engañoso y probablemente es por eso que te estás confundiendo. Una mejor descripción para este paso sería: "Calcule la energía de la señal a través de un banco de filtros sintonizados a frecuencias de escala de mel". Así es como se hace esto. Consideramos frecuencias (un valor usado comúnmente es ) igualmente espaciadas de acuerdo con la escala de mel, entre 20 Hz (parte inferior del rango de audición) y la frecuencia de Nyquist. Ejemplo práctico: la señal se muestrea a 8kHz y queremos 40 bins. Como 4kHz (Nyquist) es 2250 mel, las frecuencias centrales del banco de filtros serán: 0 mel, 2250/39 mel, 2 x 2250/39 mel .. 2250 mel.nortenorte=40

Una vez que se han definido estas frecuencias, calculamos una suma ponderada de las magnitudes FFT (o energías) alrededor de cada una de estas frecuencias.

Mire la siguiente imagen, que representa un banco de filtros con 12 contenedores:

Banco de filtros de frecuencia Mel con 12 canales

El octavo bin tiene una frecuencia central de alrededor de 2 kHz. La energía en el octavo contenedor se obtiene sumando energías FFT ponderadas en el 1600 a 2800 Hz aproximadamente, con un pico de peso de alrededor de 2kHz.

Nota de implementación: este conjunto de sumas ponderadas se puede hacer en una sola operación: una multiplicación matricial de una "matriz de banco de filtros" por el vector de energías FFT.

Entonces, en esta etapa, hemos "resumido" el espectro FFT en un conjunto de 40 (12 en la ilustración) valores de energía, cada uno correspondiente a un rango diferente de frecuencias. Tomamos el registro de estos valores.

5 . El siguiente paso consiste en tomar el DCT de esta secuencia de 40 log-energías. Esto producirá 40 valores. Los primeros coeficientes son el MFCC (por lo general, ). En realidad, el primer coeficiente DCT es la suma de todas las energías logarítmicas calculadas en el paso anterior, por lo que es una medida general del volumen de la señal y no es muy informativo sobre el contenido espectral real de la señal; a menudo se descarta para aplicaciones de reconocimiento de voz o identificación de altavoces donde el sistema tiene que ser robusto a las variaciones de volumen.KK=13


Solo una pregunta rápida sobre el banco de filtros Mel: la altura / amplitud varía de 1.8 a 2, ¿es esto importante o pueden ser unidades (1) de altura?
YoungMoney

1
Esto no es importante. El efecto de usar un máx. la amplitud en 1.0 vs 2.0 solo cambiará la energía logarítmica por una constante en el paso 4., y por lo tanto solo afectará el primer coeficiente en el paso 5 (que a menudo se descarta de todos modos). Tenga en cuenta que algunas implementaciones están utilizando la normalización de energía, de modo que cuanto más ancho es el filtro, menor es su amplitud máxima ( i.imgur.com/IOaLa.gif ). Esto puede causar cambios menores en el rendimiento de las aplicaciones de reconocimiento. Si observa las implementaciones de MFCC en uso, en realidad hay muchas pequeñas variaciones en cada paso - bit.ly/ULatdL
pichenettes

Es un tema antiguo aquí, pero hay algo que debería preguntar sobre el gráfico. Si el Nyquist es de 4 kHz, ¿por qué esos filtros de banda limitada exceden el punto de 4 kHz? ¿Está bien para MFCC? Normalmente, ¿no quieres que el filtro pase el Nyquist? Estoy en lo cierto?
Celdor

2
¿Tiene una referencia de por qué se usan N = 40 frecuencias de banco de filtros mel (o 26, otro valor común que he visto)?
James Owers

1
¿De dónde 39 melviene el paso 4?
Gert Kommer
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.