【问题标题】:fttw3 create 2D plan partially failsfttw3 创建 2D 计划部分失败
【发布时间】:2013-02-08 16:58:30
【问题描述】:

我对 FastFourier 有疑问... (FFTW3)

100x100 样本的数据 > 使用 FFTW3 转换为复频域 后来我想使用反向变换

远期计划:

fftw_plan fftw_plan_dft_r2c_2d(int n0, int n1,
                                double *in, fftw_complex *out,
                                unsigned flags);

逆像这样

fftw_plan fftw_plan_dft_c2r_2d(int n0, int n1,
                                fftw_complex *in, double *out,
                                unsigned flags);

这是我的代码:

int ncols = 100;  // a 100x100 picture
int nrows = 100; 
int nccols = ncols/2+1;

// 复合体必须按照 n/2+1 分配 // http://www.fftw.org/doc/Multi_002dDimensional-DFTs-of-Real-Data.html

double * Aa = (double*)fftw_malloc(sizeof(double)*ncols*nrows);
fftw_complex * Af = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*nccols*nrows);
double * Ba = (double*)fftw_malloc(sizeof(double)*ncols*nrows); 
fftw_complex * Bf = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*nccols*nrows);
double * Bc = (double*)fftw_malloc(sizeof(double)*ncols*nrows); 

fftw_plan forwardA = fftw_plan_dft_r2c_2d(nrows,ncols,Aa,Af,FFTW_FORWARD | FFTW_ESTIMATE); 
fftw_plan backwardA = fftw_plan_dft_c2r_2d(nrows,ncols,Af,Aa,FFTW_BACKWARD | FFTW_ESTIMATE); 
fftw_plan forwardB = fftw_plan_dft_r2c_2d(nrows,ncols,Ba,Bf,FFTW_FORWARD | FFTW_ESTIMATE); 
fftw_plan backwardB = fftw_plan_dft_c2r_2d(nrows,ncols,Bf,Bc,FFTW_BACKWARD | FFTW_ESTIMATE);

这与这里的代码完全相同:http://werner.yellowcouch.org/Papers/subimg/index.html

我现在的问题是forwardA和forwardB指向0x0,而backwardA和backwardB是有效的。

知道为什么会发生这种情况吗?

【问题讨论】:

  • 好的...我发现了问题。 r2c 函数只有一个可能的方向。所以显然图书馆不喜欢额外的信息:D SOLUTION: FTW_FORWARD as flag is not necessary

标签: fft fftw


【解决方案1】:

试试这个:

fftw_plan forwardA = fftw_plan_dft_r2c_2d(nrows,ncols,Aa,Af,FFTW_ESTIMATE);

应该可以的。

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2014-07-11
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多