c - C 中的 FFTW2 例程问题

标签 c fftw

我目前正在使用 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);

关于c - C 中的 FFTW2 例程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5958766/

相关文章:

c - 为什么下面的程序输出 -80?

c - 即使在类型转换之后,是否每次都需要取消引用 void 指针?

c - 解密 (*(void(*)())0)()

c++ - fftw 中的 convfft() 调用导致崩溃。是关于不正确的库链接吗?

simd - FFTW 是否动态确定 SIMD 版本?

c - 在函数内部使用 fftw3 会产生段错误

c - 按顺序从线程写入位序列

c - 有没有办法用 C ping 一个特定的 IP 地址?

c++ - 使用 FFTW 进行实时脉冲响应卷积——结果听起来 IR 是对称的

c - 使用 FFTW 拆分数组时出现段错误