FFTW3 DFT 2D总是返回NaN

FFTW3 DFT 2D always return NaN

本文关键字:返回 NaN DFT 2D FFTW3      更新时间:2023-10-16

我正在尝试使用FFTW3为真正的2D矩阵做DFT。这是我的代码片段:

size_t nyh = ny/2 + 1;
out = (fftw_complex*)fftw_malloc ( sizeof ( fftw_complex ) * nx * nyh );
plan_forward = fftw_plan_dft_r2c_2d ( nx, ny, in, out, FFTW_ESTIMATE );
fftw_execute ( plan_forward );

,其中indouble*,每个值的数量级为e-270。

我的问题是out总是包含-nan值。

有什么技巧可以得到正确的值吗?

谢谢


谢谢大家。

我正在运行的问题不是由于FFTW3库和我的代码是正确的,尽管它的弱点。

我的问题来自于我提供给cv::Mat图像发出的fftw_plan_dft_r2c_2d函数的输入。所以,我张贴的错误,我做了帮助任何人得到这个麻烦:)

我使用以下函数将cv::Mat转换为vector<vector<double> >:

static MatrixOfDouble _convertMat( cv::Mat& inMat)
{
    MatrixOfDouble result;
    for (int i = 0; i < inMat.rows; ++i)
    {
        std::vector<double> row;
        for (int j = 0; j < inMat.cols; ++j)
        {
            row.push_back(inMat.at<double>(i, j));
        }
        result.push_back(row);
    }
    return result;
}

然后线性化返回的矩阵来馈送dft函数。

但部分结果矩阵元素为NaN。

作为一个修复,我得到cv::Mat元素长而不是双:

row.push_back(inMat.at<long>(i, j));