scipy.signal.ShortTimeFFT.

extent#

ShortTimeFFT.extent(n, axes_seq='tf', center_bins=False)[Quelle]#

Gibt die minimalen und maximalen Zeit-Frequenz-Werte zurück.

Ein Tupel mit vier Gleitkommazahlen (t0, t1, f0, f1) für „tf“ und (f0, f1, t0, t1) für „ft“ wird zurückgegeben, das die Ecken des Zeit-Frequenz-Bereichs der stft beschreibt. Dieses Tupel kann als Parameter mit demselben Namen an matplotlib.pyplot.imshow übergeben werden.

Parameter:
nint

Anzahl der Samples im Eingabesignal.

axes_seq{‘tf’, ‘ft’}

Gibt zuerst die Zeitausdehnung und dann die Frequenzausdehnung zurück oder umgekehrt.

center_bins: bool

Wenn gesetzt (Standard False), werden die Werte der Zeitschlitze und Frequenzbänder von der Seite zur Mitte verschoben. Dies ist nützlich, wenn die stft-Werte als Treppenfunktionen, d. h. ohne Interpolation, geplottet werden.

Siehe auch

matplotlib.pyplot.imshow

Zeigt Daten als Bild an.

scipy.signal.ShortTimeFFT

Klasse, zu der diese Methode gehört.

Beispiele

Die folgenden beiden Plots veranschaulichen die Auswirkung des Parameters center_bins: Die Gitterlinien repräsentieren die drei Zeit- und die vier Frequenzwerte der STFT. Der linke Plot, bei dem (t0, t1, f0, f1) = (0, 3, 0, 4) als Parameter extent an imshow übergeben wird, zeigt das Standardverhalten, bei dem die Zeit- und Frequenzwerte am unteren Rand des entsprechenden Bins liegen. Der rechte Plot zeigt mit (t0, t1, f0, f1) = (-0.5, 2.5, -0.5, 3.5), dass die Bins über den jeweiligen Werten zentriert sind, wenn center_bins=True übergeben wird.

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> from scipy.signal import ShortTimeFFT
...
>>> n, m = 12, 6
>>> SFT = ShortTimeFFT.from_window('hann', fs=m, nperseg=m, noverlap=0)
>>> Sxx = SFT.stft(np.cos(np.arange(n)))  # produces a colorful plot
...
>>> fig, axx = plt.subplots(1, 2, tight_layout=True, figsize=(6., 4.))
>>> for ax_, center_bins in zip(axx, (False, True)):
...     ax_.imshow(abs(Sxx), origin='lower', interpolation=None, aspect='equal',
...                cmap='viridis', extent=SFT.extent(n, 'tf', center_bins))
...     ax_.set_title(f"{center_bins=}")
...     ax_.set_xlabel(f"Time ({SFT.p_num(n)} points, Δt={SFT.delta_t})")
...     ax_.set_ylabel(f"Frequency ({SFT.f_pts} points, Δf={SFT.delta_f})")
...     ax_.set_xticks(SFT.t(n))  # vertical grid line are timestamps
...     ax_.set_yticks(SFT.f)  # horizontal grid line are frequency values
...     ax_.grid(True)
>>> plt.show()
../../_images/scipy-signal-ShortTimeFFT-extent-1_00_00.png

Beachten Sie, dass das treppenartige Verhalten mit den konstanten Farben durch die Übergabe von interpolation=None an imshow verursacht wird.