Matplotlib-Funktionen zur Frequenzspektrumanalyse
Matplotlib-Referenzdokumentation
Matplotlib bietet Plot-Funktionen für Spektralanalyse und Signalverarbeitung, die häufig im wissenschaftlichen Rechnen und in der Ingenieurvisualisierung eingesetzt werden.
Funktionsübersicht
| Funktion | Beschreibung |
|---|---|
| acorr() | Autokorrelationsdiagramm zeichnen |
| xcorr() | Kreuzkorrelationsdiagramm zeichnen |
| psd() | Leistungsdichtespektrum darstellen |
| csd() | Kreuzspektraldichte zeichnen |
| specgram() | Spektrogramm/Zeit-Frequenz-Diagramm zeichnen |
| cohere() | Kohärenz darstellen |
| angle_spectrum() | Winkelspektrum darstellen |
| magnitude_spectrum() | Betragsspektrum darstellen |
| phase_spectrum() | Phasenspektrum darstellen |
Funktionsdefinitionen
acorr() / xcorr()
matplotlib.pyplot.acorr(x, *, detrend=<function detrend_none>,
maxlags=10, **kwargs)
matplotlib.pyplot.xcorr(x, y, *, detrend=<function detrend_none>,
maxlags=10, normed=True, **kwargs)
psd() / csd()
matplotlib.pyplot.psd(x, NFFT=None, Fs=None, Fc=None,
detrend=None, window=None, noverlap=None, pad_to=None,
sides=None, scale_by_freq=None, **kwargs)
matplotlib.pyplot.csd(x, y, NFFT=None, Fs=None, Fc=None,
detrend=None, window=None, noverlap=None, pad_to=None,
sides=None, scale_by_freq=None, **kwargs)
specgram()
matplotlib.pyplot.specgram(x, NFFT=None, Fs=None, Fc=None,
detrend=None, window=None, noverlap=None, cmap=None,
xextent=None, pad_to=None, sides=None, scale_by_freq=None,
mode=None, scale=None, vmin=None, vmax=None, **kwargs)
angle_spectrum() / magnitude_spectrum() / phase_spectrum()
matplotlib.pyplot.angle_spectrum(x, Fs=None, Fc=None, **kwargs) matplotlib.pyplot.magnitude_spectrum(x, Fs=None, Fc=None, **kwargs) matplotlib.pyplot.phase_spectrum(x, Fs=None, Fc=None, **kwargs)
| Häufige Parameter | Beschreibung |
|---|---|
| Fs | Abtastfrequenz (Hz), Standard 2 |
| NFFT | Anzahl der FFT-Punkte, beeinflusst die Frequenzauflösung |
| noverlap | Anzahl der überlappenden Punkte im Fenster |
| window | Fensterfunktion, Standard ist Hanning-Fenster |
| detrend | Detrending-Methode: 'none', 'mean', 'linear' |
Anwendungsbeispiele
Beispiel 1: Autokorrelation und Kreuzkorrelation
Beispiel
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
t = np.linspace(0, 10, 500)
# Sinuswelle mit Rauschen
sig = np.sin(2 * np.pi * 2 * t) + np.random.randn(500) * 0.3
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4),
layout='constrained')
# Autokorrelation
ax1.acorr(sig, maxlags=100, color='steelblue')
ax1.set_title('acorr() - Autokorrelation von sin(4πt) + Rauschen')
ax1.set_xlabel('Verzögerung')
# Kreuzkorrelation (Signal und seine verzögerte Version)
delayed = np.roll(sig, 20)
ax2.xcorr(sig, delayed, maxlags=100, color='coral')
ax2.set_title('xcorr() - Kreuzkorrelation (Verzögerung=20)')
ax2.set_xlabel('Verzögerung')
plt.show()
import numpy as np
np.random.seed(42)
t = np.linspace(0, 10, 500)
# Sinuswelle mit Rauschen
sig = np.sin(2 * np.pi * 2 * t) + np.random.randn(500) * 0.3
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4),
layout='constrained')
# Autokorrelation
ax1.acorr(sig, maxlags=100, color='steelblue')
ax1.set_title('acorr() - Autokorrelation von sin(4πt) + Rauschen')
ax1.set_xlabel('Verzögerung')
# Kreuzkorrelation (Signal und seine verzögerte Version)
delayed = np.roll(sig, 20)
ax2.xcorr(sig, delayed, maxlags=100, color='coral')
ax2.set_title('xcorr() - Kreuzkorrelation (Verzögerung=20)')
ax2.set_xlabel('Verzögerung')
plt.show()
Beispiel 2: Leistungsspektraldichte
Beispiel
import matplotlib.pyplot as plt
import numpy as np
# Erzeuge ein Signal mit einer Abtastrate von 100Hz (10Hz + 25Hz Sinuswellen)
Fs = 100 # Abtastrate
t = np.arange(0, 5, 1/Fs)
sig = np.sin(2*np.pi*10*t) + 0.5*np.sin(2*np.pi*25*t)
+ np.random.randn(len(t))*0.5
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4),
layout='constrained')
# PSD
ax1.psd(sig, NFFT=256, Fs=Fs, color='steelblue')
ax1.set_title('psd() - Leistungsspektraldichte')
# Spektrogramm
ax2.specgram(sig, NFFT=128, Fs=Fs, noverlap=64,
cmap='viridis')
ax2.set_title('specgram() - Spektrogramm')
ax2.set_xlabel('Zeit (s)')
ax2.set_ylabel('Frequenz (Hz)')
plt.show()
import numpy as np
# Erzeuge ein Signal mit einer Abtastrate von 100Hz (10Hz + 25Hz Sinuswellen)
Fs = 100 # Abtastrate
t = np.arange(0, 5, 1/Fs)
sig = np.sin(2*np.pi*10*t) + 0.5*np.sin(2*np.pi*25*t)
+ np.random.randn(len(t))*0.5
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4),
layout='constrained')
# PSD
ax1.psd(sig, NFFT=256, Fs=Fs, color='steelblue')
ax1.set_title('psd() - Leistungsspektraldichte')
# Spektrogramm
ax2.specgram(sig, NFFT=128, Fs=Fs, noverlap=64,
cmap='viridis')
ax2.set_title('specgram() - Spektrogramm')
ax2.set_xlabel('Zeit (s)')
ax2.set_ylabel('Frequenz (Hz)')
plt.show()
Beispiel 3: Amplitudenspektrum und Phasenspektrum
Beispiel
import matplotlib.pyplot as plt
import numpy as np
Fs = 200
t = np.arange(0, 2, 1/Fs)
sig = np.sin(2*np.pi*20*t) + 0.5*np.sin(2*np.pi*50*t)
fig, axes = plt.subplots(2, 2, figsize=(10, 8),
layout='constrained')
# Originalsignal
axes[0, 0].plot(t[:100], sig[:100])
axes[0, 0].set_title('Originalsignal')
axes[0, 0].set_xlabel('Zeit (s)')
# Betragsspektrum
axes[0, 1].magnitude_spectrum(sig, Fs=Fs, color='steelblue')
axes[0, 1].set_title('magnitude_spectrum()')
# Phasenspektrum
axes[1, 0].angle_spectrum(sig, Fs=Fs, color='coral')
axes[1, 0].set_title('angle_spectrum()')
# Phasenspektrum
axes[1, 1].phase_spectrum(sig, Fs=Fs, color='green')
axes[1, 1].set_title('phase_spectrum()')
plt.show()
print("Beispiel: Spektralanalyse angezeigt")
import numpy as np
Fs = 200
t = np.arange(0, 2, 1/Fs)
sig = np.sin(2*np.pi*20*t) + 0.5*np.sin(2*np.pi*50*t)
fig, axes = plt.subplots(2, 2, figsize=(10, 8),
layout='constrained')
# Originalsignal
axes[0, 0].plot(t[:100], sig[:100])
axes[0, 0].set_title('Originalsignal')
axes[0, 0].set_xlabel('Zeit (s)')
# Betragsspektrum
axes[0, 1].magnitude_spectrum(sig, Fs=Fs, color='steelblue')
axes[0, 1].set_title('magnitude_spectrum()')
# Phasenspektrum
axes[1, 0].angle_spectrum(sig, Fs=Fs, color='coral')
axes[1, 0].set_title('angle_spectrum()')
# Phasenspektrum
axes[1, 1].phase_spectrum(sig, Fs=Fs, color='green')
axes[1, 1].set_title('phase_spectrum()')
plt.show()
print("Beispiel: Spektralanalyse angezeigt")
Andere Erweiterungen