C的FFTW2例程有问题

| 我目前正在使用FFTW2(西方最快的傅立叶变换)库,并且在Fortran中编写了成功的例程之后,我继续使用C。但是,当我尝试使用数据分配时,遇到了一些麻烦输入要转换的数据(即sin(x)的值)。目前,我的代码是:
#include <stdio.h>
#include <fftw.h>
#include <math.h>
#include <complex.h>

void compute_fft(){
  int i;
  const int n[8];
  fftw_complex in[8];
  fftwnd_plan p;

  in[0]->re = 0;
  in[1]->re = (sqrt(2)/2);
  in[2]->re = 1;
  in[3]->re = (sqrt(2)/2);
  in[4]->re = 0;
  in[5]->re = -(sqrt(2)/2);
  in[6]->re = -1;
  in[7]->re = -(sqrt(2)/2);

  for(i = 0; i < 8; i++){
    (in[i])->im = 0;
  }

  p = fftwnd_create_plan(8, n, FFTW_FORWARD, FFTW_ESIMATE | FFTW_IN_PLACE);
  fftwnd_one(p, &in[0], NULL);
  fftwnd_destroy_plan(p);

  printf(\"Sin\\n\");
  for(i = 0; i < 8; i++){
    printf(\"%d\\n\", n[i]);
  }
}
我一直将此http://fftw.org/fftw2_doc/链接用于文档/教程用途,目前我的错误是\“ a-> a(具有afftw_complexa)的无效类型参数\”和\' ->和fftw_complex两侧的a \'字符都在其上方有克拉。我使用的基本模式与我在Fortran中编写此代码时所用的模式相同,并且我似乎正在按照本教程进行操作,实际上是我在搞砸语法的分配。记录一下,我正在使用的编译器是nvcc,如果它有所作为(我以前尝试过gcc)。如果这里以前有人在C中使用过FFTW2,您能帮助纠正我的错误吗?谢谢!     
已邀请:
可能是因为数组\“ in \”是fftw_complex的数组,所以与其使用in [0]-> re = 0,不如使用in [0] .re =0。除非再次对fftw_complex进行类型定义,否则到一些数组。
fftw_complex in[8];
in[0].re = 0;
in[1].re = (sqrt(2)/2);
in[2].re = 1;
in[3].re = (sqrt(2)/2);
in[4].re = 0;
in[5].re = -(sqrt(2)/2);
in[6].re = -1;
in[7].re = -(sqrt(2)/2);
    
由于ffwt_complex是double [2],它是实数据的第一维([0]),而是虚数数据的第二([1]),因此安全的解决方案是:
  in[0][0] = 0;
  in[1][0] = (sqrt(2)/2);
  in[2][0] = 1;
  in[3][0] = (sqrt(2)/2);
  in[4][0] = 0;
  in[5][0] = -(sqrt(2)/2);
  in[6][0] = -1;
  in[7][0] = -(sqrt(2)/2);

 for(i = 0; i < 8; i++){
   in[i][1] = 0;
  }
    

要回复问题请先登录注册