快捷方式

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,将发出警告。在未来的版本中,此属性将是必需的。当前不提供 window 默认为使用矩形窗口,这可能导致不必要的伪影。考虑使用锥形窗口,例如 torch.hann_window()

STFT 计算输入信号短时重叠窗口的傅里叶变换。这提供了信号随时间变化的频率成分。此函数的接口借鉴了 (但不能直接替换) librosa 的 stft 函数。

忽略可选的批量维度,此方法计算以下表达式

X[ω,m]=k=0win_length-1window[k] input[m×hop_length+k] (j2πωkn_fft),X[\omega, m] = \sum_{k = 0}^{\text{win\_length-1}}% \text{window}[k]\ \text{input}[m \times \text{hop\_length} + k]\ % \exp\left(- j \frac{2 \pi \cdot \omega k}{\text{n\_fft}}\right),

其中 mm 是滑动窗口的索引,ω\omega 是频率。当 onesided=False 时,频率范围为 0ω<n_fft0 \leq \omega < \text{n\_fft};当 onesided=True 时,频率范围为 0ω<n_fft/2+10 \leq \omega < \lfloor \text{n\_fft} / 2 \rfloor + 1

  • input 必须是 1 维时间序列或 2 维批量时间序列。

  • 如果 hop_lengthNone(默认值),则将其视为等于 floor(n_fft / 4)

  • 如果 win_lengthNone(默认值),则将其视为等于 n_fft

  • window 可以是大小为 win_length 的 1 维张量,例如通过 torch.hann_window() 生成。如果 windowNone(默认值),则视为窗口中所有位置都为 11。如果 win_length<n_fft\text{win\_length} < \text{n\_fft}window 在应用前将在两侧填充至长度 n_fft

  • 如果 centerTrue(默认值),input 将在两侧进行填充,使得第 tt 帧的中心位于时间 t×hop_lengtht \times \text{hop\_length}。否则,第 tt 帧开始于时间 t×hop_lengtht \times \text{hop\_length}

  • pad_mode 确定当 centerTrue 时应用于 input 的填充方法。有关所有可用选项,请参阅 torch.nn.functional.pad()。默认值为 "reflect"

  • 如果 onesidedTrue(实数输入的默认值),则仅返回范围为 [0,1,2,,n_fft2+1]\left[0, 1, 2, \dots, \left\lfloor \frac{\text{n\_fft}}{2} \right\rfloor + 1\right]ω\omega 对应值,因为实数到复数的傅里叶变换满足共轭对称性,即 X[m,ω]=X[m,n_fftω]X[m, \omega] = X[m, \text{n\_fft} - \omega]^*。请注意,如果 input 或 window 张量是复数,则无法进行 onesided 输出。

  • 如果 normalizedTrue(默认值为 False),则函数返回归一化的 STFT 结果,即乘以 (frame_length)0.5(\text{frame\_length})^{-0.5}

  • 如果 return_complexTrue(如果 input 是复数,则为默认值),则返回 input.dim() + 1 维复数张量。如果为 False,则输出 input.dim() + 2 维实数张量,其中最后一维表示实部和虚部。

返回一个复数张量,形状为 (×N×T)(* \times N \times T),如果 return_complex 为真;或者返回一个实数张量,形状为 (×N×T×2)(* \times N \times T \times 2)。其中 *input 可选的批次大小,NN 是应用 STFT 的频率数,TT 是使用的总帧数。

警告

此函数在版本 0.4.1 中更改了签名。使用旧签名调用可能会导致错误或返回不正确的结果。

参数
  • input (Tensor) – 输入张量,形状为 (B?, L),其中 B? 是可选的批次维度。

  • n_fft (int) – 傅里叶变换大小

  • hop_length (int, optional) – 相邻滑动窗口帧之间的距离。默认值:None (被视为等于 floor(n_fft / 4))

  • win_length (int, optional) – 窗口帧大小和 STFT 滤波器大小。默认值:None (被视为等于 n_fft)

  • window (Tensor, optional) – 可选的窗口函数。形状必须为一维且 <= n_fft。默认值:None (被视为全 11 的窗口)

  • center (bool, optional) – 是否在 input 两侧进行填充,以便第 tt 帧以时间点 t×hop_lengtht \times \text{hop\_length} 为中心。默认值:True

  • pad_mode (str, optional) – 控制当 centerTrue 时使用的填充方法。默认值:"reflect"

  • normalized (bool, optional) – 控制是否返回归一化的 STFT 结果。默认值:False

  • onesided (bool, optional) – 控制对于实数输入是否返回一半结果以避免冗余。默认值:对于实数 inputwindowTrue,否则为 False

  • return_complex (bool, optional) –

    控制是返回一个复数张量,还是一个带有额外最后一维用于表示实部和虚部的实数张量。

    版本 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=True1 + L // hop_length,否则为 1 + (L - n_fft) // hop_length

  • C? 是一个可选的长度为 2 的维度,包含实部和虚部,在 return_complex=False 时存在。

返回类型

Tensor

文档

访问 PyTorch 的完整开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获得问题解答

查看资源