function [output1, output2] = fft2D(input)

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

   output2 = fft2(input);
end

所以我在 output2 中计算 input 的二维 FFT,在 output1 中计算 input 的相同二维 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。任何帮助或建议都会很棒!

最佳答案

使用 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

关于与跨行和列执行的多个 fft (1D) 相比,Matlab fft2 (2D) 给出了可互换的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49057222/

10-13 22:51