scipy.signal.

spectrogram#

scipy.signal.spectrogram(x, fs=1.0, window=('tukey', 0.25), nperseg=None, noverlap=None, nfft=None, detrend='constant', return_onesided=True, scaling='density', axis=-1, mode='psd')[Quelle]#

Berechnet ein Spektrogramm mit aufeinanderfolgenden Fourier-Transformationen (Legacy-Funktion).

Spektrogramme können verwendet werden, um die Veränderung des Frequenzgehalts eines nichtstationären Signals über die Zeit zu visualisieren.

Veraltet

Diese Funktion gilt als Legacy und wird keine weiteren Updates erhalten. Obwohl wir derzeit keine Pläne haben, sie zu entfernen, empfehlen wir, für neuen Code stattdessen modernere Alternativen zu verwenden. ShortTimeFFT ist eine neuere STFT / ISTFT-Implementierung mit mehr Funktionen, einschließlich einer spectrogram-Methode. Ein Vergleich zwischen den Implementierungen finden Sie im Abschnitt Short-Time Fourier Transform des SciPy Benutzerhandbuchs.

Parameter:
xarray_like

Zeitreihen von Messwerten

fsfloat, optional

Abtastfrequenz der Zeitreihe x. Standardwert ist 1.0.

windowstr oder Tupel oder Array_like, optional

Gewünschtes Fenster, das verwendet werden soll. Wenn window ein String oder Tupel ist, wird es an get_window übergeben, um die Fensterwerte zu generieren, die standardmäßig DFT-symmetrisch sind. Siehe get_window für eine Liste von Fenstern und erforderlichen Parametern. Wenn window ein Array-ähnliches Objekt ist, wird es direkt als Fenster verwendet und seine Länge muss nperseg sein. Standardmäßig ein Tukey-Fenster mit einem Formparameter von 0,25.

npersegint, optional

Länge jedes Segments. Standard ist None, aber wenn window str oder tuple ist, wird es auf 256 gesetzt, und wenn window array_like ist, wird es auf die Länge des Fensters gesetzt.

noverlapint, optional

Anzahl der überlappenden Punkte zwischen Segmenten. Wenn None, dann ist noverlap = nperseg // 8. Standardwert ist None.

nfftint, optional

Länge der FFT, die verwendet wird, wenn eine Null-gepolsterte FFT gewünscht wird. Wenn None, ist die FFT-Länge nperseg. Standard ist None.

detrendstr oder Funktion oder False, optional

Gibt an, wie jedes Segment entzerrt werden soll. Wenn detrend eine Zeichenkette ist, wird sie als Argument type an die Funktion detrend übergeben. Wenn es sich um eine Funktion handelt, nimmt sie ein Segment entgegen und gibt ein entzerrtes Segment zurück. Wenn detrend False ist, wird keine Entzerrung durchgeführt. Standard ist 'constant'.

return_onesidedbool, optional

Wenn True, wird ein einseitiges Spektrum für reale Daten zurückgegeben. Wenn False, wird ein zweiseitiges Spektrum zurückgegeben. Standard ist True, aber für komplexe Daten wird immer ein zweiseitiges Spektrum zurückgegeben.

scaling{ ‘density’, ‘spectrum’ }, optional

Wählt zwischen der Berechnung der Leistungsdichtespektraldichte ('density'), bei der Sxx die Einheiten V**2/Hz hat, und der Berechnung des Leistungsspektrums ('spectrum'), bei der Sxx die Einheiten V**2 hat, wenn x in V und fs in Hz gemessen wird. Standardwert ist 'density'.

axisint, optional

Achse, entlang derer das Spektrogramm berechnet wird; die Standardachse ist die letzte Achse (d. h. axis=-1).

modestr, optional

Definiert, welche Art von Rückgabewerten erwartet werden. Optionen sind ['psd', 'complex', 'magnitude', 'angle', 'phase']. 'complex' ist äquivalent zur Ausgabe von stft ohne Padding oder Randverlängerung. 'magnitude' gibt die absolute Amplitude der STFT zurück. 'angle' und 'phase' geben den komplexen Winkel der STFT zurück, mit und ohne Entfaltung, respectively.

Rückgabe:
fndarray

Array von Abtastfrequenzen.

tndarray

Array von Segmentzeiten.

Sxxndarray

Spektrogramm von x. Standardmäßig entspricht die letzte Achse von Sxx den Segmentzeiten.

Siehe auch

periodogram

Einfaches, optional modifiziertes Periodogramm

lombscargle

Lomb-Scargle-Periodogramm für ungleichmäßig abgetastete Daten

welch

Leistungsdichteschätzung nach der Welch-Methode.

csd

Kreuzspektraldichteschätzung nach der Welch-Methode.

ShortTimeFFT

Neuere STFT/ISTFT-Implementierung, die mehr Funktionen bietet und auch eine spectrogram-Methode enthält.

Hinweise

Ein angemessener Überlappungsgrad hängt von der Wahl des Fensters und Ihren Anforderungen ab. Im Gegensatz zur Welch-Methode, bei der der gesamte Datenstrom gemittelt wird, kann es sinnvoll sein, eine geringere Überlappung (oder vielleicht gar keine) zu verwenden, wenn ein Spektrogramm berechnet wird, um eine gewisse statistische Unabhängigkeit zwischen einzelnen Segmenten zu erhalten. Aus diesem Grund ist das Standardfenster ein Tukey-Fenster mit einer Überlappung von 1/8 der Fensterlänge an jedem Ende.

Hinzugefügt in Version 0.16.0.

Referenzen

[1]

Oppenheim, Alan V., Ronald W. Schafer, John R. Buck „Discrete-Time Signal Processing“, Prentice Hall, 1999.

Beispiele

>>> import numpy as np
>>> from scipy import signal
>>> from scipy.fft import fftshift
>>> import matplotlib.pyplot as plt
>>> rng = np.random.default_rng()

Generiert ein Testsignal, eine 2 Vrms Sinuswelle, deren Frequenz langsam um 3kHz moduliert ist, verrauscht mit weißem Rauschen exponentiell abnehmender Amplitude, abgetastet bei 10 kHz.

>>> fs = 10e3
>>> N = 1e5
>>> amp = 2 * np.sqrt(2)
>>> noise_power = 0.01 * fs / 2
>>> time = np.arange(N) / float(fs)
>>> mod = 500*np.cos(2*np.pi*0.25*time)
>>> carrier = amp * np.sin(2*np.pi*3e3*time + mod)
>>> noise = rng.normal(scale=np.sqrt(noise_power), size=time.shape)
>>> noise *= np.exp(-time/5)
>>> x = carrier + noise

Berechnet und plottet das Spektrogramm.

>>> f, t, Sxx = signal.spectrogram(x, fs)
>>> plt.pcolormesh(t, f, Sxx, shading='gouraud')
>>> plt.ylabel('Frequency [Hz]')
>>> plt.xlabel('Time [sec]')
>>> plt.show()
../../_images/scipy-signal-spectrogram-1_00_00.png

Hinweis: Wenn eine Ausgabe verwendet wird, die nicht einseitig ist, dann verwenden Sie Folgendes

>>> f, t, Sxx = signal.spectrogram(x, fs, return_onesided=False)
>>> plt.pcolormesh(t, fftshift(f), fftshift(Sxx, axes=0), shading='gouraud')
>>> plt.ylabel('Frequency [Hz]')
>>> plt.xlabel('Time [sec]')
>>> plt.show()
../../_images/scipy-signal-spectrogram-1_01_00.png