理解Matlab的FFT2函数

信息处理 fft matlab 矩阵
2022-02-22 01:00:28

我试图了解当我们在 matlab 中对矩阵进行 FFT2 时会发生什么。

首先看看这个简单的例子,

a=ones(8); %8x8 Matrix of Ones
fft2(a)

它将生成以下输出,

    64     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0

在上面的矩阵中,64是所有矩阵值的总和,它是DC系数。这是否意味着 64 计算为8*8 = 64 ?

现在是实际问题,我生成了一个 4,4 的矩阵,

   a = [zeros(4,2) ones(4,2)]

% 0     0     1     1
% 0     0     1     1
% 0     0     1     1
% 0     0     1     1

前 4 行和 2 列是 0,而其余的是 1,如上所示。

现在,如果我采用它的 FFT2,

    fft2(a)

它生成以下输出,

  8.0000            -4.0000 + 4.0000i         0            -4.0000 - 4.0000i
        0                  0                  0                  0          
        0                  0                  0                  0          
        0                  0                  0                  0          

根据这本书,输出中显示的值是直流系数,它确实是所有矩阵值的总和。

在前面的例子中,很容易计算 DC 系数,但在这个例子中,这些值是如何生成的?

  8.0000            -4.0000 + 4.0000i         0            -4.0000 - 4.0000i

如果我计算fft而不是fft2它会给出以下输出

%FFT -> DFT of Vector
%FFT2 -> DFT of Matrix
 0     0     4     4
 0     0     0     0
 0     0     0     0
 0     0     0     0
1个回答

fft()函数计算其输入参数的一维 FFT如果输入参数是一个向量,那么操作很容易理解;输出只是对输入有效计算离散傅里叶变换的结果。如果输入是矩阵,则与许多 MATLAB 函数一样,每一列都被视为单独的一维信号并单独进行变换。因此,n- 输出矩阵的第 1 列对应于n- 输入矩阵的第 列。

fft2()函数计算矩阵的二维 FFT设想这种操作的一种方法是对输入矩阵的每一列进行标准的一维 FFTA产生暂时的结果B. 然后,对每一行进行一维 FFTB产生结果C. 矩阵C然后将是 A 的二维 FFT 的结果。二维变换(尽管通常不是 FFT)通常用于图像和视频压缩算法。