代码之家  ›  专栏  ›  技术社区  ›  four_lines

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

  •  4
  • four_lines  · 技术社区  · 6 年前
    function [output1, output2] = fft2D(input)
    
       output1 = input';
       output1 = fft(output1);
       output1 = output1';
       output1 = fft(output1);
    
       output2 = fft2(input);
    end
    

    所以我在输出2中计算 input 在输出1中,相同的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
    

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

    1 回复  |  直到 6 年前
        1
  •  5
  •   jodag    6 年前

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