scipy.signal.ShortTimeFFT.

extent#

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

返回時間-頻率值的最小值和最大值。

返回一個包含四個浮點數的元組 (t0, t1, f0, f1) (用於 'tf') 和 (f0, f1, t0, t1) (用於 'ft'),描述 stft 的時間-頻率域的角。該元組可以作為同名參數傳遞給 matplotlib.pyplot.imshow

參數:
n整數

輸入訊號中的樣本數。

axes_seq{‘tf’, ‘ft’}

先返回時間範圍,然後返回頻率範圍,反之亦然。

center_bins: 布林值

如果設定 (預設值為 False),時間槽和頻率區間的值將從邊緣移動到中間。當將 stft 值繪製為階梯函數時 (即不進行插值),這非常有用。

另請參閱

matplotlib.pyplot.imshow

將資料顯示為圖像。

scipy.signal.ShortTimeFFT

此方法所屬的類別。

範例

以下兩個圖示說明了參數 center_bins 的效果:網格線代表 STFT 的三個時間值和四個頻率值。左圖中,(t0, t1, f0, f1) = (0, 3, 0, 4) 作為參數 extent 傳遞給 imshow,顯示了時間和頻率值的標準行為,即位於相應區間的下邊緣。右圖中,(t0, t1, f0, f1) = (-0.5, 2.5, -0.5, 3.5),顯示當傳遞 center_bins=True 時,區間在各自的值上居中。

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

請注意,具有恆定顏色的階梯狀行為是由於將 interpolation=None 傳遞給 imshow 所造成的。