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 函式的直接替代品)。
忽略可選的批次維度,此方法計算以下表達式
其中 是滑動視窗的索引,而 是頻率 用於
onesided=False
,或 用於onesided=True
。input
必須為 1 維時間序列或 2 維時間序列批次。如果
hop_length
為None
(預設值),則會將其視為等於floor(n_fft / 4)
。如果
win_length
為None
(預設值),則會將其視為等於n_fft
。window
可以是大小為win_length
的 1 維張量,例如來自torch.hann_window()
。如果window
為None
(預設值),則會將其視為在視窗中所有地方都有 。 如果 ,則在應用之前,window
會在兩側填補至長度n_fft
。如果
center
為True
(預設值),則input
將在兩側填補,以便第 個影格以時間 為中心。否則,第 個影格從時間 開始。pad_mode
決定當center
為True
時,用於input
的填補方法。 請參閱torch.nn.functional.pad()
以取得所有可用的選項。 預設值為"reflect"
。如果
onesided
為True
(預設值,適用於實數輸入),則僅返回 在 的值,因為實數到複數的傅立葉變換滿足共軛對稱性,即 。 請注意,如果輸入或視窗張量是複數,則無法使用onesided
輸出。如果
normalized
為True
(預設值為False
),則該函數返回標準化的 STFT 結果,即乘以 。如果
return_complex
為True
(如果輸入為複數,則為預設值),則傳回值為input.dim() + 1
維度的複數張量。 如果False
,則輸出為input.dim() + 2
維度的實數張量,其中最後一個維度代表實部和虛部。
如果
return_complex
為 true,則返回大小為 的複數張量;否則,返回大小為 的實數張量。其中 是input
的可選批次大小, 是應用 STFT 的頻率數量, 是使用的總影格數。警告
此函數在 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
(視為全部 s 的視窗)center (bool, optional) – 是否在兩側填充
input
,以便第 個影格位於時間 的中心。預設值:True
pad_mode (str, optional) – 控制當
center
為True
時使用的填充方法。預設值:"reflect"
normalized (bool, optional) – 控制是否傳回標準化的 STFT 結果。預設值:
False
onesided (bool, optional) – 控制是否傳回一半的結果,以避免實際輸入的冗餘。預設值:實際
input
和window
為True
,否則為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 時存在。
- 回傳類型