Numpy 和 Matlab 中快速傅里叶变换输出不同的原因

计算科学 matlab Python 麻木的 傅里叶变换
2021-12-11 07:09:06

这是 Numpy 的输出

np.fft.ifft([0, 4, 0, 0])
array([ 1.+0.j,  0.+1.j, -1.+0.j,  0.-1.j]) # may vary

这是 Matlab 的输出

res = fft([0, 4, 0, 0])

res =

   4.0000 + 0.0000i   0.0000 - 4.0000i  -4.0000 + 0.0000i   0.0000 + 4.0000i

ifft(res)

ans =

     0     4     0     0

考虑到它们都用于科学计算,Numpy 和 Matlab 中 FFT 和 iFFT 组合输出不同的原因是什么?
如何在 Numpy 中解决上述问题,以便获得预期的结果?(与 Matlab 相同的结果)

1个回答

FFT 原则上是一种长度保持操作。为此,必须1/N在正向变换和逆变换之间分配一个因子。这是在哪里完成或是否完成的设计决策。

似乎在两种引用的情况下,除以N都是针对逆变换执行的。您可以将 ifft 结果解释为多项式系数,

p(z) = 1 + j*z - z^2 - j*z^3

您将原始向量作为多项式值在 处获得[1,-j,-1,j]