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 derstftbeschreibt. Dieses Tupel kann als Parameter mit demselben Namen anmatplotlib.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 diestft-Werte als Treppenfunktionen, d. h. ohne Interpolation, geplottet werden.
Siehe auch
matplotlib.pyplot.imshowZeigt Daten als Bild an.
scipy.signal.ShortTimeFFTKlasse, 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 Parameterextentanimshowü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, wenncenter_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()
Beachten Sie, dass das treppenartige Verhalten mit den konstanten Farben durch die Übergabe von
interpolation=Noneanimshowverursacht wird.