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

fou*_*nes 4 matlab fft

function [output1, output2] = fft2D(input)

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

   output2 = fft2(input);
end
Run Code Online (Sandbox Code Playgroud)

所以我在output2中计算2D FFT input和在输出1中的相同2D FFT input.fft()对于2D矩阵,跨越列向量应用FFT.所以上面我将它应用于行,然后应用于列.

但是对于随机矩阵

 [1   1   4   1; 
  12  13  124 1;
  12  2   2   1;
  1   1   1   0]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

而我的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
Run Code Online (Sandbox Code Playgroud)

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

jod*_*dag 5

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

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

   output2 = fft2(input);
end
Run Code Online (Sandbox Code Playgroud)

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

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

   output2 = fft2(input);
end
Run Code Online (Sandbox Code Playgroud)

  • @LuisMendo - 这是给你的。 (2认同)
  • @rayryeng [list](/sf/answers/1760522361/)还有一个!.-) (2认同)
  • @LuisMendo 哈哈,这让我感觉好多了:P (2认同)