【问题标题】:How FFT2 is computed in MatlabMatlab中如何计算FFT2
【发布时间】:2016-07-19 22:00:51
【问题描述】:

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

假设我愿意

FT = fftshift(fft2(M));

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

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

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

谁能帮我解决这个问题?

【问题讨论】:

  • 这是按我的意愿计算 FT 吗?是的。因此,我假设它正在计算沿第 1 维 = 50 的切片 S=(50x250) 的 FT。某种意义上,它正在计算沿第 3 维 250 帧/单位的切片 50*50。
  • Arg,fftshift! Prakhar 的回答告诉你如何使用它的第二个参数来告诉它要移入哪个维度,但是我遇到了很多错误,因为我忘记了 fftshift 的第二个参数,我自己创建了 i/fftshift 函数,如果你不这样做,就会出错'当第一个参数是 2D/ND 数组时,不要给它第二个参数!
  • 但是 matlab fftshift 函数不是已经适用于 fft2,而您不必为每个维度单独执行这些步骤吗?

标签: matlab fft dimension


【解决方案1】:

我认为从文档中很清楚。 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多