Spektogrammplot mit Matplotlib

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 diesem Lab werden wir lernen, wie man mithilfe von Matplotlib einen Spektogrammplot erstellt. Ein Spektogramm ist eine visuelle Darstellung des Spektrums der Frequenzen eines Signals, das sich über die Zeit ändert. Spektogramme werden üblicherweise verwendet, um den Frequenzgehalt eines Signals über die Zeit zu analysieren, wie beispielsweise bei der Spracherkennung, der Musikanalyse und der Audiosignalverarbeitung. Wir werden Python und Matplotlib verwenden, um einen Spektogrammplot eines Signals zu erstellen.

VM-Tipps

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Bibliotheken importieren

Wir beginnen mit dem Import der erforderlichen Bibliotheken: NumPy und Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Signal generieren

Als nächstes werden wir ein Signal generieren, das geplottet werden soll. In diesem Beispiel werden wir ein Signal erstellen, das die Summe zweier Sinuswellen mit unterschiedlichen Frequenzen und etwas zufälligem Rauschen ist.

## 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  ## the signal

Spektogramm generieren

Jetzt werden wir einen Spektogrammplot des Signals generieren. Wir werden die specgram-Methode aus der Axes-Klasse von Matplotlib verwenden, um das Spektogramm zu generieren. Diese Methode gibt vier Objekte zurück: Pxx, freqs, bins und im. Pxx ist das Periodogramm, freqs ist der Frequenzvektor, bins sind die Mittelpunkte der Zeitintervalle und im ist die AxesImage-Instanz, die die Daten im Plot darstellt.

NFFT = 1024  ## die Länge der Fenstersegmente
Fs = int(1.0 / dt)  ## die Abtastfrequenz

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

Plot anpassen

Wir können den Plot anpassen, indem wir Titel, Achsenbeschriftungen und Farbskalen hinzufügen.

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.set_title('Time Domain Signal')
ax1.set_xlabel('Time (s)')
ax1.set_ylabel('Amplitude')
ax1.plot(t, x)

ax2.set_title('Spectrogram')
ax2.set_xlabel('Time (s)')
ax2.set_ylabel('Frequency (Hz)')
im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900, cmap='viridis')
fig.colorbar(im[3], ax=ax2)

Plot anzeigen

Schließlich werden wir den Plot anzeigen.

plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mit Matplotlib ein Spektogrammplot erstellt. Wir haben ein Signal generiert und die specgram-Methode aus der Axes-Klasse von Matplotlib verwendet, um den Spektogrammplot zu erzeugen. Wir haben auch den Plot anpassen, indem wir Titel, Achsenbeschriftungen und Farbskalen hinzugefügt haben. Spektogramme sind nützlich bei der Analyse des Frequenzinhalts eines Signals im Laufe der Zeit und werden häufig in der Spracherkennung, der Musikanalyse und der Audiosignalverarbeitung verwendet.