Kreuzspektraldichte in Python berechnen

PythonPythonBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In der Signalverarbeitung ist die Kreuzspektraldichte (Cross Spectral Density, CSD) ein Maß für die Korrelation zwischen zwei Signalen im Frequenzbereich. Sie wird verwendet, um zu bestimmen, wie stark zwei Signale in Bezug auf ihren Frequenzgehalt miteinander verbunden sind. In diesem Lab lernen Sie, wie Sie die CSD von zwei Signalen mit der Matplotlib-Bibliothek in Python berechnen können.

Tipps für die virtuelle Maschine (VM)

Nachdem die virtuelle Maschine gestartet wurde, klicken Sie in der oberen linken Ecke auf die Registerkarte Notebook, um auf Jupyter Notebook für die Übung zuzugreifen.

Manchmal müssen Sie möglicherweise einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Aufgrund von Einschränkungen in Jupyter Notebook kann die Validierung von Operationen nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie sich gerne an Labby wenden. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie umgehend beheben.

Importieren der erforderlichen Bibliotheken

Wir müssen die folgenden Bibliotheken importieren: numpy und matplotlib.pyplot.

import matplotlib.pyplot as plt
import numpy as np

Signale generieren

Wir müssen zwei Signale generieren. Diese Signale enthalten einen kohärenten Teil und einen zufälligen Teil. Der kohärente Teil beider Signale hat eine Frequenz von 10 Hz. Der zufällige Teil der Signale wird mithilfe von weißem Rauschen erzeugt, das durch einen Tiefpassfilter geleitet wird, um farbiges Rauschen zu erzeugen.

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

Signale plotten

Wir können die beiden generierten Signale mit der plot-Funktion von Matplotlib plotten.

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()

Kreuzspektraldichte (CSD) berechnen

Um die Kreuzspektraldichte (Cross Spectral Density, CSD) von zwei Signalen zu berechnen, müssen wir die csd-Funktion von Matplotlib verwenden. Die Funktion nimmt die beiden Signale, die Anzahl der Punkte für die schnelle Fourier-Transformation (FFT) und die Abtastfrequenz als Eingaben.

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

Ergebnisse interpretieren

Das resultierende Diagramm zeigt die Kreuzspektraldichte (CSD) der beiden Signale. Die x-Achse repräsentiert die Frequenz, und die y-Achse repräsentiert die Stärke der Korrelation zwischen den beiden Signalen bei dieser Frequenz. Das Diagramm zeigt ein Maximum bei 10 Hz, was die Frequenz des kohärenten Teils der Signale ist. Dies zeigt an, dass die beiden Signale bei dieser Frequenz stark korreliert sind.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie die Kreuzspektraldichte (Cross Spectral Density, CSD) von zwei Signalen mit der Python-Bibliothek Matplotlib berechnen können. Wir haben zwei Signale mit einem kohärenten Teil und einem zufälligen Teil generiert, die Signale geplottet, die CSD berechnet und die Ergebnisse interpretiert. Die CSD ist ein nützliches Werkzeug, um die Korrelation zwischen zwei Signalen im Frequenzbereich zu bestimmen.