这可能看起来像一个简单的问题,但我一直试图在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]。它没有。
答案 0 :(得分:0)
我做了最愚蠢的事情 - 在我发布的if条件中:
i == j == 0
而不是i == 0&amp;&amp; j == 0
当我修复它时,它有效。非常感谢你帮助我。