简体   繁体   English

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

[英]Fourier transform in 3 dimensions on a non uniform grid in matlab

I need to calculated a 3D Fourier transform of a structures I have their [x,y,z] coordinates. 我需要计算具有[x,y,z]坐标的结构的3D傅里叶变换。 I thought of interpolating to a uniform grid of the smallest spacing between the points and use fft, but that turned to be impractical in memory, so fft can't be used. 我想到插入点之间最小间距的均匀网格并使用fft,但这在记忆中变得不切实际,因此不能使用fft A sample from my [x,y,z] data is: 来自我的[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 ];

Would appreciate your advise 非常感谢您的建议

Unfortunately, the algorithms that make the FFT so efficient simply don't apply to the non-uniform case. 不幸的是,使FFT如此有效的算法不适用于非均匀情况。 Whereas the FFT is O(N log N), the non-uniform case is typically O(N^2) (as far as I'm aware). 尽管FFT是O(N log N),但非均匀情况通常是O(N ^ 2)(据我所知)。 All of the NUFFT techniques that I'm aware of essentially rely on interpolation, so you're unlikely to find a fundamentally different way of doing it. 我所知道的所有NUFFT技术基本上都依赖于插值,所以你不太可能找到一种根本不同的方法。

What is your grid geometry (I can't eyeball the arrays you've supplied for spacing patterns)? 你的网格几何是什么(我无法看到你为间距模式提供的数组)? If one or two of the dimensions are uniform, you could apply the 1 or 2D FFT on those independently, and then interpolate solely for the third dimension. 如果一个或两个维度是均匀的,您可以单独对这些维度应用1或2D FFT,然后仅针对第三维进行插值。 Many problems in spherical coordinates effectively do this: they use the FFT along lines of constant latitude, because the latitudes are usually spaced non-uniformly to use Gaussian quadrature, while the longitudes are uniform. 球坐标中的许多问题有效地做到了这一点:它们沿着恒定纬度的线使用FFT,因为纬度通常非均匀地间隔以使用高斯正交,而经度是均匀的。

Greengard, L., & Lee, JY (2004). Greengard,L。,&Lee,JY(2004)。 Accelerating the nonuniform fast Fourier transform. 加速非均匀快速傅里叶变换。 SIAM review, 46(3), 443-454. SIAM评论,46(3),443-454。

I've not used this myself, but consider using the NFFT posted on Chemnitz University of Technology Department of Mathematics site. 我自己没有用过这个,但考虑使用在开姆尼茨理工大学数学系网站上发布的NFFT It reduces the O(N^2) requirement to just O(NlogN) as in the FFT case. 与FFT情况一样,它将O(N ^ 2)要求降低到O(NlogN)。 Also, it now includes Matlab classes to interface with the mex files. 此外,它现在包括与mex文件接口的Matlab类。

You can download some examples on the site that show to to interact with MATLAB and the faq has instructions on how to use in Windows+MATLAB (if you are). 您可以在网站上下载一些示例,以便与MATLAB进行交互,并且faq有关于如何在Windows + MATLAB中使用的说明(如果您有)。

NFFT requires the initialization of a plan and precomputes several things to increase performance. NFFT需要初始化计划并预先计算好几项以提高性能。 It looks like it will take some effort to get familiar with but may be very helpful to you. 看起来需要花些精力才能熟悉,但可能对您非常有帮助。

It is licensed under the GPL. 它是根据GPL许可的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM