本文簡要介紹 python 語言中 scipy.signal.ShortTimeFFT.from_dual
的用法。
用法:
classmethod ShortTimeFFT.from_dual(dual_win, hop, fs, *, fft_mode='onesided', mfft=None, scale_to=None, phase_shift=0)#
僅通過提供雙窗口來實例化
ShortTimeFFT
。如果 STFT 是可逆的,則可以從給定的雙窗口
dual_win
計算窗口win
。所有其他參數的含義與ShortTimeFFT
的初始化程序中的含義相同。正如 SciPy 用戶指南的短時傅立葉變換部分中所述,可逆 STFT 可以解釋為時移和調頻雙窗口的級數展開。例如,級數係數 S[q,p] 屬於將
dual_win
移位 p *delta_t
並將其乘以 exp( 2 * j * pi * t * q *delta_f
) 的項。例子:
以下示例討論將信號分解為時移和頻移高斯分布。將使用由 51 個樣本組成的標準差為 1 的高斯分布:
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy.signal import ShortTimeFFT >>> from scipy.signal.windows import gaussian ... >>> T, N = 0.1, 51 >>> d_win = gaussian(N, std=1/T, sym=True) # symmetric Gaussian window >>> t = T * (np.arange(N) - N//2) ... >>> fg1, ax1 = plt.subplots() >>> ax1.set_title(r"Dual Window: Gaussian with $\sigma_t=1$") >>> ax1.set(xlabel=f"Time $t$ in seconds ({N} samples, $T={T}$ s)", ... xlim=(t[0], t[-1]), ylim=(0, 1.1*max(d_win))) >>> ax1.plot(t, d_win, 'C0-')
下圖顯示了 41、11 和 2 個樣本的重疊,顯示了
hop
間隔如何影響窗口win
的形狀:>>> fig2, axx = plt.subplots(3, 1, sharex='all') ... >>> axx[0].set_title(r"Windows for hop$\in\{10, 40, 49\}$") >>> for c_, h_ in enumerate([10, 40, 49]): ... SFT = ShortTimeFFT.from_dual(d_win, h_, 1/T) ... axx[c_].plot(t + h_ * T, SFT.win, 'k--', alpha=.3, label=None) ... axx[c_].plot(t - h_ * T, SFT.win, 'k:', alpha=.3, label=None) ... axx[c_].plot(t, SFT.win, f'C{c_+1}', ... label=r"$\Delta t=%0.1f\,$s" % SFT.delta_t) ... axx[c_].set_ylim(0, 1.1*max(SFT.win)) ... axx[c_].legend(loc='center') >>> axx[-1].set(xlabel=f"Time $t$ in seconds ({N} samples, $T={T}$ s)", ... xlim=(t[0], t[-1])) >>> plt.show()
在以 t = 0 為中心的窗口
win
旁邊,描繪了前一個窗口 (t = -delta_t
) 和後一個窗口 (t =delta_t
)。可以看出,對於小hop
間隔,窗口緊湊且平滑,在STFT中具有良好的時頻集中性。對於 4.9 秒的大hop
間隔,窗口在 t = 0 附近具有較小的值,這些值沒有被相鄰窗口的重疊覆蓋,這可能會導致數值不準確。此外,窗口開始和結束處的尖峰形狀指向更高的帶寬,導致 STFT 的時頻分辨率較差。因此,hop
間隔的選擇將是時間頻率分辨率和小hop
尺寸所需的內存要求之間的折衷。
相關用法
- Python SciPy ShortTimeFFT.from_window用法及代碼示例
- Python SciPy ShortTimeFFT.istft用法及代碼示例
- Python SciPy ShortTimeFFT.spectrogram用法及代碼示例
- Python SciPy SuperLU.perm_c用法及代碼示例
- Python SciPy SuperLU.perm_r用法及代碼示例
- Python SciPy SuperLU.solve用法及代碼示例
- Python SciPy SmoothBivariateSpline.__call__用法及代碼示例
- Python SciPy SmoothSphereBivariateSpline.ev用法及代碼示例
- Python SciPy SmoothBivariateSpline.ev用法及代碼示例
- Python SciPy SmoothSphereBivariateSpline.__call__用法及代碼示例
- Python SciPy ndimage.interpolation.geometric_transform()用法及代碼示例
- Python SciPy ndimage.map_coordinates()用法及代碼示例
- Python SciPy ndimage.spline_filter1d()用法及代碼示例
- Python SciPy integrate.quad_explain用法及代碼示例
- Python SciPy signal.cmplx_sort用法及代碼示例
- Python scipy.signal.czt用法及代碼示例
- Python SciPy distance.kulsinski用法及代碼示例
- Python scipy.stats.gilbrat用法及代碼示例
- Python SciPy stats.median_absolute_deviation用法及代碼示例
- Python SciPy stats.itemfreq用法及代碼示例
- Python SciPy stats.binom_test用法及代碼示例
- Python SciPy stats.rvs_ratio_uniforms用法及代碼示例
- Python SciPy spmatrix.diagonal用法及代碼示例
- Python SciPy spmatrix.dot用法及代碼示例
- Python SciPy spmatrix.nonzero用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.signal.ShortTimeFFT.from_dual。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。