捷徑

torch.stft

torch.stft(input, n_fft, hop_length=None, win_length=None, window=None, center=True, pad_mode='reflect', normalized=False, onesided=None, return_complex=None)[source][source]

短時傅立葉轉換 (STFT)。

警告

從 1.8.0 版本開始,對於真實輸入,return_complex 必須始終明確給定,並且 return_complex=False 已被棄用。 強烈建議使用 return_complex=True,因為在未來的 pytorch 版本中,此函式將僅回傳複數張量。

請注意,可以使用 torch.view_as_real() 來恢復具有額外最後維度的真實張量,用於表示實數和虛數分量。

警告

從 2.1 版本開始,如果未指定 window,將提供警告。 在未來的版本中,此屬性將為必填項。 目前未提供 window 預設為使用矩形 window,這可能會導致不必要的 artifacts。 考慮使用 tapered windows,例如 torch.hann_window()

STFT 計算輸入訊號短時間重疊視窗的傅立葉轉換。 這提供了訊號的頻率分量隨時間的變化。 此函式的介面仿照 (但 *不是* librosa stft 函式的直接替代品)。

忽略可選的批次維度,此方法計算以下表達式

X[ω,m]=k=0win_length-1window[k] input[m×hop_length+k] exp(j2πωkn_fft),X[\omega, m] = \sum_{k = 0}^{\text{win\_length-1}}% \text{window}[k]\ \text{input}[m \times \text{hop\_length} + k]\ % \exp\left(- j \frac{2 \pi \cdot \omega k}{\text{n\_fft}}\right),

其中 mm 是滑動視窗的索引,而 ω\omega 是頻率 0ω<n_fft0 \leq \omega < \text{n\_fft} 用於 onesided=False,或 0ω<n_fft/2+10 \leq \omega < \lfloor \text{n\_fft} / 2 \rfloor + 1 用於 onesided=True

  • input 必須為 1 維時間序列或 2 維時間序列批次。

  • 如果 hop_lengthNone (預設值),則會將其視為等於 floor(n_fft / 4)

  • 如果 win_lengthNone (預設值),則會將其視為等於 n_fft

  • window 可以是大小為 win_length 的 1 維張量,例如來自 torch.hann_window()。如果 windowNone (預設值),則會將其視為在視窗中所有地方都有 11。 如果 win_length<n_fft\text{win\_length} < \text{n\_fft},則在應用之前,window 會在兩側填補至長度 n_fft

  • 如果 centerTrue (預設值),則 input 將在兩側填補,以便第 tt 個影格以時間 t×hop_lengtht \times \text{hop\_length} 為中心。否則,第 tt 個影格從時間 t×hop_lengtht \times \text{hop\_length} 開始。

  • pad_mode 決定當 centerTrue 時,用於 input 的填補方法。 請參閱 torch.nn.functional.pad() 以取得所有可用的選項。 預設值為 "reflect"

  • 如果 onesidedTrue(預設值,適用於實數輸入),則僅返回 ω\omega[0,1,2,,n_fft2+1]\left[0, 1, 2, \dots, \left\lfloor \frac{\text{n\_fft}}{2} \right\rfloor + 1\right] 的值,因為實數到複數的傅立葉變換滿足共軛對稱性,即 X[m,ω]=X[m,n_fftω]X[m, \omega] = X[m, \text{n\_fft} - \omega]^*。 請注意,如果輸入或視窗張量是複數,則無法使用 onesided 輸出。

  • 如果 normalizedTrue(預設值為 False),則該函數返回標準化的 STFT 結果,即乘以 (frame_length)0.5(\text{frame\_length})^{-0.5}

  • 如果 return_complexTrue(如果輸入為複數,則為預設值),則傳回值為 input.dim() + 1 維度的複數張量。 如果 False,則輸出為 input.dim() + 2 維度的實數張量,其中最後一個維度代表實部和虛部。

如果 return_complex 為 true,則返回大小為 (×N×T)(* \times N \times T) 的複數張量;否則,返回大小為 (×N×T×2)(* \times N \times T \times 2) 的實數張量。其中 *input 的可選批次大小,NN 是應用 STFT 的頻率數量,TT 是使用的總影格數。

警告

此函數在 0.4.1 版本中變更了簽章。 使用先前的簽章進行呼叫可能會導致錯誤或傳回不正確的結果。

參數
  • input (Tensor) – 形狀為 (B?, L) 的輸入張量,其中 B? 是一個可選的批次維度

  • n_fft (int) – 傅立葉轉換的大小

  • hop_length (int, optional) – 相鄰滑動視窗影格之間的距離。預設值: None (視為等於 floor(n_fft / 4))

  • win_length (int, optional) – 視窗影格和 STFT 濾波器的大小。預設值: None (視為等於 n_fft)

  • window (Tensor, optional) – 可選的視窗函數。形狀必須為 1d 且 <= n_fft 預設值: None (視為全部 11 s 的視窗)

  • center (bool, optional) – 是否在兩側填充 input,以便第 tt 個影格位於時間 t×hop_lengtht \times \text{hop\_length} 的中心。預設值: True

  • pad_mode (str, optional) – 控制當 centerTrue 時使用的填充方法。預設值: "reflect"

  • normalized (bool, optional) – 控制是否傳回標準化的 STFT 結果。預設值: False

  • onesided (bool, optional) – 控制是否傳回一半的結果,以避免實際輸入的冗餘。預設值:實際 inputwindowTrue,否則為 False

  • return_complex (bool, optional) –

    是否傳回複數張量,或是一個具有額外最後一個維度的實數張量,用於表示實數和虛數成分。

    在 2.0 版本中變更: return_complex 現在是實際輸入的必要引數,因為預設值正在轉換為 True

    自 2.0 版本起已棄用: return_complex=False 已棄用,請改用 return_complex=True 請注意,在輸出上呼叫 torch.view_as_real() 將會恢復已棄用的輸出格式。

傳回

包含 STFT 結果的張量,形狀為 (B?, N, T, C?),其中
  • B? 是來自輸入的可選批次維度。

  • N 是頻率樣本的數量,對於 onesided=True 來說是 (n_fft // 2) + 1,否則為 n_fft

  • T 是幀的數量,對於 center=True 來說是 1 + L // hop_length,否則為 1 + (L - n_fft) // hop_length

  • C? 是一個可選的長度為 2 的維度,包含實部和虛部,當 return_complex=False 時存在。

回傳類型

張量 (Tensor)

文件

取得 PyTorch 的完整開發者文件

查看文件

教學

取得針對初學者和進階開發者的深度教學

查看教學

資源

尋找開發資源並獲得問題解答

查看資源