我需要计算一个结构的三维傅里叶变换,我有它们的[x,y,z]坐标。我想插值到一个均匀的网格的最小间距的点和使用fft,但这在内存中是不切实际的,所以fft
不能使用。我的[x,y,z]数据中的一个样本是:
xyz=[ 23.1860 44.9710 5.9280
25.5370 44.0090 4.9960
24.5030 44.5890 6.2280
20.0150 46.4080 7.9110
24.9910 44.6760 7.5330
4.8660 44.7120 8.6830
36.7170 33.7440 6.5570
11.1510 40.0590 5.8120
29.2550 34.8750 10.0850
5.4230 48.8200 12.7380
38.2020 35.7590 1.3260 ];
非常感谢您的建议
不幸的是,使FFT如此高效的算法根本不适用于非均匀情况。而FFT是O(N log N),非均匀情况通常是O(N^2)(据我所知)。我所知道的所有NUFFT技术基本上都依赖于插值,所以你不太可能找到一种根本不同的方法来实现它。
你的网格几何形状是什么(我看不清你为间距模式提供的数组)?如果一个或两个维度是均匀的,您可以对它们单独应用1或2D FFT,然后仅对第三个维度进行插值。球坐标中的许多问题都有效地做到了这一点:它们沿着恒定纬度的线使用FFT,因为纬度通常不均匀地间隔以使用高斯正交,而经度是均匀的。
格林加德,L., &李家英(2004)。加速非均匀快速傅里叶变换。
我自己没有使用过这个,但是可以考虑使用开姆尼茨工业大学数学系网站上发布的NFFT。它将O(N^2)的需求减少到O(NlogN),就像FFT的情况一样。此外,它现在还包括Matlab类来与mex文件进行接口。
您可以在网站上下载一些演示如何与MATLAB交互的示例,faq中有关于如何在Windows+MATLAB中使用的说明(如果您是)。
NFFT需要初始化一个计划,并预先计算一些事情来提高性能。它看起来需要一些努力才能熟悉,但可能对你很有帮助。
根据GPL授权