Deixe-me começar desde o início. A maneira padrão de calcular o cepstrum é a seguinte:
C( x ( t ) ) = F- 1[ log( F[ x ( t ) ] ) ]
No caso dos coeficientes da MFCC, o caso é um pouco diferente, mas ainda similar.
Após a pré-ênfase e a janelinha, você calcula a DFT do seu sinal e aplica o banco de filtros dos filtros triangulares sobrepostos, separados na escala mel (embora em alguns casos a escala linear seja melhor que mel):
Com relação à definição de cepstrum, você agora representava o envelope do espectro (espectro reduzido) na escala de frequência de mel. Se você representar isso, verá que é semelhante ao seu espectro de sinal original.
O próximo passo é calcular o logaritmo dos coeficientes obtidos acima. Isso se deve ao fato de o cepstro ser uma transformação homomórfica que separa o sinal da resposta ao impulso do trato vocal, etc. Como?
Um sinal de fala original s ( t ) geralmente é convoluído com uma resposta de impulso h ( t ) do trato vocal:
s^( t ) = s ( t ) ⋆ h ( t )
No domínio da frequência, a convolução é uma multiplicação de espectros:
S^( f) = S( f) ⋅ H( f)
registro( a ⋅ b ) = log( a ) + log( B )
Também esperamos que a resposta ao impulso não mude ao longo do tempo, portanto, ela pode ser facilmente removida subtraindo a média. Agora você vê por que estamos pegando os logaritmos das energias da nossa banda.
F- 1 . O problema é que temos apenas nossas energias logarítmicas, nenhuma informação de fase; portanto, depois de aplicarmos ifft
, obtemos coeficientes de valores complexos - não muito elegantes para que todo esse esforço seja uma representação compacta. Embora possamos usar a Transformada discreta de cosseno, que é a versão "simplificada" do FT e obter coeficientes com valor real! Esse procedimento pode ser visualizado como uma combinação de co-co-nóides com nossos coeficientes de log-energia. Você deve se lembrar que o ceptro também é chamado de "espectro do espectro"? Esse é o passo - estamos procurando por qualquer periodicidade em nossos coeficientes de envelope de energia de log.
Então agora você vê que agora é bastante difícil entender como era o espectro original. Além disso, geralmente tomamos apenas os 12 primeiros MFCCs, já os mais altos descrevem mudanças rápidas nas energias de log, o que geralmente está piorando a taxa de reconhecimento. Portanto, os motivos para fazer o DCT foram os seguintes:
Originalmente, você deve executar o IFFT, mas é mais fácil obter os coeficientes com valor real do DCT. Além disso, não temos mais espectro completo (todos os compartimentos de frequência), mas coeficientes de energia nos bancos de filtros de mel; portanto, o uso do IFFT é um pouco exagerado.
Você vê na primeira figura que os bancos de filtros estão sobrepostos, de modo que a energia de um ao lado do outro está sendo espalhada entre dois - o DCT permite correlacioná-los. Lembre-se de que essa é uma boa propriedade, por exemplo, no caso dos Modelos de Mistura Gaussiana, onde você pode usar matrizes de covariância diagonal (sem correlação entre outros coeficientes), em vez de completas (todos os coeficientes são correlacionados) - isso simplifica bastante as coisas.
Outra maneira de correlacionar os coeficientes de frequência de mel seria o PCA (Principal Component Analysis), técnica usada apenas para esse fim. Para nossa sorte, foi provado que o DCT é uma aproximação muito boa do PCA quando se trata de sinais decorrelantes, portanto, outra vantagem do uso da Transformação Discreta de Cosseno.
Alguma literatura:
Hyoung-Gook Kim, Nicolas Moreau, Thomas Sikora - Áudio MPEG-7 e além: indexação e recuperação de conteúdo de áudio