我想计算高斯功率谱的逆傅里叶变换,从而再次获得高斯。我想用这个事实来检查我的高斯功率谱的IFFT是否合理,因为它产生了一个以高斯方式有效分布的数据阵列。 现在,事实证明IFFT必须乘以因子2 * pi * N,其中N是阵列的维数,以便恢复分析相关函数(其是功率谱的逆傅立叶变换)。有人可以解释原因吗?
这是首先使用高斯功率谱填充数组然后进行功率谱的IFFT的代码片段。
power_spectrum_k = np.zeros(n, float)
for k in range(1, int(n/2+1)):
power_spectrum_k[k] = math.exp(-(2*math.pi*k*sigma/n)*(2*math.pi*k*sigma/n))
for k in range(int(n/2+1), n):
power_spectrum_k[k] = power_spectrum_k[int(k - n/2)]
inverse_transform2 = np.zeros(n, float)
inverse_transform2 = np.fft.ifft(power_spectrum_k)
其中功率谱的对称来自需要获得真正的相关函数,同时遵循使用numpy.ifft的规则(引自文档:
“输入的顺序应与fft返回的顺序相同,即a [0]应包含零频率项,[1:n / 2 + 1]应包含正频率项,并且[[n / 2 + 1:]应该包含负频率项,按负频率递减的顺序“。)
答案 0 :(得分:0)
原因是Plancherel theorem,它表明傅立叶变换保留了信号的能量,即 | x(t)|²上的积分等于上的积分| X(F)| 2 。如果您有更多样本(例如,由更高的采样率或更长的间隔引起),您将获得更多能量。因此,您的IFFT结果按N
因子缩放。您的因素取决于所使用的convention of Fourier Integral,正如@pv已经指出的那样。另一方面,在你的间隔长度上,由于采样的功率和连续间隔的积分需要相同。
答案 1 :(得分:-1)
我建议将现有的库用于fft。不是特别困难,但有一些优化的解决方案。 尝试scipy http://docs.scipy.org/doc/scipy/reference/fftpack.html或我最喜欢的fftw https://hgomersall.github.io/pyFFTW/