高斯的FFT;不确定在何处/如何插入值的print语句

时间:2013-12-14 06:52:31

标签: c++ printf

所以,我刚刚开始使用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中有太多参数

1 个答案:

答案 0 :(得分:0)

您可以在fftw_execute之后和fftw_free之前将打印代码放在任何位置。

请注意,你的x分配有一个错误 - 你需要使用w和h作为大小,而不是i和j。虽然仔细检查x甚至没有在你的代码中使用,所以你应该可以摆脱这种分配。

另请注意,您的代码似乎纯粹是C,而不是C ++ - 您应该将其编译为C而不是强制转换malloc的结果。