torch.istft¶
- torch.istft(input, n_fft, hop_length=None, win_length=None, window=None, center=True, normalized=False, onesided=None, length=None, return_complex=False) Tensor:¶
逆短時傅立葉變換。這預計是
stft()的逆運算。警告
從版本 2.1 開始,如果未指定
window,將發出警告。在未來的版本中,此屬性將是必需的。請提供與 stft 呼叫中使用的相同的視窗。它具有相同的引數(+ 額外可選引數
length),並且應返回原始訊號的最小二乘估計。演算法將使用 NOLA 條件(非零重疊)進行檢查。引數
window和center的重要考慮事項是,所有視窗求和建立的包絡在時間上的某個點絕不為零。具體而言,。由於
stft()如果訊號末尾的元素無法填充到幀中,會丟棄這些元素,因此istft返回的訊號可能比原始訊號短(如果center為 False 可能發生,因為訊號未填充)。如果在引數中給定了length並且它長於預期,則istft將在返回訊號的末尾填充零。如果
center為True,則會進行填充,例如'constant'、'reflect'等。左側填充可以精確地去除,因為它們可以計算,但右側填充在沒有額外資訊的情況下無法計算。示例:假設最後一個視窗是:
[17, 18, 0, 0, 0]對比[18, 0, 0, 0, 0]引數
n_fft、hop_length、win_length都相同,這使得無法計算右側填充。這些額外的值可能是零,也可能是訊號的反射,因此提供length可能很有用。如果length為None,則填充將被積極地移除(會損失部分訊號)。[1] D. W. Griffin and J. S. Lim,“Signal estimation from modified short-time Fourier transform”,IEEE Trans. ASSP,第 32 卷,第 2 期,第 236-243 頁,1984 年 4 月。
- 引數
input (Tensor) –
輸入張量。期望格式與
stft()的輸出相同。即形狀為 (B?, N, T) 的複數張量,其中B? 是可選的批次維度
N 是頻率樣本數,對於 onesided 輸入是 (n_fft // 2) + 1,否則是 n_fft。
T 是幀數,對於 centered stft 是 1 + length // hop_length,否則是 1 + (length - n_fft) // hop_length。
版本 2.0 中的變化:不再支援實數資料型別輸入。輸入現在必須具有複數資料型別,如
stft(..., return_complex=True)返回的那樣。n_fft (int) – 傅立葉變換大小
hop_length (Optional[int]) – 相鄰滑動視窗幀之間的距離。(預設值:
n_fft // 4)win_length (Optional[int]) – 視窗幀和 STFT 濾波器的大小。(預設值:
n_fft)window (Optional[torch.Tensor]) – 可選的視窗函式。形狀必須是一維且 <= n_fft。(預設值:
torch.ones(win_length))center (bool) – 輸入是否在兩側進行填充,使得第 幀以時間 為中心。(預設值:
True)normalized (bool) – STFT 是否已歸一化。(預設值:
False)onesided (Optional[bool]) – STFT 是否是單側的。(預設值: 如果輸入大小中的 n_fft != fft_size 則為
True)length (Optional[int]) – 訊號的修剪量(即原始訊號長度)。對於 centered stft,預設為 (T - 1) * hop_length,否則為 n_fft + (T - 1) * hop_length,其中 T 是輸入幀數。
return_complex (Optional[bool]) – 輸出是否應為複數,或者輸入是否應假定源自實訊號和視窗。請注意,這與
onesided=True不相容。(預設值:False)
- 返回值
- 原始訊號的最小二乘估計,形狀為 (B?, length),其中
B? 是輸入張量中的可選批次維度。
- 返回型別