多维数组的部分fft

Partial fft of multidimensional array

我有一个维度为 (NX,NY,NZ) 的 3D 数组,它表示物理 space 中的一个变量,比方说 velocities,取自 3D 域中的模拟。

1) 我只想对X和Z两个维度进行傅立叶变换,这种情况下应该如何使用内置函数fft?在某些时候,我也想回到物理 space,但仅限于 X,所以同样的问题也适用。

2) 我读到 FFTW 仅使用 2*N/3 个点,我应该将 NX 和 NZ 指定为保留模式数还是更少?

3) 使用FFTW包时,定义傅里叶变换的积分前的系数有问题吗?这个包是否假定我的域是 2pix2pix2pi?

1°) 2D FFT 的函数是 fft2,它默认应用于数组的前两个维度。也就是说,fft2(velocities) 将为您提供一个 3D 数组,其中 NZ 沿维度 XY[=18 进行傅里叶变换=]

为了沿其他维度进行 FFT,您必须手动将 2D FFT 分解为两个 1D FFT。 fft 将默认沿维度 1 工作,并生成与输入中一样多的样本。 fft(X[],n) 做同样的事情,但是沿着维度 n.

因此,您可以使用以下命令沿维度 X 和 Z 计算 3D 阵列的 2D FFT:

my_FFT = fft(fft(velocities),[],3);

2°) 输出的样本和输入的样本一样多。

3°) 我相信按数组大小的归一化完全应用于反向变换,而不是直接变换。

fft([1 0 0 0 0 0])
ans =
     1     1     1     1     1     1

为了保持标准化,应应用系数 sqrt(NX*NZ)(进行 FFT 时乘以,进行 IFFT 时除法)。