Comment effectuer le traitement du signal à l'aide de SciPy.
Voici un tutoriel étape par étape sur la façon d'effectuer le traitement du signal à l'aide de SciPy.
Étape 1 : Importation des bibliothèques requises
Pour commencer, vous devez importer les bibliothèques nécessaires. Dans ce cas, nous utiliserons scipy.signal pour les opérations de traitement du signal et numpy pour la manipulation des tableaux.
import numpy as np
from scipy import signal
Étape 2 : Création d'un signal
Ensuite, créons un signal simple avec lequel travailler. Pour ce tutoriel, nous allons générer un signal sinusoïdal.
# Définition des paramètres du signal
fréquence = 10 # Fréquence du signal en Hz
amplitude = 1 # Amplitude du signal
taux_échantillonnage = 100 # Nombre d'échantillons par seconde
durée = 1 # Durée du signal en secondes
# Générer l'axe des temps
t = np.linspace(0, durée, int(taux_échantillonnage * durée), endpoint=False)
# Générer le signal sinusoïdal
signal_data = amplitude * np.sin(2 * np.pi * fréquence * t)
Étape 3 : Tracé du signal
Avant de commencer le traitement du signal, visualisons-le à l'aide de matplotlib.
import matplotlib.pyplot as plt
plt.plot(t, signal_data)
plt.xlabel('Temps (s)')
plt.ylabel('Amplitude')
plt.title('Signal')
plt.show()
Étape 4 : Application d'un filtre
Maintenant, appliquons un filtre passe-bas au signal à l'aide de la bibliothèque scipy.signal. Nous utiliserons un filtre Butterworth à titre d'exemple.
# Définition des paramètres du filtre
fréquence_de_coupure = 5 # Fréquence de coupure en Hz
ordre_du_filtre = 4 # Ordre du filtre
# Créer le filtre Butterworth
b, a = signal.butter(ordre_du_filtre, fréquence_de_coupure / (taux_échantillonnage / 2), 'low')
# Appliquer le filtre au signal
signal_filtré = signal.lfilter(b, a, signal_data)
Étape 5 : Tracé du signal filtré
Traçons maintenant le signal filtré pour visualiser l'effet du filtre passe-bas.
plt.plot(t, signal_data, label='Signal Original')
plt.plot(t, signal_filtré, label='Signal Filtré')
plt.xlabel('Temps (s)')
plt.ylabel('Amplitude')
plt.title('Signal avec un filtre passe-bas')
plt.legend()
plt.show()
Étape 6 : Réalisation de la transformée de Fourier
Pour analyser le contenu fréquentiel du signal, nous pouvons effectuer une transformée de Fourier à l'aide du module scipy.fft.
# Effectuer la transformée de Fourier
spectre_du_signal = np.fft.fft(signal_data)
# Générer l'axe des fréquences
fréquences = np.fft.fftfreq(len(signal_data), 1 / taux_échantillonnage)
# Tracer le spectre
plt.plot(fréquences, np.abs(spectre_du_signal))
plt.xlabel('Fréquence (Hz)')
plt.ylabel('Magnitude')
plt.title('Spectre du signal')
plt.show()
Étape 7 : Réalisation d'un spectrogramme
Enfin, générons un spectrogramme du signal à l'aide du module scipy.signal.
# Définition des paramètres du spectrogramme
taille_de_la_fenêtre = 256
recouvrement = int(taille_de_la_fenêtre * 0.75)
# Calculer le spectrogramme
fréquences, temps, spectrogramme = signal.spectrogram(signal_data, fs=taux_échantillonnage, window='hann',
nperseg=taille_de_la_fenêtre, noverlap=recouvrement)
# Tracer le spectrogramme
plt.pcolormesh(temps, fréquences, 10 * np.log10(spectrogramme), shading='auto')
plt.colorbar(label='Densité Spectrale de Puissance (dB/Hz)')
plt.xlabel('Temps (s)')
plt.ylabel('Fréquence (Hz)')
plt.title('Spectrogramme')
plt.show()
C'est tout ! Vous avez réussi à effectuer le traitement du signal à l'aide de SciPy. N'hésitez pas à explorer davantage les fonctions et techniques fournies par la bibliothèque SciPy pour vos besoins spécifiques de traitement du signal.