我很感兴趣用Python计算一个由100,000个3D空间的粒子系统的功率谱。目前我发现Numpy中有一组函数(包括fft、fftn等)能够计算离散傅里叶变换,其中绝对值的平方就是功率谱。我的问题在于如何表示我的数据结构,实际上这可能非常简单。
我的数据结构是一个形状为(n,2)的数组,其中n是我拥有的粒子数量,每列代表n个粒子的x、y和z坐标。我认为我应该使用的函数是fftn()函数,它可以计算n维数组的离散傅里叶变换,但它没有说明格式。数据应该如何表示为一个数据结构,以传递给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行和3列的形状。代码的输出给我了如下图所示的内容:
从图中可以看出,我认为这给了我三个1D功率谱(每列数据一个),但实际上我想得到一个随半径变化的功率谱。
是否有人有任何建议或其他方法/软件包来计算功率谱(甚至可以接受两点自相关函数)。