项目场景:
C++中,对含有较多数据的二维实数矩阵Eigen::MatrixXd进行傅里叶变换时,ftw_plan_dft_r2c_2d()会比fftw_plan_dft_2d()快一些,但在使用ftw_plan_dft_r2c_2d()时,发现要输出与输入同等大小的矩阵时会缺失一些值(共轭值)。
问题描述
C++中,对含有较多数据的二维实数矩阵Eigen::MatrixXd进行傅里叶变换的时候,ftw_plan_dft_r2c_2d()如果输出与输入同等大小的矩阵时会缺失一些值(共轭值)。
1、C++使用fftw_plan_dft_2d()对实数矩阵进行傅里叶变换:先将MatrixXd赋值给MatrixXcd,然后再使用fftw_plan_dft_2d()。其输出结果和Matlab的结果相同。
#include <iostream>
#include <cmath>
#include "Eigen/Dense"
#include <opencv2/core/eigen.hpp>
#include "fftw3.h"
using namespace std;
using namespace Eigen;
int main() {
MatrixXd a(5, 6); //奇数行
a << 11, 18, 20, 16, 10, 14,
4, 1, 8, 29, 19, 21,
17, 27, 15, 9, 25, 5,
22, 7, 2, 24, 30, 23,