maxframe.tensor.fft.fft#

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

计算一维离散傅里叶变换。

此函数使用高效的快速傅里叶变换(FFT)算法 [CT] 计算一维 n 点离散傅里叶变换(DFT)。

参数:
  • a (array_like) -- 输入张量,可以是复数。

  • n (int, optional) -- 输出变换轴的长度。如果 n 小于输入的长度,则输入将被裁剪;如果 n 较大,则输入将用零填充。如果未给出 n,则使用沿 axis 指定轴的输入长度。

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

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

返回:

out -- 被截断或零填充的输入,沿着由 axis 指定的轴进行变换,如果没有指定 axis,则使用最后一个轴。

返回类型:

complex Tensor

抛出:

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

参见

mt.fft

有关 DFT 定义和所用约定的信息。

ifft

fft 的逆变换。

fft2

二维 FFT。

fftn

n 维 FFT。

rfftn

实数输入的 n 维 FFT。

fftfreq

给定 FFT 参数的频率区间。

备注

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()