如何获得R2C fftw的所有复杂值

时间:2016-04-25 14:15:23

标签: c fftw

我使用fftw lib来计算2d r2c拟合,但是这个函数只给出了n *(n / 2 + 1)个元素,我需要所有的值才有办法获得所有的n * n个元素?非常感谢。这是我的代码:

#include <stdio.h>
#include<Windows.h>
#include <fftw3.h>
#include<time.h>
#include<math.h>

void fourierForward(float *in,fftwf_complex *Out,int N)
            {
            int i,err;
            fftwf_plan plan,planInv;
            /*on calcule le plan d'exécution*/
            plan=fftwf_plan_dft_r2c_2d ( N, N, in, Out, FFTW_ESTIMATE );
            //planInv=fftwf_plan_dft_c2r_2d ( N, N, Out,out,  FFTW_ESTIMATE );
            fftwf_execute(plan);
            //fftwf_execute(planInv);
            fftwf_destroy_plan(plan);
            //fftwf_destroy_plan(planInv);
            //fftwf_free(Out);
            } 
int main()
            {
            const int n=500;
            int i,j,k,l;
            fftwf_complex *Out= (fftwf_complex*) fftwf_malloc((n/2+1)*n*sizeof(fftwf_complex));
            FILE *f;
            float fft[500][500];
            float *in=(float*) fftwf_malloc(sizeof(float)*n*n);
            FILE *pf=fopen("im.txt","r");

            for(i=0;i<n;i++)
            {
             for(j=0;j<n;j++)
              {
               fscanf(pf,"%f ",&in[i*n+j]);
             }
            }
            for (i = 0; i < n*(n/2+1); i++)
            {
                Out[i][0]=0.0f;
                Out[i][1]=0.0f;
            }
            fclose(pf);
            fourierForward(in,Out,n);
            f=fopen("RealPart.txt","w");
            for(i=0;i<n;i++)
            {
             for(j=0;j<n/2+1;j++)
              {

               fft[i][j]=Out[i*(n/2+1)+j][0];

              }
            }

            for(i=1;i<=(n-1)/2;i++)
            {
                fft[0][n-i]=fft[0][i];
            }

            for(i=1;i<n/2+1;i++)
            {
             for(j=1;j<n;j++)
              {
                    fft[n-j][n-i]=fft[j][i];
             }
            }
            for(i=0;i<n;i++)
            {
             for(j=0;j<n;j++)
              {
                    fprintf(f,"%f ",fft[i][j]);
              }
             fprintf(f,"\n");
            }
            system("pause");
            fftwf_free(Out);
            fclose(f);
            return 0;

            }

最好的问候。

0 个答案:

没有答案