Tracé de spectrogramme avec Matplotlib

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons apprendre à créer un graphique de spectrogramme à l'aide de Matplotlib. Un spectrogramme est une représentation visuelle du spectre des fréquences d'un signal en fonction du temps. Les spectrogrammes sont couramment utilisés pour analyser le contenu fréquentiel d'un signal au fil du temps, par exemple dans la reconnaissance vocale, l'analyse de la musique et le traitement du signal audio. Nous allons utiliser Python et Matplotlib pour créer un graphique de spectrogramme d'un signal.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous réglerons rapidement le problème pour vous.

Importation des bibliothèques

Nous allons commencer par importer les bibliothèques nécessaires : NumPy et Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Générer un signal

Ensuite, nous allons générer un signal à tracer. Dans cet exemple, nous allons créer un signal qui est la somme de deux ondes sinusoïdales de fréquences différentes, et de bruit aléatoire.

## Fixing random state for reproducibility
np.random.seed(19680801)

dt = 0.0005
t = np.arange(0.0, 20.0, dt)
s1 = np.sin(2 * np.pi * 100 * t)
s2 = 2 * np.sin(2 * np.pi * 400 * t)

## create a transient "chirp"
s2[t <= 10] = s2[12 <= t] = 0

## add some noise into the mix
nse = 0.01 * np.random.random(size=len(t))

x = s1 + s2 + nse  ## le signal

Générer le spectrogramme

Maintenant, nous allons générer un graphique de spectrogramme du signal. Nous allons utiliser la méthode specgram de la classe Axes de Matplotlib pour générer le spectrogramme. Cette méthode renvoie quatre objets : Pxx, freqs, bins et im. Pxx est le spectrogramme, freqs est le vecteur de fréquences, bins est le centre des intervalles temporels, et im est l'instance AxesImage représentant les données dans le graphique.

NFFT = 1024  ## la longueur des segments de fenêtrage
Fs = int(1.0 / dt)  ## la fréquence d'échantillonnage

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.plot(t, x)
Pxx, freqs, bins, im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900)

Personnaliser le graphique

Nous pouvons personnaliser le graphique en ajoutant des titres, des étiquettes d'axe et des cartes de couleurs.

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.set_title('Signal dans le domaine temporel')
ax1.set_xlabel('Temps (s)')
ax1.set_ylabel('Amplitude')
ax1.plot(t, x)

ax2.set_title('Spectrogramme')
ax2.set_xlabel('Temps (s)')
ax2.set_ylabel('Fréquence (Hz)')
im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900, cmap='viridis')
fig.colorbar(im[3], ax=ax2)

Afficher le graphique

Enfin, nous allons afficher le graphique.

plt.show()

Résumé

Dans ce laboratoire, nous avons appris à créer un graphique de spectrogramme à l'aide de Matplotlib. Nous avons généré un signal et utilisé la méthode specgram de la classe Axes de Matplotlib pour générer le graphique de spectrogramme. Nous avons également personnalisé le graphique en ajoutant des titres, des étiquettes d'axe et des cartes de couleurs. Les spectrogrammes sont utiles pour analyser le contenu fréquentiel d'un signal au fil du temps et sont couramment utilisés dans la reconnaissance vocale, l'analyse de la musique et le traitement du signal audio.