多维数组的部分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
沿维度 X 和 Y[=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 时除法)。
我有一个维度为 (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
沿维度 X 和 Y[=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 时除法)。