Eu tenho lido partes e peças on-line, mas não consigo juntar tudo. Eu tenho algum conhecimento de fundo de sinais / material DSP que deve ser pré-requisitos suficientes para isso. Estou interessado em eventualmente codificar esse algoritmo em Java, mas ainda não o entendo completamente, e é por isso que estou aqui (conta como matemática, certo?).
Eis como acho que funciona junto com as lacunas no meu conhecimento.
Comece com sua amostra de fala em áudio, digamos um arquivo .wav, que você possa ler em uma matriz. Chame essa matriz , onde varia de (portanto, amostras). Os valores correspondem à intensidade do áudio, eu acho - amplitudes.n 0 , 1 , … , N - 1 N
Divida o sinal de áudio em "quadros" distintos de 10 ms ou mais, onde você assume que o sinal de fala é "estacionário". Esta é uma forma de quantização. Portanto, se a sua taxa de amostragem for 44,1KHz, 10ms será igual a 441 amostras ou valores de .
Faça uma transformação de Fourier (FFT por causa da computação). Agora isso é feito em todo o sinal ou em cada quadro separado de ? Eu acho que há uma diferença porque, em geral, a transformação de Fourier analisa todos os elementos de um sinal, então juntou a juntou-se a onde são os quadros menores. De qualquer forma, digamos que fazemos algumas FFT e terminemos com pelo resto disso.F ( x [ n ] ) ≠ F ( x 1 [ n ] ) F ( x 2 [ n ] ) … F ( x N [ n ] ) x i [ n ] X [ k ]
Mapeamento para a escala Mel e registro. Eu sei como converter números de frequência regulares para a escala Mel. Para cada de (o "eixo x" se você me permitir), você pode fazer a fórmula aqui: http://en.wikipedia.org/wiki/Mel_scale . Mas e os "valores y" ou as amplitudes de ? Eles apenas permanecem com os mesmos valores, mas mudam para os pontos apropriados no novo eixo Mel (x-)? Vi em algum artigo que havia algo sobre registrar os valores reais de porque, se que um desses sinais é considerado ruído, você não deseja , a operação de log nessa equação transforma o ruído multiplicativo em ruído aditivo, que pode ser filtrado (?).
Agora, o passo final é obter um DCT do seu modificado de cima (no entanto, acabou sendo modificado). Então você toma as amplitudes deste resultado final e essas são suas MFCCs. Eu li algo sobre jogar fora valores de alta frequência.
Então, eu estou tentando entender como calcular esses caras passo a passo, e claramente algumas coisas estão me iludindo de cima.
Além disso, eu ouvi falar sobre o uso de "bancos de filtros" (basicamente, um conjunto de filtros de passagem de banda) e não sei se isso se refere à criação de quadros a partir do sinal original, ou talvez você faça os quadros após a FFT?
Por fim, há algo que eu vi sobre os MFCCs com 13 coeficientes?