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, vol.32, no.2, pp.236-243, Apr. 1984.
- 参数
input (Tensor) –
输入张量。预期格式与
stft()的输出相同。即形状为 (B?, N, T) 的复数张量,其中B? 是可选的批处理维度
N 是频率样本的数量,对于 onesided 输入为 (n_fft // 2) + 1,否则为 n_fft。
T 是帧的数量,对于中心填充的 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]) – 可选的窗口函数。形状必须是 1D 且 <= n_fft(默认值:
torch.ones(win_length))center (bool) – 是否对
input的两侧进行了填充,以便 -th 帧位于时间 处。(默认值:True)normalized (bool) – STFT 是否已标准化。(默认值:
False)onesided (Optional[bool]) – STFT 是否为 onesided。(默认值:如果输入大小中的 n_fft != fft_size,则为
True)length (Optional[int]) – 信号将被修剪的量(即原始信号长度)。对于中心填充的 stft,默认为 (T - 1) * hop_length,否则为 n_fft + (T - 1) * hop_length,其中 T 是输入帧的数量。
return_complex (Optional[bool]) – 输出是否应为复数,或者输入是否应假定源自实数信号和窗口。请注意,这与
onesided=True不兼容。(默认值:False)
- 返回
- 原始信号的最小二乘估计,形状为 (B?, length),其中
B? 是输入张量中的可选批处理维度。
- 返回类型