我是在vs2003平台下用MFC编写的,其中fft用的是fftw函数,  
  double *in,*out1,*wind;//建立数组
fftw_complex *out,*in1,*fwind;//fft使用的复数数组
int n=Space.size();//这个数组由前面的vector生成
vector<vector<double> >tfr;//用两个vector构造成的矩阵
vector<double>line(n/4,0);//矩阵,进行初始化
in=(double*)malloc(sizeof(double)*n);
out1=(double*)malloc(sizeof(double)*n);
wind=(double*)malloc(sizeof(double)*n);
out=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*n);
in1=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*n);
fwind=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*n);//malloc分配空间
for(int i=0;i<n;i++)
{
in[i]=Space[i];//读入需要进行fft的实数值
}
fftw_plan p=fftw_plan_dft_r2c_1d(n,in,out,FFTW_ESTIMATE);//fft函数
fftw_execute(p);
  in1[0][0]=out[0][0];
in1[0][1]=out[0][1];
  for(int j=1;j<n/2+1;j++)
{
in1[j][0]=2*out[j][0];
in1[j][1]=2*out[j][1];
}
fftw_destroy_plan(p);
fftw_plan p1=fftw_plan_dft_c2r_1d(n,in1,out1,FFTW_ESTIMATE);
  fftw_execute(p1);//得到解析信号out1
for(int k=0;k<n;k++)//行数
{
for(int m=0;m<n/8;m++)
{
if((k-m<0)||(k+m>=n))
continue;
else{
line[m]=out1[k+m]*out1[k-m];
}   
}
for(int l=n/8;l<n/4;l++)
{
if((k+l-n/4<0)||(k-l+n/4>=n))
continue;
else{
line[l]=out1[k+l-n/4]*out1[k-l+n/4];
}
}
  for(int a=0;a<n/4;a++)
{
wind[a]=line[a];
}
  fftw_plan p2=fftw_plan_dft_r2c_1d(n/4,wind,fwind,FFTW_ESTIMATE);
fftw_execute(p2);
for(int b=0;b<n/4;b++)
{
line[b]=sqrt(fwind[b][0]*fwind[b][0]+fwind[b][1]*fwind[b][1]);
}
  fftw_destroy_plan(p2);
tfr.push_back(line);
in[k]=line[k];
   
}
fftw_destroy_plan(p1);
  fftw_free(in);
fftw_free(out);
fftw_free(in1);
fftw_free(out1);
感觉问题不少,因为初学所以不知道在哪里,各位高手帮忙看一下吧~~