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)[源代码]¶
短时傅里叶变换 (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 函数的直接替代)librosa。
忽略可选的批处理维度,此方法计算以下表达式
其中 是滑动窗口的索引, 是频率,对于
onesided=False
,;对于onesided=True
,.input
必须是一维时间序列或二维时间序列批次。如果
hop_length
为None
(默认),则将其视为等于floor(n_fft / 4)
。如果
win_length
为None
(默认),则将其视为等于n_fft
。window
可以是大小为win_length
的一维张量,例如来自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
为真),或大小为 的实数张量。其中 是input
的可选批次大小, 是应用 STFT 的频率数, 是使用的帧总数。警告
此函数在 0.4.1 版本中更改了签名。使用以前的签名调用可能会导致错误或返回不正确的结果。
- 参数
input (张量) – 形状为 (B?, L) 的输入张量,其中 B? 是可选的批次维度
n_fft (整数) – 傅里叶变换的大小
hop_length (整数, 可选) – 相邻滑动窗口帧之间的距离。默认值:
None
(视为等于floor(n_fft / 4)
)win_length (整数, 可选) – 窗口帧和 STFT 滤波器的大小。默认值:
None
(视为等于n_fft
)window (张量, 可选) – 可选的窗口函数。形状必须为 1d 且 <= n_fft 默认值:
None
(视为所有 的窗口)center (布尔值, 可选) – 是否在两侧填充
input
,以便第 帧以时间 为中心。默认值:True
pad_mode (字符串, 可选) – 控制当
center
为True
时使用的填充方法。默认值:"reflect"
normalized (布尔值, 可选) – 控制是否返回归一化的 STFT 结果。默认值:
False
onesided (布尔值, 可选) – 控制是否返回一半结果以避免实数输入的冗余。默认值:对于实数
input
和window
为True
,否则为False
。return_complex (布尔值, 可选) –
是否返回一个复数张量,或者一个实数张量,并在最后一个维度上额外添加实部和虚部的分量。
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 时存在。
- 返回类型