解决MATLAB fft2()与其fftw_plan_dft_2d()C ++实现之间的数值差异

时间:2012-01-24 20:43:58

标签: c++ matlab fft fftw

我正在尝试使用OpenCV和FFTW3.3库在C ++中实现MATLAB fft2()和ifft2()函数。我已经能够成功移植代码,正确执行正向和反向转换。但是,MATLAB R2009a fft2()函数生成的dft矩阵的复数值与FFTW对应物的差别很大。我需要解决此问题以获得最佳性能。我在下面提供了我的C ++实现和示例输入/输出:

例如,使用以下代码调用上述fft2()函数:

cv::Mat im(2,2,CV_64FC2);

im.at<cv::Vec2d>(0,0)[0] = 1;
im.at<cv::Vec2d>(0,0)[0] = 0;
im.at<cv::Vec2d>(0,1)[1] = 1;
im.at<cv::Vec2d>(0,1)[1] = 0;
im.at<cv::Vec2d>(1,0)[0] = 1;
im.at<cv::Vec2d>(1,0)[1] = 0;
im.at<cv::Vec2d>(1,1)[0] = 1;
im.at<cv::Vec2d>(1,1)[1] = 0;
    int rows = im.rows;
int cols = im.cols;
cv::Mat imagefft(rows,cols,CV_64FC2);
imagefft = fft2(im);

对于x = [1 + 1i 1 + 1i; 1 + 1i 1 + 1i] fft2(x)提供

[4.0000 + 4.0000i 0; 0 0] fftw实现提供的地方,

[ - 6.27744e + 066-6.27744e + 066i 6.27744e + 066-6.27744e + 066i; -6.27744e + 066-6.27744e + 066i 6.27744e + 066-6.27744e + 066i]

我需要了解这两个矩阵之间的关系,如果有的话。

期待您的建议。

提前致谢。

0 个答案:

没有答案