Ajudar a calcular / entender os MFCCs: Coeficientes de Cepstrum de Frequência Mel


17

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.

  1. 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 Nx[n]n0 0,1,...,N-1N

  2. 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 .x[n]

  3. 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 ]x[n]F(x[n])F(x1[n])F(x2[n])...F(xN[n])xEu[n]X[k]

  4. 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 (?).kX[k]X[k]X[k]X[k]=UMA[k]B[k]

  5. 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.X[k]

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?


1
Esta é uma ótima pergunta, mas há muito aqui para responder. Eu recomendaria dividir isso em 2 a 3 perguntas diferentes (você pode fazer referência a uma da outra se quiser manter a continuidade) para que possa ser respondida com mais facilidade.
procurando

Como você já fez a mesma pergunta no math.SE (e foi informado que o dsp.SE é um lar melhor para ele), talvez você deva excluir a pergunta no math.SE.
precisa saber é o seguinte

Eu apaguei a versão no math.SE
YoungMoney 14/01

Tutorial muito agradável e informativo thankssssssssssssss

1
Ei, você disse em sua pergunta que "Mapeando para a escala Mel e registrando. Eu sei como converter números regulares de frequência na escala Mel". você pode me ajudar a calcular esta parte? Como eu tenho minha saída FFt de x [k] = 1 * 184, mas meu filtro de passagem de banda triangular é do conjunto 20 * 3. então como posso multiplicar os dois. Por favor ASAp
Ayush Agrawal

Respostas:


25

Passo a passo...

1. e 2 . Isto está certo. Observe que os quadros geralmente se sobrepõem, por exemplo, o quadro 0 é uma amostra de 0 a 440; o quadro 1 é amostras 220 a 660; o quadro 2 é das amostras 440 a 880 e assim por diante ... Observe também que uma função de janela é aplicada às amostras no quadro.

3 . A transformação de Fourier é feita para cada quadro. A motivação por trás disso é simples: um sinal de fala varia ao longo do tempo, mas é estacionário em segmentos curtos. Você deseja analisar cada segmento curto individualmente - porque nesses segmentos o sinal é simples o suficiente para ser descrito com eficiência por poucos coeficientes. Pense em alguém dizendo "olá". Você não deseja ver todos os fonemas recolhidos em um único espectro (a FFT coleta informações temporais) analisando todo o som de uma só vez. Você quer ver "hhhhheeeeeeeeeeelloooooooooo" para reconhecer a palavra estágio por estágio, de modo que ela deve ser dividida em segmentos curtos.

4 . "Mapear para a escala Mel" é enganoso e é provavelmente por isso que você está ficando confuso. Uma descrição melhor para esta etapa seria: "Calcule a energia do sinal através de um banco de filtros sintonizados para frequências em escala de mel". Aqui está como isso é feito. Consideramos as frequências (um valor comumente usado é N = 40 ) igualmente espaçadas de acordo com a escala de mel, entre 20 Hz (parte inferior da faixa auditiva) e a frequência de Nyquist. Exemplo prático: o sinal é amostrado em 8kHz e queremos 40 caixas. Como 4kHz (Nyquist) é 2250 mel, as frequências centrais do banco de filtros serão: 0 mel, 2250/39 mel, 2 x 2250/39 mel .. 2250 mel.NN=40.

Uma vez definidas essas frequências, calculamos uma soma ponderada das magnitudes (ou energias) da FFT em torno de cada uma dessas frequências.

Veja a figura a seguir, representando um banco de filtros com 12 posições:

Banco de filtros de frequência Mel com 12 canais

O 8º compartimento tem uma frequência central de cerca de 2kHz. A energia no 8º compartimento é obtida somando-se as energias ponderadas da FFT entre 1600 e 2800 Hz aproximadamente - com o peso atingindo um pico em torno de 2kHz.

Nota de implementação: Esse monte de somas ponderadas pode ser feito em uma única operação - uma multiplicação da matriz de uma "matriz do banco de filtros" pelo vetor de energias da FFT.

Portanto, nesta fase, "resumimos" o espectro da FFT em um conjunto de 40 (12 na ilustração) valores de energia, cada um correspondendo a uma faixa diferente de frequências. Tomamos o log desses valores.

KK=13


Apenas uma pergunta rápida sobre o banco de filtros Mel - a altura / amplitude varia de 1,8 a 2 é importante ou pode ser a unidade (1) de altura?
YoungMoney 14/01

1
Isso não é importante. O efeito de usar um lance máx. a amplitude em 1,0 vs 2,0 mudará a energia logarítmica apenas uma constante na etapa 4. e, portanto, afetará apenas o primeiro coeficiente na etapa 5 (que geralmente é descartada de qualquer maneira). Observe que algumas implementações estão usando a normalização de energia, de modo que quanto maior o filtro, menor a sua amplitude de pico ( i.imgur.com/IOaLa.gif ). Isso pode causar pequenas alterações de desempenho nos aplicativos de reconhecimento. Se você observar as implementações do MFCC em uso, existem muitas pequenas variações em cada etapa - bit.ly/ULatdL
pichenettes

É um tópico antigo aqui, mas há algo que preciso perguntar sobre o gráfico. Se o Nyquist é de 4kHz, por que esses filtros de banda limitada excedem o ponto de 4kHz? tudo bem para o MFCC. Normalmente, você não quer que o filtro passe no Nyquist? Estou certo?
Celdor 26/02

2
Você tem uma referência de por que N = 40 frequências do banco de filtros de mel (ou 26, outro valor comum que eu já vi) são usadas?
James Owers

1
de onde vem a 39 meletapa 4?
Gert Kommer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.