mars.tensor.fft.hfft#
- mars.tensor.fft.hfft(a, n=None, axis=-1, norm=None)[来源]#
计算具有厄米对称性的信号的FFT,即实谱。
- Parameters
- Returns
out – 截断或零填充的输入,沿着由 axis 指定的轴进行变换,如果未指定 axis,则沿着最后一个轴进行变换。变换轴的长度为 n,或者如果未给出 n,则为
2*m - 2,其中m是输入的变换轴的长度。要获得奇数个输出点,必须指定 n,例如在典型情况下指定为2*m - 1。- Return type
张量
- Raises
IndexError – 如果 axis 大于 a 的最后一个轴。
备注
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.]])