我正在尝试编写一个简单的FFTW例程(版本2),我认为我只是关闭了骨头,但是当我调用fftwnd_one函数时,我遇到了持续的段错误(我是做一维变换,但我正在使用n维代码来实现模块化。但是,我相信我的问题在于计划的制定;任何人都可以提供一些有关此代码有什么问题的见解?如果是的话,我会非常感激 - 谢谢!
作为参考,我在这里使用的函数是sin(x)。我意识到并非所有的数学运算都已实现,我只是想让FFTW2库先运行,然后才能使数据变得有用。
#include <stdio.h>
#include <fftw.h>
#include <math.h>
#include <complex.h>
int main(){
int i;
fftw_complex in[8];
fftwnd_plan p;
const int *n;
int temp = (int)pow(2, 2)*pow(3,2)*pow(5,1)*pow(7,1)*pow(11,1)*pow(13,0);
n = &temp;
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]);
}
return 0;
}
答案 0 :(得分:1)
fftwnd_create_plan
的前两个参数看起来完全错误。您似乎只想为大小为8的1D FFT创建一个计划(如果您只需要1D FFT,这会引发您使用fftwnd_create_plan的原因?)。电话应该是这样的:
const int n = 8;
p = fftwnd_create_plan(1, // rank = 1, i.e. 1D
&n, // size of first (and only) dimension = n = 8
FFTW_FORWARD,
FFTW_ESIMATE | FFTW_IN_PLACE);
答案 1 :(得分:0)
当它仅指向一个整数时,您似乎将n视为一个数组。例如,不应该这样:
printf("%d\n", n[i]);
是:
printf("%d\n", in[i]);