maxframe.tensor.fft.hfft#
- maxframe.tensor.fft.hfft(a, n=None, axis=-1, norm=None)[源代码]#
计算具有 Hermitian 对称性(即实数谱)信号的 FFT。
- 参数:
- 返回:
out -- 被截断或零填充的输入,沿 axis 指定的轴进行变换,如果未指定 axis 则使用最后一个轴。变换轴的长度为 n,如果未给出 n,则为
2*m - 2,其中m是输入变换轴的长度。要获得奇数个输出点,必须指定 n,例如典型情况下为2*m - 1。- 返回类型:
Tensor
- 抛出:
IndexError -- 如果 axis 大于 a 的最后一个轴。
备注
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.]])