maxframe.tensor.fft.ifft#

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

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

此函数计算由 fft 计算的一维 n 点离散傅里叶变换的逆变换。换句话说,ifft(fft(a)) == a 在数值精度范围内成立。有关算法和定义的一般描述,请参见 mt.fft

输入应按照 fft 返回的顺序排列,即:

  • a[0] 应包含零频率项,

  • a[1:n//2] 应包含正频率项,

  • a[n//2 + 1:] 应包含负频率项,按从最负频率开始递增的顺序排列。

对于偶数个输入点,A[n//2] 表示正负奈奎斯特频率处的值之和,因为这两个频率混叠在一起。详见 numpy.fft

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

  • n (int, optional) -- 输出变换轴的长度。如果 n 小于输入长度,则输入会被裁剪;如果大于输入长度,则输入会被补零。如果未指定 n,则使用沿 axis 指定轴的输入长度。有关填充问题,请参见说明。

  • axis (int, optional) -- 用于计算逆离散傅里叶变换的轴。如果未指定,则使用最后一个轴。

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

返回:

out -- 经过截断或补零的输入,沿 axis 指定的轴进行变换;如果未指定 axis,则沿最后一个轴变换。

返回类型:

complex Tensor

抛出:

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

参见

mt.fft

介绍,包含定义和一般性说明。

fft

一维(正向)快速傅里叶变换,ifft 是其逆变换

ifft2

二维逆快速傅里叶变换。

ifftn

n维逆快速傅里叶变换。

备注

如果输入参数 n 大于输入大小,则在输入末尾补零。虽然这是常见的做法,但可能导致令人意外的结果。如果需要不同的填充方式,必须在调用 ifft 之前完成。

示例

>>> import maxframe.tensor as mt
>>> mt.fft.ifft([0, 4, 0, 0]).execute()
array([ 1.+0.j,  0.+1.j, -1.+0.j,  0.-1.j])

创建并绘制一个具有随机相位的带限信号:

>>> import matplotlib.pyplot as plt
>>> t = mt.arange(400)
>>> n = mt.zeros((400,), dtype=complex)
>>> n[40:60] = mt.exp(1j*mt.random.uniform(0, 2*mt.pi, (20,)))
>>> s = mt.fft.ifft(n)
>>> plt.plot(t.execute(), s.real.execute(), 'b-', t.execute(), s.imag.execute(), 'r--')
...
>>> plt.legend(('real', 'imaginary'))
...
>>> plt.show()