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, align_to_window=None)[源代码]#
短时傅里叶变换 (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 函数。
忽略可选的批次维度,此方法计算以下表达式:
其中 是滑动窗的索引, 是频率,对于
onesided=False,有 ;对于onesided=True,有 。input必须是 1-D 时间序列或 2-D 时间序列批次。如果
hop_length为None(默认值),则将其视为等于floor(n_fft / 4)。如果
win_length为None(默认值),则将其视为等于n_fft。window可以是大小为win_length的 1-D 张量,例如来自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(如果输入为复数则默认为 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, 可选) – 相邻滑动窗帧之间的距离。默认值:
None(视为等于floor(n_fft / 4))win_length (int, 可选) – 窗帧和 STFT 滤波器的大小。默认值:
None(视为等于n_fft)window (Tensor, 可选) – 可选的窗函数。形状必须是 1-D 且 <= n_fft。默认值:
None(视为全为 的窗口)center (bool, 可选) – 是否在
input两侧进行填充,以便第 帧以时间 为中心。默认值:Truepad_mode (str, 可选) – 控制当
center为True时使用的填充方法。默认值:"reflect"normalized (bool, 可选) – 控制是否返回归一化的 STFT 结果。默认值:
Falseonesided (bool, 可选) – 控制是否返回一半的结果以避免实数输入的冗余。对于实数
input和window,默认值为True,否则为False。return_complex (bool, 可选) –
是否返回复数张量,或者具有额外最后一维(用于表示实部和虚部分量)的实数张量。
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 时存在。
- 返回类型: