maxframe.tensor.fft.hfft#

maxframe.tensor.fft.hfft(a, n=None, axis=-1, norm=None)[源代码]#

计算具有 Hermitian 对称性(即实数谱)信号的 FFT。

参数:
  • a (array_like) -- 输入张量。

  • n (int, optional) -- 输出变换轴的长度。对于 n 个输出点,需要 n//2 + 1 个输入点。如果输入比这长,则会被裁剪;如果比这短,则会用零填充。如果未给出 n,则根据 axis 指定轴上的输入长度确定。

  • axis (int, optional) -- 计算 FFT 的轴。如果未给出,则使用最后一个轴。

  • norm ({None, "ortho"}, optional) -- 归一化模式(参见 mt.fft)。默认为 None。

返回:

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

返回类型:

Tensor

抛出:

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

参见

rfft

计算实数输入的一维 FFT。

ihfft

hfft 的逆变换。

备注

hfft/ihfft 是与 rfft/irfft 相似的成对函数,但用于相反的情况:这里的信号在时域中具有 Hermitian 对称性,在频域中是实数。因此,如果要得到奇数长度的结果,必须为 hfft 提供结果长度。

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

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

示例

>>> import maxframe.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.]])