我对使用 Python 计算 3D 空间中粒子系统(~100,000)的功率谱很感兴趣。到目前为止,我发现的是 Numpy ( fft
, fftn
,..) 中的一组函数,它们计算离散傅里叶变换,其绝对值的平方是功率谱。我的问题是我的数据是如何表示的——说实话可能很容易回答。
我拥有的数据结构是一个形状为 ( n ,2) 的数组,n是我拥有的粒子数,每列代表n 个粒子的 x、y 和 z 坐标。我相信我应该使用该函数的fftn()
函数,它采用n维数组的离散傅里叶变换 - 但它没有说明格式。数据应如何表示为要输入的数据结构fftn
?
这是我迄今为止尝试测试该功能的方法:
import numpy as np
import random
import matplotlib.pyplot as plt
DATA = np.zeros((100,3))
for i in range(len(DATA)):
DATA[i,0] = random.uniform(-1,1)
DATA[i,1] = random.uniform(-1,1)
DATA[i,2] = random.uniform(-1,1)
FFT = np.fft.fftn(DATA)
PS = abs(FFT)**2
plt.plot(PS)
plt.show()
题为的数组DATA
是一个模拟数组,最终的形状是 100,000 x 3。代码的输出给了我类似的东西:
如您所见,我认为这给了我三个 1D 功率谱(我的数据的每列 1 个),但实际上我想要一个功率谱作为半径的函数。
有没有人知道计算功率谱的任何建议或替代方法/包(我什至会满足于两点自相关函数)。