FFTW - 在不首先计算FFT的情况下计算IFFT

时间:2014-08-13 09:38:23

标签: fft fftw ifft

这可能看起来像一个简单的问题,但我一直试图在FFTW页面上找到答案而我无法做到。

我为前向和后向变换创建了FFTW计划,我直接将一些数据输入到fftw_complex * fft结构中(而不是先从输入数据计算FFT)。然后我在此计算IFFT,结果不正确。我这样做了吗?

编辑:所以我做的是以下内容:

int ht=2, wd=2;
fftw_complex *inp  = fftw_alloc_complex(ht * wd);
fftw_complex *fft  = fftw_alloc_complex(ht * wd);
fftw_complex *ifft = fftw_alloc_complex(ht * wd);

fftw_plan plan_f = fftw_plan_dft_1d(wd *ht, inp, fft,  FFTW_FORWARD,  FFTW_ESTIMATE);
fftw_plan plan_b = fftw_plan_dft_1d(wd * ht, fft, ifft, FFTW_BACKWARD, FFTW_ESTIMATE );

for(int i =0 ; i < 2; i++)
{
    for(int j = 0; j<2; j++)
    {
        inp[wd*i + j][0] = 1.0;
        inp[wd*i + j][1] = 0.0;
    }
}

//    fftw_execute(plan_f);

for(int i =0 ; i < 2; i++)
{
    for(int j = 0; j<2; j++)
    {
        fft[wd*i + j][1] = 0.0;
        if(i == j == 0)
            fft[wd*i+j][0] = 4.0;
        else
            fft[wd*i+j][0] = 0.0;

        std::cout << fft[wd*i+j][0] << " and " << fft[wd*i+j][1] << std::endl;
    }
}

fftw_execute(plan_b);
for(int i =0 ; i < 2; i++)
{
    for(int j = 0; j<2; j++)
        std::cout << ifft[wd*i+j][0]/(double)(wd*ht) << " and " << ifft[wd*i+j][1]/(double)(wd*ht) << std::endl;
}

这是完整的代码。 ifft应该返回实际部分[1 1 1 1]。它没有。

1 个答案:

答案 0 :(得分:0)

我做了最愚蠢的事情 - 在我发布的if条件中:

i == j == 0

而不是i == 0&amp;&amp; j == 0

当我修复它时,它有效。非常感谢你帮助我。