4x4 棋盘矩阵的 DCT - 正确的结果是什么?

信息处理 dct
2022-02-10 22:34:03

我正在尝试找出 4x4 棋盘矩阵的 DCT(我们称之为 A)和一个矩阵(我们称之为 B)的正确解决方案。所以 A 是:

   0   1   0   1
   1   0   1   0
   0   1   0   1
   1   0   1   0

B 是:

   1   1   1   1
   1   1   1   1
   1   1   1   1
   1   1   1   1

使用 Octave fordct(A)我得到:

   1.00000   1.00000   1.00000   1.00000
  -0.38268   0.38268  -0.38268   0.38268
   0.00000   0.00000   0.00000   0.00000
  -0.92388   0.92388  -0.92388   0.92388

对于dctmtx(4) * A * transpose(dctmtx(4))(应该是等价的)我得到:

   2.00000   0.00000  -0.00000  -0.00000
   0.00000  -0.29289  -0.00000  -0.70711
  -0.00000  -0.00000   0.00000  -0.00000
  -0.00000  -0.70711  -0.00000  -1.70711

然后dct(B)

   2   2   2   2
   0   0   0   0
   0   0   0   0
   0   0   0   0

并且dctmtx(4) * B * transpose(dctmtx(4))

   4   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0

这是怎么回事?哪个是对的?

1个回答

据我所知,有两个小错误。首先,您应该使用 dct2() 而不是 dct()。其次,您不应该使用“转置”功能,因为您希望 DCT 矩阵不仅转置而且还共轭。因此,您应该执行以下操作:

T=dctmtx(4);DCTB=TBT
这应该等于dct2(B).

编辑:正如 Peter K. 正确指出的那样,DCT 矩阵是实值的,因此“转置”操作和 ' 操作确实给出了相同的结果。所以我只注意到一个小错误......