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.
ShortTimeFFTist eine neuere STFT / ISTFT-Implementierung mit mehr Funktionen, einschließlich einerspectrogram-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. Sieheget_windowfü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 mussnpersegsein. 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
detrendeine Zeichenkette ist, wird sie als Argument type an die Funktiondetrendübergeben. Wenn es sich um eine Funktion handelt, nimmt sie ein Segment entgegen und gibt ein entzerrtes Segment zurück. WenndetrendFalse 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
stftohne 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
periodogramEinfaches, optional modifiziertes Periodogramm
lombscargleLomb-Scargle-Periodogramm für ungleichmäßig abgetastete Daten
welchLeistungsdichteschätzung nach der Welch-Methode.
csdKreuzspektraldichteschätzung nach der Welch-Methode.
ShortTimeFFTNeuere 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()
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()