maxframe.tensor.fft.fft#
- maxframe.tensor.fft.fft(a, n=None, axis=-1, norm=None)[源代码]#
计算一维离散傅里叶变换。
此函数使用高效的快速傅里叶变换(FFT)算法 [CT] 计算一维 n 点离散傅里叶变换(DFT)。
- 参数:
- 返回:
out -- 被截断或零填充的输入,沿着由 axis 指定的轴进行变换,如果没有指定 axis,则使用最后一个轴。
- 返回类型:
complex Tensor
- 抛出:
IndexError -- 如果 axes 大于 a 的最后一个轴。
参见
备注
FFT(快速傅里叶变换)是一种通过利用计算项中的对称性高效计算离散傅里叶变换(DFT)的方法。当 n 是 2 的幂时对称性最高,因此变换对于这些大小最为高效。
此实现中使用的 DFT 定义及约定,请参阅 numpy.fft 模块的文档。
引用
[CT]Cooley, James W., and John W. Tukey, 1965, "An algorithm for the machine calculation of complex Fourier series," Math. Comput. 19: 297-301.
示例
>>> import maxframe.tensor as mt
>>> mt.fft.fft(mt.exp(2j * mt.pi * mt.arange(8) / 8)).execute() array([-2.33486982e-16+1.14423775e-17j, 8.00000000e+00-6.89018570e-16j, 2.33486982e-16+2.33486982e-16j, 0.00000000e+00+0.00000000e+00j, -1.14423775e-17+2.33486982e-16j, 0.00000000e+00+1.99159850e-16j, 1.14423775e-17+1.14423775e-17j, 0.00000000e+00+0.00000000e+00j])
在此示例中,实数输入的FFT是Hermitian的,即如`numpy.fft`文档中所述,实部对称而虚部反对称:
>>> import matplotlib.pyplot as plt >>> t = mt.arange(256) >>> sp = mt.fft.fft(mt.sin(t)) >>> freq = mt.fft.fftfreq(t.shape[-1]) >>> plt.plot(freq.execute(), sp.real.execute(), freq.execute(), sp.imag.execute()) [<matplotlib.lines.Line2D object at 0x...>, <matplotlib.lines.Line2D object at 0x...>] >>> plt.show()