Extração de recursos do MFCC

7

Eu tenho um bloco de áudio e realizei uma FFT nele. Agora, o que eu quero fazer é converter essa FFT em um conjunto de MFCCs, no entanto, embora eu saiba que preciso fazer algo com a ponderação das amostras de FFT com base em um conjunto de filtros triangulares, eu realmente não tenho idéia do que isso envolve.

Alguém pode entrar em alguns bons detalhes sobre isso? Se você vai me dar um exemplo do matlab, explique cada etapa bem, pois o matlab permite que você corte alguns cantos e estou tentando implementar a extração MFCC no iPhone.

Goz
fonte

Respostas:

11

Há muita literatura sobre MFCCs na Web; portanto, seria um pouco mais fácil se você pudesse ser mais específico sobre qual parte do processamento não entende. Mas darei uma visão geral do que precisa ser feito, esperando que isso seja útil para você:

  1. calcular as magnitudes ao quadrado das caixas da FFT
  2. pesar as caixas usando janelas triangulares; geralmente as janelas são escolhidas de modo que os centros dos triângulos sejam equidistantes em uma escala de frequência de mel e de modo que cada triângulo comece e termine no centro dos dois triângulos adjacentes. A escala de frequência de mel é definida por
    m=2595log10(1+f/700)
    Onde fé a frequência em Hz. Veja a figura para ver como funciona: insira a descrição da imagem aqui Observe que os núcleos são normalizados de forma que a soma dos pesos por triângulo seja igual a 1. Geralmente, são utilizadas cerca de 20 janelas triangulares.
  3. Tome o logaritmo dos coeficientes ponderados.
  4. Calcule o DCT.
Matt L.
fonte
Felicidades Matt, eu li tudo isso, mas onde eu caio é "pesar os caixotes usando janelas triangulares" Eu não tenho idéia exatamente o que isso significa. Devo pegar um conjunto de caixas e, em seguida, ponderar cada compartimento dependente dessa "janela" triangular e depois adicioná-los todos juntos e chamar isso de "compartimento"? (Este é o melhor palpite). Se sim, como faço para calcular a janela triangular? A equação da frequência de mel que você postou ... Não entendo como várias frequências podem se relacionar com um "bin" de mel por meio disso ... Qualquer informação adicional sobre essa etapa específica seria muito apreciada! :)
Goz
Você está certo quanto às janelas: calcula somas ponderadas de suas caixas de FFT. Os pesos são os valores individuais das funções triangulares. A escala de mel é apenas para centralizar os triângulos. Escolha, por exemplo, 20 pontos equidistantes na escala de mel e volte a Hertz através da fórmula para obter as frequências centrais em Hz. Obviamente, você precisa arredondar o resultado para corresponder os valores aos compartimentos FFT válidos.
Matt L.
Cheers a parte central das caixas faz sentido. Mas como peso triangularmente (má escolha da palavra, mas é ótimo tentar dizer;)) as janelas? ou seja, qual deve ser a largura? Também porque triangular e não algum outro tipo de janela? Gaussiano, talvez?
Goz
Como outro aparte (e potencialmente deve ser feito em outras perguntas), por que você calcula os MFCCs (ignorando a ponderação) de maneira tão diferente de um ceptro? ou seja, por que o DCT e FFT não inverso?
Goz 10/10
Bem, você não pesa as janelas, mas as caixas da FFT. Exemplo simples: triângulo com valores 1,2,1; portanto, sua saída ponderada para esse triângulo seria 1 * (primeira bandeja FFT) + 2 * (segunda bandeja FFT) + 3 * (terceira bandeja FFT). Por que triangular é uma boa pergunta, essa é apenas a maneira padrão de fazê-lo. Tente outros, se quiser, mas duvido que você obtenha resultados consideravelmente melhores.
Matt L.