Module Descripteurs audio "chromas"

PACT

matfontaine.github.io/PACT-CHROMA

Mathieu FONTAINE
mathieu.fontaine@telecom-paris.fr

2022-2023

Attentes du module

  • Comprendre les chromas
  • Implémentation à la main des chromas 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 librosa

Livrable

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

Plan

I - Transformée de Fourier usuels

II - Chromas

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 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 - Chromas

Motivation

  • La musique occidentale "classique" est bien tempérée
  • Elle est notamment représentée par $12$ demi-tons
  • Une telle échelle permettrait alors la reconnaissance d'accord

Procédé de base (selon FUJISHIMA91)

  • On applique une TFCT et on obtient des $X(f,t)$
  • On ne converse que les $N/2$ premières fréquences
  • On calcule un Pitch Class Profile (PCP)
  • $$ \forall p \in \llbracket 0, 11 \rrbracket, \text{PCP}(p,t) = \sum_{f \text{ tel que } M(f)=p} |X(f,t)|^2 $$
    $$ \forall f \in \llbracket 0, \frac{N}{2} \rrbracket, M(f) = \begin{cases} -1 & \text{si f=0} \\ \text{round}(12\log_{2}(\frac{ \frac{f_{ech} f}{N}}{f_{ref}}))& \text{mod 12} \end{cases} $$
    • $f_{ref}$ est la fréquence de référence représentant la première note du chroma ($C_3 \approx 261.63$ Hz)
    • $f_{ech} \frac{f}{N}$ est la fréquence (en Hz) d'un $X(f,t), \forall t$

    Comment améliorer la représentation pour être adaptée à l'échelle musicale ?

Transformée à $Q$ constant [selon Brown91] (1/2)

  • Idée: avoir un espacement des bandes fréquentielles adaptées à l'échelle musicale
  • Contrainte : résolution dépendant de la fréquence
  • On souhaite un banc de filtre en $1/24^{ème}$ d'octave (un quart de ton)
  • La $m^{ème}$ composante spectrale est définie par $f_m = (2^{1/24})^mf_{min}$, $f_{min}$ inférieure à la fréquence de départ
  • Soit $\Delta_{f}$ la largeur de bande (ou résolution spectrale)
  • Pour une fréquence $f$, on a $\Delta_{f} = (2^{1/24} - 1)f \approx 0.029 f$
  • Si on veut un ratio constant entre la fréquence et la résolution on a $Q = f/\Delta_f \approx 34$

Transformée à $Q$ constant [selon Brown91] (2/2)

  • Avec une fréquence d'échantillonnage $f_{ech}$, on a la longueur de fenetre suivante :
  • $$ N(m) = f_{ech}/\Delta_{f_m} = f_{ech}/f_mQ $$
  • La TFCT est alors changé par (où $t$ est un partitionnement; $w$ une fenêtre voir Brown91 pour les exemples):
  • $$X_{Q}(f,t) = \sum_{n=0}^{N(m)-1} w(k,n)x_{t}(n)e^{-i\frac{2\pi Qn}{N(m)}} $$
[Brown91]: Log-Spectrogramme d'un violon.
[Brown91]: Transformée à Q constant d'un violon.