Aide au calcul / à la compréhension des MFCC: Coefficients Cepstrum Mel-Frequency


17

J'ai lu des morceaux en ligne, mais je ne peux pas tout rassembler. J'ai une connaissance de base des signaux / trucs DSP, ce qui devrait être suffisant pour cela. Je souhaite éventuellement coder cet algorithme en Java, mais je ne le comprends pas encore complètement, c'est pourquoi je suis ici (cela compte comme des mathématiques, non?).

Voici comment je pense que cela fonctionne avec les lacunes de mes connaissances.

  1. Commencez avec votre échantillon de discours audio, par exemple un fichier .wav, que vous pouvez lire dans un tableau. Appelez ce tableau , où varie de (donc échantillons). Les valeurs correspondent à l'intensité audio je suppose - amplitudes.n 0 , 1 , , N - 1 NX[n]n0,1,,N-1N

  2. Divisez le signal audio en "trames" distinctes de 10 ms environ où vous supposez que le signal vocal est "stationnaire". Il s'agit d'une forme de quantification. Donc, si votre taux d'échantillonnage est de 44,1 KHz, 10 ms est égal à 441 échantillons, ou valeurs de .X[n]

  3. Faites une transformée de Fourier (FFT pour le calcul). Maintenant, est-ce fait sur le signal entier ou sur chaque trame distincte de ? Je pense qu'il y a une différence parce qu'en général la transformée de Fourier regarde tous les éléments d'un signal, donc rejoint avec joint à où sont les plus petites images. Quoi qu'il en soit, disons que nous faisons de la FFT et que nous nous retrouvons avec pour le reste.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])Xje[n]X[k]

  4. Cartographie à l'échelle de Mel et journalisation. Je sais comment convertir des nombres de fréquence réguliers à l'échelle Mel. Pour chaque de ("l'axe des x" si vous me le permettez), vous pouvez faire la formule ici: http://en.wikipedia.org/wiki/Mel_scale . Mais qu'en est-il des "valeurs y" ou des amplitudes de ? Restent-ils simplement les mêmes valeurs mais décalés aux endroits appropriés sur le nouvel axe Mel (x-)? J'ai vu dans un article qu'il y avait quelque chose à propos de l'enregistrement des valeurs réelles de parce que si où l'un de ces signaux est présumé être du bruit, vous ne voulez pas , l'opération logarithmique sur cette équation transforme le bruit multiplicatif en bruit additif, qui, espérons-le, peut être filtré (?).kX[k]X[k]X[k]X[k]=UNE[k]B[k]

  5. La dernière étape consiste maintenant à prendre un DCT de votre modifié par le haut (mais il a fini par être modifié). Ensuite, vous prenez les amplitudes de ce résultat final et ce sont vos MFCC. J'ai lu quelque chose sur le rejet des valeurs hautes fréquences.X[k]

J'essaie donc vraiment de comprendre comment calculer ces gars étape par étape, et clairement certaines choses m'échappent d'en haut.

De plus, j'ai entendu parler de l'utilisation de "banques de filtres" (un tableau de filtres passe-bande essentiellement) et je ne sais pas si cela se réfère à la création des images à partir du signal d'origine, ou peut-être que vous créez les images après la FFT?

Enfin, il y a quelque chose que j'ai vu au sujet des MFCC ayant 13 coefficients?


1
C'est une excellente question, mais il y a beaucoup à répondre. Je recommanderais de diviser cela en 2-3 questions différentes (vous pouvez vous référer l'une à l'autre si vous voulez garder la continuité) afin d'y répondre plus facilement.
jonsca

