hur.cn - 华软网

 热门搜索

自己编的代码,有流程图,哪位大哥帮我看看问题出在哪里,谢谢

  作者:未知    来源:网络    更新时间:2011/9/27
我是在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);


感觉问题不少,因为初学所以不知道在哪里,各位高手帮忙看一下吧~~
---华软 网友回答---
各位大哥帮帮忙吧~~
---华软网友回复---
什么问题?运行后崩溃?
---华软网友回复---
引用 2 楼 visualeleven 的回复:
什么问题?运行后崩溃?

你好,我的问题是1,这个自己编的不知道到底能不能实现最终的结果,2,因此我进行断点调试,但是发现断点加在第二个FFT,也就是逆FFt的时候得到的值非常大,而把断点加在fftw_destroy_plan(p1);或者之后的话就会出现程序忽略断点直接跑下去的结果
---华软网友回复---
顶一下~各位大哥帮帮忙 吧~~~      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。