評價此頁

torch.functional.stft#

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

短時傅立葉變換 (STFT)。

警告

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

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

警告

從 2.1 版本開始,如果未指定 window,則會提供警告。在未來的版本中,此屬性將是必需的。當前未提供視窗將預設使用矩形視窗,這可能會導致不希望出現的偽影。請考慮使用漸變視窗,例如 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 是頻率,對於 onesided=False0ω<n_fft0 \leq \omega < \text{n\_fft},或者對於 onesided=True0ω<n_fft/2+10 \leq \omega < \lfloor \text{n\_fft} / 2 \rfloor + 1

  • input 必須是 1D 時間序列或 2D 時間序列批次。

  • 如果 hop_lengthNone(預設值),它將被視為等於 floor(n_fft / 4)

  • 如果 win_lengthNone(預設值),它將被視為等於 n_fft

  • window 可以是大小為 win_length 的 1D 張量,例如,來自 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 維的實數張量,其中最後一個維度表示實部和虛部。

返回一個大小為 (×N×T)(* \times N \times T) 的複數張量(如果 return_complex 為 true),或者一個大小為 (×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 的視窗)

  • 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() 可以恢復棄用的輸出格式。

返回

返回一個形狀為 (B?, N, T, C?) 的 STFT 結果張量,其中:
  • B? 是輸入的(可選)批處理維度。

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

  • T 是幀數,對於 center=True1 + L // hop_length,否則為 1 + (L - n_fft) // hop_length

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

返回型別

張量