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()
請注意,具有恆定顏色的階梯狀行為是由於將
interpolation=None
傳遞給imshow
所造成的。