Module Mel Frequency Cepstrum Coefficients (MFCC)

PACT

matfontaine.github.io/PACT-MFCC

Mathieu FONTAINE
mathieu.fontaine@telecom-paris.fr

2022-2023
Inspiré des slides de Gaël Richard

Attentes du module

  • Comprendre les MFCC
  • Implémentation à la main des MFCC avec la librairie Python
  • Application au projet PACT (pourquoi ce module est adapté etc.)
  • Résultats avec la méthode implémentée + comparaison avec version de librosa

Livrable

  • Code de votre groupe en Python avec quelques résultats.

Plan

I - Transformée de Fourier usuels

II - Echelles perceptive audiofréquence

III - Mel frequency cepstral coefficients

I - Transformée de Fourier usuels

La transformée de Fourier discrète

Soit un signal discret $x_0,\dots,x_{N-1}$. Sa transformée de Fourier (discrète) est:
$$ X(f) = \sum_{n=0}^{N-1}x_ne^{-i\frac{2\pi f n}{N}} $$
  • On obtient une représentation fréquentielle du signal
  • Complexité algorithmique : $O(N^2)$

Il existe une version édulcorée qui réduit la complexité $O(N^2)$ en $O(N\log(N))\\$ (cf. Cooley-Tukey FFT algorithm)
Figure : champ d'une Baleine. On remarque l'activité dans les basses fréquences.

On emploiera la FFT dans la suite.

Transformée en cosinus discrète (DCT)

  • Ne prend en compte que le cosinus de l'exponentielle complexe
  • Utile en image (information plus complète sur les basses fréquences)
$$ X(f) = \sum_{n=0}^{N-1}x_n\cos[\frac{\pi}{N}(n+\frac{1}{2})f] \qquad\qquad\qquad \texttt{(DCT-II)} $$

Transformée de Fourier à Court Terme (TFCT)

  • Découpage d'un signal en plusieurs séquences
  • multiplication par un fenêtrage (Pourquoi ? cf. poly OASIS)
  • FFT sur chacune des séquences
TFCT d'un signal de parole (selon Laroche)
On obtient un signal "temps-fréquence" $X(f,t)$

Spectrogramme de puissance

  • Module au carré des coefficients
  • $$ S(f,t) = |X(f,t)|^2 \qquad\qquad\qquad \texttt{(Spectrogramme de Puissance)} $$
  • Pour une meilleure représentation, on calcule le log du SP.
Figure : Log-Spectrogramme d'un signal de parole.

II - Echelle perceptive audiofréquence

Motivation

  • Prendre une échelle adaptée à la perception de l'oreille humaine

Echelle de Bark

  • Basée sur les bandes critiques telles qu'elles sont perçues par l'oreille
  • Proche de l'échelle log
Figure: Echelle de Bark.

Echelle de Mel, Filtrage en échelle de Mel

  • Approximation de la sensation psychologique de hauteur d'un son (Tonie)
  • $$ \text{mel}(f) = 1000\log_{2}(1+\frac{f}{1000}) \qquad\qquad \texttt{(relation mel-fréquence)} $$
Figure: Filtre de mel.

Naturellement, on utilisera cette échelle pour parler des MFCC.

III - Mel Frequency Cepestral coefficient

Motivations

  • Bandes de Mel : représentation perceptuelle de l'oreille humaine
  • Coefficients souhaité : faire ressortir des informations clés d'un signal audio (fréquence fondamentale, résonnance etc.)
Le deuxième point est addressé par les coefficients cepstraux

Représentation Cepstrale motivée par le signal de parole

Modélisation d'un modèle source filtre de la parole
$s(t) = g(t) \ast h(t)$
avec $\ast$ la convolution, $g$ le signal glottique et $h$ le filtre représentant le conduit vocal.
  • La FFT transforme la convolution en produit.
  • On applique alors le module pour obtenir le spectre
  • On calcule le spectre et on fait la FFT inverse pour revenir dans le domaine temporelle
  • Les coefficients obtenues sont les cepstres.
  • $c(\tau) := FFT^{-1}\log|S(f)| = FFT^{-1}\log|G(f)| + FFT^{-1}\log|H(f)| $
Plus généralement, si on fait la transformée discrète d'un signal que l'on note $X(0), \dots, X(N-1)$ ses coefficients on obtient les coefficients spectraux :
$$c_n = \frac{1}{N}\sum_{f=0}^{F-1}\log|X(f)|e^{\frac{2i\pi f n}{N}}$$

Exemple sur la prononciation du mot "razor"

  • basses fréquences $\rightarrow$ conduit vocal
  • haute-fréquence $\rightarrow$ signal glottique
  • "pick-picking" : approximation de la fondamentale de chaque phonème
Furui2001 : spectre de TFCT à gauche, ceptre à droite $c(\tau)$ où $\tau$ est la Quéfrence

Paramétrisation en "Mel-Frequency Cepstral Coefficients" (1/4)

Algo qu'on décompose ici en trois étapes :
Procédé calcul en MFCC

Paramétrisation en "Mel-Frequency Cepstral Coefficients" (2/4)

Algo qu'on décompose ici en trois étapes :
  • TFCT avec une fenêtre à déterminer (regardez dans la littérature)
Procédé calcul en MFCC

Paramétrisation en "Mel-Frequency Cepstral Coefficients" (3/4)

Algo qu'on décompose ici en trois étapes :
  • TFCT avec une fenêtre à déterminer
  • Filtrage par un banc de filtre MEL + DCT-II inverse pour chaque trame temporelle
  • $$ \tilde{c}_n = \sum_{f=1}^{F}(\log \tilde{S}_f)\cos[n(f-0.5)\frac{\pi}{F}] $$
Procédé calcul en MFCC

Paramétrisation en "Mel-Frequency Cepstral Coefficients" (4/4)

Algo qu'on décompose ici en trois étapes :
  • TFCT avec une fenêtre à déterminer
  • Filtrage par un banc de filtre MEL + DCT-II inverse pour chaque trame temporelle
  • $$ \tilde{c}_n = \sum_{f=1}^{F}(\log \tilde{S}_f)\cos[n(f-0.5)\frac{\pi}{F}] $$
  • Si sélection classique de 13 coefficients de MEL, on prend également la dérivée première et seconde
Procédé calcul en MFCC
En pratique, on ne prend pas $c_0$ qui est proportionnel à l'énergie du signal.
Les paramètres sont à choisir en explorant la littérature (ici par exemple)