我将一些简单的IDL代码传递给Python。但是,SciPy/NumPy软件包返回的FFT值与IDL不同,我找不到原因。
简化为8个元素的简单示例后,我发现SciPy/NumPy程序返回的值比IDL大8倍(我认为这是一个归一化问题)。
以下是两种语言的示例代码(从这里复制):
简化为8个元素的简单示例后,我发现SciPy/NumPy程序返回的值比IDL大8倍(我认为这是一个归一化问题)。
以下是两种语言的示例代码(从这里复制):
signal = ([-2., 8., -6., 4., 1., 0., 3., 5.])
fourier = fft(signal)
print, fourier
返回值
(1.62500, 0.00000) (0.420495, 0.506282) (0.250000, 0.125000) (-1.17050, -1.74372) (-2.62500, 0.00000) (-1.17050, 1.74372) (0.250000, -0.125000) (0.420495, -0.506282)
Python
from scipy.fftpack import fft
import numpy as N
…
signal = N.array([-2., 8., -6., 4., 1., 0., 3., 5.])
fourier = fft(signal)
print fourier
返回
[ 13. +0.j , 3.36396103 +4.05025253j, 2. +1.j , -9.36396103-13.94974747j, -21. +0.j , -9.36396103+13.94974747j, 2. -1.j , 3.36396103 -4.05025253j]
我使用了NumPy包,得到了相同的结果。我也尝试了print fft(signal, 8 )
以防万一,但是它返回了相同的结果,这是预期的。
然而,这还不是全部,当我回到我的真实的256个元素的数组时,我发现差异不再是8或256,而是256*8!这简直太疯狂了。
虽然我已经解决了问题,但我需要知道为什么会有这样的差异。
已解决:这只是归一化,某个时刻我将IDL 256数组除以了一个因子8,但我忘记了去掉它。在Dougal的答案中,有我错过的文档。