所以,我刚刚开始使用FFTW,并且我在高斯曲线上尝试了它。一切都很好(直接完成,还没有试过调用make)但是我希望它能够打印我的值,而且我不确定在我的代码中将这些语句放在哪里;我也是使用C / C ++的新手。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
#include <math.h>
#include "fftw3.h"
int main(int argc, const char* argv[])
{
double complex *in, *out, *data;
fftw_plan p;
int i,j;
int w=20;
int h=20;
double a = 2;
double *x=malloc(i*j*sizeof(double));
in = (double complex*) fftw_malloc(sizeof(double complex) * w * h);
out = (double complex*) fftw_malloc(sizeof(double complex) * w * h);
for(i=0; i<w; i++){
for(j=0; j<h; j++){
int temp = i*i+j*j;
in[i*h+j] = exp(-(temp)/(a*a));
}
}
p = fftw_plan_dft_2d(w, h, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(p);
fftw_destroy_plan(p);
fftw_free(in);
fftw_free(out);
return 0;
我的尝试:
printf("x=[");
for(i=0; i<w; i++) printf("%15.7g",x[i]);
printf("];\w\w");
printf("y=[");
for(j=0; j<h; j++) printf("%15.7g + %15.7gi", 1./((double) w)*creal(out[i], 1./((double) h)*cimag(out[j]);
printf("];\h\h");
第二次尝试:
printf("x=[");
for(i=0; i<w; i++) printf("%15.7g",x[i]);
printf("]");
printf("y=[");
for(j=0; j<h; j++) printf("%15.7g + %15.7gi", 1./((double) w)*creal(out[i], 1./((double) h)*cimag(out[j])));
printf("]");
我现在得到的唯一错误信息是我在creal中有太多参数
答案 0 :(得分:0)
您可以在fftw_execute之后和fftw_free之前将打印代码放在任何位置。
请注意,你的x分配有一个错误 - 你需要使用w和h作为大小,而不是i和j。虽然仔细检查x甚至没有在你的代码中使用,所以你应该可以摆脱这种分配。
另请注意,您的代码似乎纯粹是C,而不是C ++ - 您应该将其编译为C而不是强制转换malloc的结果。