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.
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 N
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 .
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 ]
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 (?).
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.
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?