Shortcuts

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函数的。

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

X[ω,m]=k=0win_length-1window[k] input[m×hop_length+k] exp(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 是频率 0ω<n_fft0 \leq \omega < \text{n\_fft} 对于 onesided=False, 或者 0ω<n_fft/2+10 \leq \omega < \lfloor \text{n\_fft} / 2 \rfloor + 1 对于 onesided=True

  • input 必须是一个一维时间序列或一个二维时间序列的批次。

  • 如果 hop_lengthNone(默认),它将被视为等于 floor(n_fft / 4)

  • 如果 win_lengthNone(默认),它将被视为等于 n_fft

  • window 可以是一个大小为 win_length 的 1-D 张量,例如来自 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(实数输入的默认值),则仅返回 ω\omega[0,1,2,,n_fft2+1]\left[0, 1, 2, \dots, \left\lfloor \frac{\text{n\_fft}}{2} \right\rfloor + 1\right] 的值,因为 实数到复数的傅里叶变换满足共轭对称性, 即, X[m,ω]=X[m,n_fftω]X[m, \omega] = X[m, \text{n\_fft} - \omega]^*。 注意,如果输入或窗口张量是复数,则无法输出 onesided

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

  • 如果 return_complexTrue(如果输入是复数,则为默认值),则返回的是一个 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中更改了签名。使用之前的签名调用可能会导致错误或返回不正确的结果。

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

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

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

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

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

  • center (bool, 可选) – 是否在两侧填充input,以便第tt帧在时间t×hop_lengtht \times \text{hop\_length}处居中。 默认值:True

  • pad_mode (字符串, 可选) – 控制当 centerTrue 时使用的填充方法。默认值:"reflect"

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

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

  • return_complex (布尔值, 可选) –

    是否返回一个复数张量,或者一个实数张量,并在最后一个维度上增加实部和虚部的分量。

    在版本 2.0 中更改: return_complex 现在对于实数输入是一个必需的参数,因为默认值正在过渡到 True

    自版本 2.0 起弃用: return_complex=False 已被弃用,请改用 return_complex=True 注意,对输出调用 torch.view_as_real() 将恢复已弃用的输出格式。

Returns

包含STFT结果的张量,形状为(B?, N, T, C?),其中
  • B? 是输入的可选批次维度。

  • N 是频率样本的数量,(n_fft // 2) + 1onesided=True 时,否则为 n_fft

  • T 是帧的数量,1 + L // hop_lengthcenter=True 时,否则为 1 + (L - n_fft) // hop_length

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

Return type

张量

优云智算