在matlab中非均匀网格上的3维傅里叶变换

时间:2013-02-27 16:48:11

标签: matlab fft non-uniform-distribution

我需要计算具有[x,y,z]坐标的结构的3D傅里叶变换。我想到内插到点之间最小间距的均匀网格并使用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 ];

非常感谢您的建议

2 个答案:

答案 0 :(得分:6)

不幸的是,使FFT如此高效的算法不适用于非均匀情况。尽管FFT是O(N log N),但非均匀情况通常是O(N ^ 2)(据我所知)。我所知道的所有NUFFT技术基本上都依赖于插值,所以你不太可能找到一种根本不同的方法。

你的网格几何是什么(我无法看到你为间距模式提供的数组)?如果一个或两个维度是均匀的,您可以单独对这些维度应用1或2D FFT,然后仅针对第三维进行插值。球坐标系中的许多问题有效地做到了这一点:它们沿着恒定纬度的线使用FFT,因为纬度通常是非均匀地间隔使用高斯正交,而经度是均匀的。

Greengard, L., & Lee, J. Y. (2004). Accelerating the nonuniform fast Fourier transform. SIAM review, 46(3), 443-454.

答案 1 :(得分:5)

我自己没有使用过这个,但考虑使用开姆尼茨理工大学数学系网站上发布的NFFT。与FFT情况一样,它将O(N ^ 2)要求降低到O(NlogN)。此外,它现在包括与mex文件接口的Matlab类。

您可以在网站上下载一些示例,以便与MATLAB进行交互,并且faq有关于如何在Windows + MATLAB中使用的说明(如果您有的话)。

NFFT需要初始化计划并预先计算几项以提高性能。看起来需要一些努力来熟悉,但可能对你很有帮助。

根据GPL许可。