如何在 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);
所以我有这个矩阵 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);