如何在 Matlab 中计算 FFT2

How FFT2 is computed in Matlab

所以我有这个矩阵 M=(50,50,250),我想获得沿第 3 维 = 250 的切片 S=(50,50) 的 FFT2。

假设我有

FT = fftshift(fft2(M));

这是在按照我的意愿计算FT吗?

因为在函数描述中它说 函数 returns X 的每个更高维切片的二维 DFT。例如,如果 size(X) = [100 100 3 ],然后 fft2 计算 X(:,:,1)、X(:,:,2) 和 X(:,:,3).

的 DFT

因此,我假设它正在计算沿第一维 = 50 的切片 S=(50x250) 的 FT。

谁能帮我解决这个问题?

我认为从文档中已经很清楚了。 fft2 计算 250 个 2D DFT,M 中的每个 50x50 切片一个。所以你的 FT(:, :, i) 是 M(:, :, i) 的 2D DFT。它的行为与:

FT = zeros(size(M));
for i = 1 : size(M, 3)
    FT(:, :, i) = fft2(M(:, :, i));
end

你可以这样验证(error应该很小):

FT1 = fft2(M);
error = norm(abs(FT1(:) - FT(:)));

然而,fftshift的行为与你想要的不一致。您应该改为使用 fftshift 的第二个参数沿特定维度(在您的情况下为 1 和 2)移动结果:

FT = fftshift(fftshift(fft2(M), 1), 2);