Étant donné que vous avez déjà posé la même question sur math.SE (et que l'on vous a informé que dsp.SE est une meilleure solution), vous devriez peut-être supprimer la question sur math.SE.
Dilip Sarwate

J'ai supprimé la version sur math.SE
YoungMoney

Tutoriel très agréable et infotmatif thankssssssssssssss

1
Hey u a dit dans votre question que "Mappage à l'échelle de Mel et journalisation. Je sais comment convertir des nombres de fréquence réguliers à l'échelle de Mel.". pouvez-vous m'aider à calculer cette partie. Comme j'ai ma sortie FFt de x [k] = 1 * 184 mais mon filtre passe-bande triangulaire est réglé sur 20 * 3. alors comment puis-je multiplier les deux. Please ASAp
Ayush Agrawal

Réponses:


25

Pas à pas...

1. & 2 . C'est correct. Notez que les trames se chevauchent généralement, par exemple, la trame 0 correspond aux échantillons 0 à 440; la trame 1 correspond aux échantillons 220 à 660; l'image 2 est des échantillons 440 à 880 et ainsi de suite ... Notez également qu'une fonction de fenêtre est appliquée aux échantillons dans l'image.

3 . La transformée de Fourier est effectuée pour chaque trame. La motivation derrière cela est simple: un signal vocal varie dans le temps, mais est stationnaire sur de courts segments. Vous voulez analyser chaque segment court individuellement - car sur ces segments, le signal est suffisamment simple pour être décrit efficacement par quelques coefficients. Pensez à quelqu'un qui dit "bonjour". Vous ne voulez pas voir tous les phonèmes réduits en un seul spectre (la FFT réduit les informations temporelles) en analysant tout le son à la fois. Vous voulez voir "hhhhheeeeeeeeeeelloooooooooo" pour reconnaître le mot étape par étape, il doit donc être décomposé en segments courts.

NN=40

Une fois ces fréquences définies, nous calculons une somme pondérée des amplitudes (ou énergies) FFT autour de chacune de ces fréquences.

Regardez l'image suivante, représentant une banque de filtres avec 12 bacs:

Banque de filtres en fréquence Mel avec 12 canaux

Le 8ème casier a une fréquence centrale d'environ 2 kHz. L'énergie dans le 8e casier est obtenue en additionnant les énergies FFT pondérées dans les 1600 à 2800 Hz environ - avec un pic de poids à environ 2 kHz.

Note d'implémentation: Ce tas de sommes pondérées peut être fait en une seule opération - une multiplication matricielle d'une "matrice de banc de filtres" par le vecteur des énergies FFT.

Donc, à ce stade, nous avons "résumé" le spectre FFT en un ensemble de 40 (12 dans l'illustration) valeurs d'énergie, chacune correspondant à une plage de fréquences différente. Nous prenons le log de ces valeurs.

KK=13


Juste une question rapide sur le banc de filtres Mel - la plage de hauteur / amplitudes de 1,8 à 2 est-elle importante ou peut-elle être la hauteur de l'unité (1)?
YoungMoney

1
Ce ne est pas important. L'effet de l'utilisation d'un max. une amplitude à 1,0 vs 2,0 ne fera que déplacer l'énergie logarithmique d'une constante à l'étape 4., et n'aura donc un impact que sur le premier coefficient à l'étape 5 (qui est souvent rejeté de toute façon). Notez que certaines implémentations utilisent la normalisation de l'énergie de sorte que plus le filtre est large, plus son amplitude de crête est faible ( i.imgur.com/IOaLa.gif ). Cela peut entraîner des modifications mineures des performances des applications de reconnaissance. Si vous regardez les implémentations MFCC en cours d'utilisation, il y a en fait de nombreuses petites variations à chaque étape - bit.ly/ULatdL
pichenettes

C'est un vieux sujet ici, mais il y a quelque chose que je dois poser sur le graphique. Si le Nyquist est à 4 kHz, pourquoi ces filtres à bande limitée dépassent-ils le point à 4 kHz? est-ce OK pour MFCC. Normalement, vous ne voulez pas que le filtre passe le Nyquist? Ai-je raison?
Celdor

2
Avez-vous une référence à la raison pour laquelle N = 40 fréquences de banc de filtres mel (ou 26, une autre valeur courante que j'ai vue) sont utilisées?
James Owers

1
d'où vient l' 39 melétape 4?
Gert Kommer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.