MATLAB和NumPy中的ifft结果不同

0 投票
2 回答
2442 浏览
提问于 2025-04-17 09:28

我还有一个问题。这个问题和我之前问的那个很相似(之前得到了很好的帮助 - 再次感谢)。不过,之前那个讨论里的解决方案在这里不管用:

现在我想讨论的是反傅里叶变换(ifft):

  # i have an array 'aaa' of shape (6,) such as:
  for i in aaa:  print i
  ...

 (1.22474487139+0j)
 (-0.612372435696-1.06066017178j)
 (-0.612372435696+1.06066017178j)
 (1.22474487139+0j)
 (-0.612372435696-1.06066017178j)
 (-0.612372435696+1.06066017178j)

  #when i perform np.ifft the result is:
 np.fft.ifft(aaa)

 array([  1.48029737e-16 +1.48029737e-16j,
    -8.26024733e-17 -1.72464044e-16j,
     1.22474487e+00 -3.94508649e-16j,
     3.70074342e-17 -2.96059473e-16j,
    -2.22044605e-16 +2.46478913e-16j,   4.55950391e-17 +4.68523518e-16j])

  ###################################################################
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % BUT IN MATLAB 
  % the same array...

  aaa =

  1.2247          
 -0.6124 - 1.0607i
 -0.6124 + 1.0607i
  1.2247          
 -0.6124 - 1.0607i
 -0.6124 + 1.0607i

 % ...gives the result:
 ifft(aaa)

 ans =

  -0.0000
        0
   1.2247
        0
        0
        0

我用像range(1,6)这样的真实数字做了一些实验,结果是一样的。会不会是精度的问题?但如果是这样,为什么结果差别这么大呢?也许有人知道怎么解决这个问题?

2 个回答

3

X.XXe-16 和 1.2247 比起来,基本上可以认为是零。打印出来的结果可能会把所有数字都四舍五入到一个更大的范围。

所以,从实际的角度来看,你的结果没有什么区别。

6

如果你查看从numpy计算得到的数值,你会发现它们非常非常小(小于10的负15次方)。我建议这可能是精度的问题,实际上你的结果并没有表面上看起来那么不同。

撰写回答