矩形阵列:Matlab dct2与fftw_平面图_r2r_2d与fftw_REDFT10不匹配

矩形阵列:Matlab dct2与fftw_平面图_r2r_2d与fftw_REDFT10不匹配,matlab,fftw,dct,multidimensional-array,Matlab,Fftw,Dct,Multidimensional Array,对于矩形阵列,使用fftw的r2r变换和MATLAB的dct2进行二维DCT得到的结果是完全不同的 假设in是一个mxn矩形阵列。我用两种方法计算二维DCT 通过C扩展使用FFTW的r2r转换 fftw_平面p=fftw_平面r2r_2d(m、n、in、out、fftw_REDFT10、FTW_REDFT10、fftw_患者) 使用MATLAB:dct2(in) 当m=n时,这两个结果的不同之处在于一些简单的标度数与sqrt(m*n)成比例。但是当m和n不相等时,这两个结果似乎并没有联系 是否有

对于矩形阵列,使用fftw的r2r变换和MATLAB的dct2进行二维DCT得到的结果是完全不同的

假设
in
是一个
mxn
矩形阵列。我用两种方法计算二维DCT

  • 通过C扩展使用FFTW的r2r转换
  • fftw_平面p=fftw_平面r2r_2d(m、n、in、out、fftw_REDFT10、FTW_REDFT10、fftw_患者)

  • 使用MATLAB:
    dct2(in)
  • m=n
    时,这两个结果的不同之处在于一些简单的标度数与
    sqrt(m*n)
    成比例。但是当
    m
    n
    不相等时,这两个结果似乎并没有联系


    是否有任何简单的转换将fftw的输出转换为MATLAB的dct2的输出?

    回答我自己的问题:MATLAB按顺序存储矩阵,而fftw(使用C)希望矩阵采用行主格式。因此,
    fftw\u plan\u r2r\u 2d
    的前两个参数应该交换。也就是说,代码应该是:

    fftw_plan p = fftw_plan_r2r_2d(n, m,in,out, FFTW_REDFT10, FTW_REDFT10, FFTW_PATIENT);
     fftw_execute(p);
    

    我为此浪费了很多天。你不知道我有多感激。谢谢你,伙计!
    fftw_plan p = fftw_plan_r2r_2d(n, m,in,out, FFTW_REDFT10, FTW_REDFT10, FFTW_PATIENT);
     fftw_execute(p);