mars.tensor.fft.hfft#

mars.tensor.fft.hfft(a, n=None, axis=-1, norm=None)[来源]#

计算具有厄米对称性的信号的FFT,即实谱。

Parameters
  • a (array_like) – 输入张量。

  • n (int, 可选) – 输出的变换轴的长度。对于n个输出点,需要n//2 + 1个输入点。如果输入长于此,则会被裁剪。如果输入短于此,则会用零填充。如果n未给出,则从沿axis指定的轴的输入长度中确定。

  • (int, 可选) – 计算FFT的轴。如果未给出,则使用最后一个轴。

  • norm ({None, "ortho"}, 可选) – 归一化模式(见 mt.fft)。默认值为 None。

Returns

out – 截断或零填充的输入,沿着由 axis 指定的轴进行变换,如果未指定 axis,则沿着最后一个轴进行变换。变换轴的长度为 n,或者如果未给出 n,则为 2*m - 2,其中 m 是输入的变换轴的长度。要获得奇数个输出点,必须指定 n,例如在典型情况下指定为 2*m - 1

Return type

张量

Raises

IndexError – 如果 axis 大于 a 的最后一个轴。

另请参阅

rfft

计算实数输入的一维FFT。

ihfft

hfft的逆运算。

备注

hfft/ihfft 是一组类似于 rfft/irfft 的函数,但适用于相反的情况:在这里,信号在时间域中具有厄米对称性,并且在频率域中是实数。因此,在这里使用 hfft 时,如果结果需要是奇数,则必须提供结果的长度。

  • 偶数: ihfft(hfft(a, 2*len(a) - 2) == a, 在舍入误差范围内,

  • 奇数: ihfft(hfft(a, 2*len(a) - 1) == a, 在舍入误差范围内。

示例

>>> import mars.tensor as mt
>>> signal = mt.array([1, 2, 3, 4, 3, 2])
>>> mt.fft.fft(signal).execute()
array([ 15.+0.j,  -4.+0.j,   0.+0.j,  -1.-0.j,   0.+0.j,  -4.+0.j])
>>> mt.fft.hfft(signal[:4]).execute() # Input first half of signal
array([ 15.,  -4.,   0.,  -1.,   0.,  -4.])
>>> mt.fft.hfft(signal, 6).execute()  # Input entire signal and truncate
array([ 15.,  -4.,   0.,  -1.,   0.,  -4.])
>>> signal = mt.array([[1, 1.j], [-1.j, 2]])
>>> (mt.conj(signal.T) - signal).execute()   # check Hermitian symmetry
array([[ 0.-0.j,  0.+0.j],
       [ 0.+0.j,  0.-0.j]])
>>> freq_spectrum = mt.fft.hfft(signal)
>>> freq_spectrum.execute()
array([[ 1.,  1.],
       [ 2., -2.]])