所以我有这个矩阵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。
有人可以向我说清楚吗?
答案 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);