Génération et visualisation de signaux sinusoïdaux avec Python

Beginner

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

Introduction

Ce laboratoire vous guidera dans la génération et la visualisation d'un signal sinusoïdal avec du bruit additionnel à l'aide de la bibliothèque Matplotlib de Python. Plus précisément, nous allons créer différentes représentations du spectre du signal à l'aide de la transformée de Fourier rapide (FFT).

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 au carnet Jupyter pour pratiquer.

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

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ésoudrons rapidement le problème pour vous.

Importez les bibliothèques nécessaires

Tout d'abord, nous devons importer les bibliothèques nécessaires. Nous allons utiliser NumPy et Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Configurez les variables

Ensuite, nous allons configurer les variables pour notre signal. Nous utiliserons un intervalle d'échantillonnage de 0,01, ce qui nous donne une fréquence d'échantillonnage de 100 Hz. Nous allons créer un tableau de temps allant de 0 à 10 secondes avec un pas de 0,01 seconde. Nous allons également générer du bruit à l'aide de la fonction randn de NumPy et le convoluer avec une fonction de décroissance exponentielle pour créer un signal bruité.

np.random.seed(0)

dt = 0.01  ## intervalle d'échantillonnage
Fs = 1 / dt  ## fréquence d'échantillonnage
t = np.arange(0, 10, dt)

## générer du bruit :
nse = np.random.randn(len(t))
r = np.exp(-t / 0.05)
cnse = np.convolve(nse, r) * dt
cnse = cnse[:len(t)]

s = 0.1 * np.sin(4 * np.pi * t) + cnse  ## le signal

Créez des graphiques

Maintenant, nous allons créer les graphiques pour nos différentes représentations du spectre. Nous utiliserons la fonction subplots de Matplotlib pour créer une grille de 3x2 de graphiques. Nous traçons le signal temporel dans le premier graphique et les différents types de spectre dans les graphiques restants.

fig, axs = plt.subplots(nrows=3, ncols=2, figsize=(7, 7))

## tracez le signal temporel :
axs[0, 0].set_title("Signal")
axs[0, 0].plot(t, s, color='C0')
axs[0, 0].set_xlabel("Temps")
axs[0, 0].set_ylabel("Amplitude")

## tracez différents types de spectre :
axs[1, 0].set_title("Spectre d'amplitude")
axs[1, 0].magnitude_spectrum(s, Fs=Fs, color='C1')

axs[1, 1].set_title("Spectre d'amplitude logarithmique")
axs[1, 1].magnitude_spectrum(s, Fs=Fs, scale='dB', color='C1')

axs[2, 0].set_title("Spectre de phase ")
axs[2, 0].phase_spectrum(s, Fs=Fs, color='C2')

axs[2, 1].set_title("Spectre d'angle")
axs[2, 1].angle_spectrum(s, Fs=Fs, color='C2')

axs[0, 1].remove()  ## ne pas afficher l'axe vide

fig.tight_layout()
plt.show()

Interprétez les graphiques

On peut voir que le premier graphique montre le signal dans le domaine temporel. Le second graphique montre le spectre d'amplitude du signal, qui nous indique l'intensité des différents composants de fréquence dans le signal. Le troisième graphique montre le spectre d'amplitude logarithmique, qui est utile pour visualiser l'ensemble du spectre lorsqu'il y a des valeurs très grandes et très petites. Le quatrième graphique montre le spectre de phase, qui nous indique le déphasage de chaque composant de fréquence dans le signal. Enfin, le cinquième graphique montre le spectre d'angle, qui est similaire au spectre de phase mais utilise des radians au lieu de degrés.

Sommaire

Dans ce laboratoire, nous avons généré un signal sinusoïdal avec du bruit additionnel et créé différentes représentations du spectre du signal à l'aide de la bibliothèque Matplotlib de Python. Nous avons appris à interpréter les différents types de spectre et à quel point ils peuvent être utiles dans l'analyse de signaux.