【发布时间】:2012-05-05 08:26:33
【问题描述】:
我将一些简单的 IDL 代码传递给 Python。然而,从 SciPy/NumPy 包返回的 FFT 值与 IDL 不同,我不知道为什么。
将所有内容简化为 8 个元素的简单示例,我发现 SciPy/NumPy 例程返回的值是 IDL 例程的 8 (2^3) 倍(我认为是标准化问题)。
以下是两种语言的示例代码(复制自here):
IDL
signal = ([-2., 8., -6., 4., 1., 0., 3., 5.])
fourier = fft(signal)
print, fourier
返回
(1.62500,000000)(0.420495,0.506282)(0.250000,0.125000)(-1.17050,-1.74372)(-2.62500,0.00000)(-1.17050,0.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 的回答中有我错过的文档。
【问题讨论】:
-
对不起,我试过和你一样的代码,结果也一样。修改结果的 8 个因素在哪里?
-
IDL 在前向变换上除以 N,这里恰好是 8。
标签: python scipy fft idl idl-programming-language