我想计算高斯功率谱的傅里叶逆变换,从而再次获得高斯功率谱。我想用这个事实来检查我的高斯功率谱的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应包含零频率项,a1:n/2+1应包含正频率项,an/2+1:应包含负频率项,顺序为负频率递减。”)
发布于 2015-03-06 07:01:11
原因是Plancherel theorem,它规定傅立叶变换守恒信号的能量,即|x(t)|²上的积分等于|X(f)|²上的积分。如果你有更多的样本(例如,由更高的采样率或更长的间隔引起),你就有更多的能量。出于这个原因,您的IFFT结果是按N的因子缩放的。您的因素取决于所使用的convention of Fourier Integral,正如@pv已经指出的那样。另一方面,在你的区间的长度上,因为积分超过了采样的幂和连续的区间需要是相同的。
发布于 2015-03-05 06:17:14
我建议在fft中使用现有的库。不是因为它特别困难,但有一些优化过的解决方案。试试scipy http://docs.scipy.org/doc/scipy/reference/fftpack.html或我最喜欢的fftw https://hgomersall.github.io/pyFFTW/
https://stackoverflow.com/questions/28865953
复制相似问题