Matplotlib-Funktionen zur Frequenzspektrumanalyse


Matplotlib 参考文档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

FunktionBeschreibung
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 ParameterBeschreibung
FsAbtastfrequenz (Hz), Standard 2
NFFTAnzahl der FFT-Punkte, beeinflusst die Frequenzauflösung
noverlapAnzahl der überlappenden Punkte im Fenster
windowFensterfunktion, Standard ist Hanning-Fenster
detrendDetrending-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()

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

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

Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen