如何在Matlab中计算FFT2

时间:2016-07-19 13:16:21

标签: matlab fft dimension

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

我们说我做了

  

FT = fftshift(fft2(M));

这是否按照我的要求计算FT?

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

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

有人可以向我说清楚吗?

1 个答案:

答案 0 :(得分:3)

我认为从文档中可以清楚地看到。 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);