与跨行和列执行的多个fft(1D)相比,Matlab fft2(2D)给出了互换的值

问题描述 投票:4回答:1
function [output1, output2] = fft2D(input)

   output1 = input';
   output1 = fft(output1);
   output1 = output1';
   output1 = fft(output1);

   output2 = fft2(input);
end

因此,我在output2中计算input的2D FFT,并在output1中计算input的相同2D FFT。 fft()对于2D矩阵应用跨列向量的FFT。所以上面我将它应用于行,然后应用于列。

但是对于随机矩阵

 [1   1   4   1; 
  12  13  124 1;
  12  2   2   1;
  1   1   1   0]

我的output1是:

   1.0e+02 *

   1.7700 + 0.0000i  -1.0500 + 0.1400i   1.3700 + 0.0000i  -1.0500 - 0.1400i
  -0.1000 - 1.4700i  -0.0200 + 1.1100i  -0.0800 - 1.2100i  -0.2400 + 1.1300i
  -1.2900 + 0.0000i   1.1900 - 0.1200i  -1.0900 + 0.0000i   1.1900 + 0.1200i
  -0.1000 + 1.4700i  -0.2400 - 1.1300i  -0.0800 + 1.2100i  -0.0200 - 1.1100i

而我的output2

   1.0e+02 *

   1.7700 + 0.0000i  -1.0500 - 0.1400i   1.3700 + 0.0000i  -1.0500 + 0.1400i
  -0.1000 - 1.4700i  -0.2400 + 1.1300i  -0.0800 - 1.2100i  -0.0200 + 1.1100i
  -1.2900 + 0.0000i   1.1900 + 0.1200i  -1.0900 + 0.0000i   1.1900 - 0.1200i
  -0.1000 + 1.4700i  -0.0200 - 1.1100i  -0.0800 + 1.2100i  -0.2400 - 1.1300i

它们是相同的值,但在不同的位置互换!这让我疯狂很长一段时间,因为从我(重新)在线阅读可以通过在行和列之间应用1D FFT来执行2D FFT。任何帮助或建议都会很棒!

matlab fft
1个回答
5
投票

使用output1 = output1.'而不是output1 = output1',因为后者给出共轭转置,你想要转置。

function [output1, output2] = fft2D(input)
   output1 = input.';
   output1 = fft(output1);
   output1 = output1.';
   output1 = fft(output1);

   output2 = fft2(input);
end

或者,您可以指定尺寸以进行FFT。

function [output1, output2] = fft2D(input)
   output1 = fft(input,[],1);
   output1 = fft(output1,[],2);

   output2 = fft2(input);
end
© www.soinside.com 2019 - 2024. All rights reserved.