我有一个尺寸为(NX,NY,NZ)
的3D数组,它表示物理空间中的一个变量,比方说velocities
,该数组取自3D域中的模拟。
1)我只想对尺寸X和Z进行傅立叶变换,在这种情况下应如何使用内置函数fft
?在某些时候,我也想回到物理空间,但是只在X上,所以同样的问题也适用。
2)我读到FFTW仅使用2 * N / 3点,是否应将NX和NZ指定为保留模式数或更少?
3)使用FFTW软件包时,定义积分的傅立叶变换前面的系数是否有问题?此软件包是否假定我的域是2pix2pix2pi?
答案 0 :(得分:1)
1°)2D FFT的函数为fft2
,默认情况下将应用于数组的两个第一维。也就是说,fft2(velocities)
将为您提供3D数组,其中包含NZ
沿维度 X 和 Y
为了沿着其他维度进行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时除以除)。