首页 > 解决方案 > IFFT 在 Python 中返回什么?

问题描述

我需要一个复杂数组的傅里叶逆变换。ifft应该返回一个真正的数组,但它返回另一个复杂的数组。

在 MATLAB 中, a=ifft(fft(a)),但在 Python 中它不是那样工作的。

a = np.arange(6)
m = ifft(fft(a))
m # Google says m should = a, but m is complex

输出 :

array([0.+0.00000000e+00j, 1.+3.70074342e-16j, 2.+0.00000000e+00j,
       3.-5.68396583e-17j, 4.+0.00000000e+00j, 5.-3.13234683e-16j])

标签: pythonfft

解决方案


虚部是结果浮点数计算误差。如果它非常小,则可以将其丢弃。

Numpy 有内置函数real_if_close,可以这样做:

>>> np.real_if_close(np.fft.ifft(np.fft.fft(a)))
array([0., 1., 2., 3., 4., 5.])

您可以在此处阅读有关浮动系统限制的信息: https ://docs.python.org/3.8/tutorial/floatingpoint.html


推荐阅读