Shortcuts

torch.fft.hfft

torch.fft.hfft(input, n=None, dim=-1, norm=None, *, out=None) 张量

计算一维离散傅里叶变换的厄米特对称输入信号。

注意

hfft()/ihfft() 类似于 rfft()/irfft()。实数 FFT 期望 时域中的实信号,并在频域中给出厄米对称性。厄米 FFT 则相反;时域中的厄米对称性和频域中的实数值。因此,需要特别注意长度参数 n, 与 irfft() 一样。

注意

因为在时域中信号是厄米特的,所以在频域中的结果将是实数。请注意,为了满足厄米特性质,某些输入频率必须是实值的。在这些情况下,虚部将被忽略。例如,input[0]中的任何虚部都会导致一个或多个无法在实数输出中表示的复数频率项,因此总是会被忽略。

注意

Hermitian输入的正确解释取决于原始数据的长度,如n所示。这是因为每个输入形状可能对应于奇数或偶数长度的信号。默认情况下,信号被假定为偶数长度,奇数信号将无法正确往返。因此,建议始终传递信号长度n

注意

支持在CUDA上使用GPU架构SM53或更高版本的torch.half和torch.chalf。 然而,它仅支持每个变换维度中信号长度的2的幂次方。 使用默认参数时,变换维度的大小应为(2^n + 1),其中参数n默认为偶数输出大小 = 2 * (transformed_dim_size - 1)

Parameters
  • 输入 (张量) – 表示半厄米信号的输入张量

  • n (int, 可选) – 输出信号长度。这决定了实数输出的长度。如果给出,输入将在计算Hermitian FFT之前被零填充或截断到这个长度。 默认为偶数输出:n=2*(input.size(dim) - 1)

  • dim (int, 可选) – 沿此维度进行一维厄米特傅里叶变换。

  • norm (str, optional) –

    归一化模式。对于正向变换 (hfft()),这些对应于:

    • "forward" - 归一化因子为 1/n

    • "backward" - 不进行归一化

    • "ortho" - 归一化因子为 1/sqrt(n)(使 Hermitian FFT 正交归一化)

    使用相同的归一化模式调用反向变换 (ihfft()) 将在两次变换之间应用总体归一化因子 1/n。这是为了使 ihfft() 成为精确的逆变换。

    默认值为 "backward"(不进行归一化)。

Keyword Arguments

输出 (张量, 可选) – 输出张量。

示例

将一个实值频率信号转换到时域会得到厄米对称输出:

>>> t = torch.linspace(0, 1, 5)
>>> t
张量([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])
>>> T = torch.fft.ifft(t)
>>> T
张量([ 0.5000-0.0000j, -0.1250-0.1720j, -0.1250-0.0406j, -0.1250+0.0406j,
        -0.1250+0.1720j])

注意,T[1] == T[-1].conj()T[2] == T[-2].conj() 是多余的。因此,我们可以不考虑负频率来计算正向变换:

>>> torch.fft.hfft(T[:3], n=5)
张量([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])

irfft()类似,必须给出输出长度,以便恢复偶数长度的输出:

>>> torch.fft.hfft(T[:3])
张量([0.1250, 0.2809, 0.6250, 0.9691])
优云智算