Calculer la Densité Spectrale Croisée en Python

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

En traitement du signal, la Densité Spectrale Croisée (Cross Spectral Density - CSD) est une mesure de la corrélation entre deux signaux dans le domaine fréquentiel. Elle est utilisée pour déterminer dans quelle mesure deux signaux sont liés les uns aux autres en termes de contenu fréquentiel. Dans ce laboratoire (LabEx), vous apprendrez à calculer la CSD de deux signaux à l'aide de la bibliothèque Matplotlib de Python.

Conseils pour la Machine Virtuelle (VM)

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

Parfois, vous devrez peut-être attendre quelques secondes que Jupyter Notebook ait terminé 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 lors de votre apprentissage, n'hésitez pas à demander de l'aide à Labby. Fournissez vos commentaires après la session, et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques nécessaires

Nous devons importer les bibliothèques suivantes : numpy et matplotlib.pyplot.

import matplotlib.pyplot as plt
import numpy as np

Génération de signaux

Nous devons générer deux signaux. Ces signaux contiennent une partie cohérente et une partie aléatoire. La partie cohérente des deux signaux a une fréquence de 10 Hz. La partie aléatoire des signaux est générée en utilisant du bruit blanc qui est passé à travers un filtre passe-bas pour créer du bruit coloré.

dt = 0.01
t = np.arange(0, 30, dt)

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

nse1 = np.random.randn(len(t))                 ## white noise 1
nse2 = np.random.randn(len(t))                 ## white noise 2
r = np.exp(-t / 0.05)

cnse1 = np.convolve(nse1, r, mode='same') * dt   ## colored noise 1
cnse2 = np.convolve(nse2, r, mode='same') * dt   ## colored noise 2

## two signals with a coherent part and a random part
s1 = 0.01 * np.sin(2 * np.pi * 10 * t) + cnse1
s2 = 0.01 * np.sin(2 * np.pi * 10 * t) + cnse2

Tracer les signaux

Nous pouvons tracer les deux signaux générés en utilisant la fonction plot de Matplotlib.

fig, ax = plt.subplots()
ax.plot(t, s1, label='s1')
ax.plot(t, s2, label='s2')
ax.set_xlabel('Time')
ax.set_ylabel('Amplitude')
ax.legend()
plt.show()

Calcul de la Densité Spectrale Croisée (CSD)

Pour calculer la Densité Spectrale Croisée (Cross Spectral Density - CSD) de deux signaux, nous devons utiliser la fonction csd de Matplotlib. Cette fonction prend en entrée les deux signaux, le nombre de points pour la Transformée de Fourier Rapide (Fast Fourier Transform - FFT) et la fréquence d'échantillonnage.

fig, ax = plt.subplots()
cxy, f = ax.csd(s1, s2, 256, 1. / dt)
ax.set_ylabel('CSD (dB)')
plt.show()

Interprétation des résultats

Le graphique obtenu montre la Densité Spectrale Croisée (CSD) des deux signaux. L'axe des abscisses représente la fréquence et l'axe des ordonnées représente l'intensité de la corrélation entre les deux signaux à cette fréquence. Le graphique montre un pic à 10 Hz, qui est la fréquence de la partie cohérente des signaux. Cela indique que les deux signaux sont fortement corrélés à cette fréquence.

Résumé

Dans ce laboratoire (lab), vous avez appris à calculer la Densité Spectrale Croisée (Cross Spectral Density) de deux signaux en utilisant la bibliothèque Matplotlib de Python. Nous avons généré deux signaux comportant une partie cohérente et une partie aléatoire, tracé les signaux, calculé la CSD et interprété les résultats. La CSD est un outil utile pour déterminer la corrélation entre deux signaux dans le domaine fréquentiel.