我使用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;
}
最好的问候。