Estou tentando comparar duas amostras de fala e classificá-las em semelhanças. Pense em alguém tentando repetir uma frase e depois compare esses 2 arquivos de áudio.
Comecei implementando o algoritmo MFCC (http://en.wikipedia.org/wiki/Mel-frequency_cepstrum). Calculo os MFCCs de ambas as amostras de áudio, o que me dá aproximadamente 500 quadros de áudio (a 10ms cada, com 30% de sobreposição do anterior) com 14 ou mais coeficientes de MFCC. Portanto, uma matriz de 500 x 14 para cada sinal de áudio.
Então, faço a abordagem ingênua de simplesmente diferenciar as matrizes. Isso não dá resultados muito promissores. Na metade do tempo, quando comparo amostras de áudio completamente diferentes (onde frases diferentes são faladas), recebo menos diferença do que comparar o áudio em que tento repetir a mesma frase! Isso está claramente ao contrário e não pode me dar um bom algoritmo de pontuação.
Como posso melhorar isso? Eu pensei que os MFCCs eram uma parte realmente importante do processamento de fala, embora claramente eu precise fazer mais com ele.
Respostas:
Primeiro, você terá que corrigir as diferenças de tempo. Por exemplo, se uma expressão é "--heeelloooo ---" e a outra "hellooooooo ----" (- representando silêncio), uma comparação direta por pares de quadros MFCC mostrará diferenças simplesmente porque as duas amostras não estão alinhadas. Você pode usar o Dynamic Time Warping para encontrar o melhor alinhamento entre as duas seqüências de vetores de recursos - e calcular a distância correspondente.
Uma última coisa que me vem à mente é que você deve descartar o primeiro coeficiente do MFCC (que expressa aproximadamente a intensidade do sinal) para melhorar a capacidade do seu sistema para corresponder a enunciados pronunciados em um nível diferente de volume / gravação.
fonte