Représentation temps-fréquence#

Le signal sonore correspond à la gamme musicale jouée au piano. Sur le signal sonore, les notes sont bien visibles, mais elles sont difficilement identifiables.

../_images/9f08bc30ae5d1bc65bdcb2cb9447542fad05ea1e836c60b71adfd84733530f6e.png

On peut écouter ce son (fe est la fréquence d’échantillonnage)…

from IPython.display import Audio
Audio(x, rate=fe)

Le spectre ne permet pas d’identifier les notes jouées car elles sont toutes mélangées puisque l’axe temporel est perdu :

../_images/b866bb3f5088abc9c8a1ed6618713700e87aa95c42f7293e819f29413a4d4131.png

D’où l’intérêt de la représentation temps-fréquence, ici avec le spectrogramme (et les arguments par défaut).

fig = plt.figure(figsize=(12,10))
plt.specgram(x, Fs=fe)
plt.colorbar()
plt.xlabel("$t$ (s)")
plt.ylabel("$f$ (Hz)")
plt.show()
../_images/20e7b02853e2de515c3b0e76725f5fc997a32fae19ec749f8e5a040780279c4b.png

On le voit, la partie intéressante du spectrogramme (celle qui porte l’information), est située sous 5000 Hz. Dans la suite, on n’affichera que cette zone.

../_images/00a107c50e5dfb828ff5bad9f43f1dfd45b2723f366adab3e6650ac077643d47.png

Mais cet affichage n’est pas très lisible : la résolution est grossière, surtout en fréquence. On peut jouer sur les paramètres NFFT et noverlap.

  • NFFT est le nombre d’échantillons utilisés pour calculer la TFD (256 par défaut)

  • noverlap est le nombre d’échantillons en commun entre deux TFD successives (128 par défaut).

../_images/7d1472f27f057582ebd757f48a8b094a77006239db75ef4ae6cceadd83bc6ddd.png

On constate que lorsque NFFT augmente, la résolution temporelle diminue (l’affichage est moins précis selon l’axe des temps). Cela s’explique par le fait que la fenêtre glissante est de plus en plus grande, entraînant moins de décalages possibles et donc moins de transformée de Fourier calculées. En même temps, la résolution fréquentielle augmente puisque la taille des transformée de Fourier est identique à la taille des fenêtres (NFFT). C’est le principe d’incertitude de Gabor-Heisenberg : NFFT doit être fixé en faisant un compromis entre les résolutions temporelle et fréquentielle.

Dans la suite, on choisit NFFT = 4096 et noverlap = 2048. Pour mettre en évidence les harmoniques les plus énergétiques, on modifie l’échelle des couleurs en réglant vmin qui correspond à la valeur en dessous de laquelle toutes les amplitudes sont représentées de la même couleur.

../_images/c54da946c0ac8c29e0db7241326f066244c7707e99fa07918fa0bb1832967020.png

On trouve donc les fréquences fondamentales de la musique (et donc les notes associées) en adaptant le zoom :

../_images/85af69eaddfc6a5f42e59502402a8193e1656d55756813ea43947f60a55e43fb.png ../_images/e699aee365d7e1b8ab26a65a2549120f6f63432121fc06f887f0a8754c33d39b.png