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]
vs[18, 0, 0, 0, 0]
的
n_fft
,hop_length
,win_length
都是相同的,这阻止了右侧填充的计算。这些附加值可以是零,也可以是信号的反射,因此提供length
可能会有用。如果length
为None
,则填充将被积极地去除(一些信号丢失)。[1] D. W. Griffin 和 J. S. Lim,“从修改后的短时傅立叶变换中估计信号”,IEEE Trans. ASSP,第 32 卷,第 2 期,第 236-243 页,1984 年 4 月。
- 参数
input (Tensor) –
输入张量。预计格式为
stft()
的输出。即形状为 (B?, N, T) 的复数张量,其中B? 是可选的批次维度。
N 是频率样本的数量,对于单边输入,(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 是单边的。(默认:如果输入大小中的 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? 是输入张量中的可选批次维度。
- 返回类型