|
- #define N 2048
- #define pi 3.1415926
- #define M 10
- void CAnalysisDlg::ZoomFFT(double *x, double fs, double fe, int D, int L)
- {
- double wl,wh,fl,fh,yf,df,c;
- int kk;
- complex N1,L1,w2,x1,x2,sumxzt;
- int i,j;
- for(i=0;i<M;i++)
- {
- w0=0.5+0.5*cos(pi*i/M);
- }
- fl=(fe-fs/(4*D))>(-fs/2.2) ? (fe-fs/(4*D)):(-fs/2.2);
- fh=(fe+fs/(4*D))<(fs/2.2) ? (fe+fs/(4*D)):(fs/2.2);
- yf=D*fl;
- df=fs/D/N;
- for(i=0;i<=(N/2-1);i++)
- {
- f=fl+i*df;
- }
- wl=2*pi*fl/fs;
- wh=2*pi*fh/fs;
- hr[0]=(wl-wh)/pi;
- for(i=1;i<=M;i++)
- {
- hr=(sin(wl*i)-sin(wh*i))/(pi*i)*w0[i-1];
- }
- hi[0]=0;
- for(i=1;i<=M;i++)
- {
- hi=(cos(wl*i)-cos(wh*i))/(pi*i)*w0[i-1];
- }
- for(i=0;i<N;i++)
- {
- w1=0.5-0.5*cos(2*pi*i/N);
- }
- for(i=0;i<L;i++)
- {
- for(j=0;j<N;j++)
- {
- kk=j*D+M+i*N;
- for(int m=1;m<=M;m++)
- {
- sumhr=sumhr+hr[m]*(x[kk+1+m]+x[kk-m+1]);
- sumhi=sumhi+hi[m]*(x[kk+1+m]-x[kk-m+1]);
- }
- xrz[j]=x[kk+1]*hr[0]+sumhr;
- xiz[j]=x[kk+1]*hi[0]+sumhi;
- }
- }
- N1=complex(N,0);
- for(int k=0;k<N;k++)
- {
- x1=complex(xrz[k],xiz[k]);
- x2=complex(cos(2*pi*k*yf/fs),-sin(2*pi*k*yf/fs));
- xzt[k]=x1*x2;
- w2=complex(w1[k],0);
- xzt[k]=xzt[k]*w2;
- sumxzt=sumxzt+xzt[k];
- xzt[k]=xzt[k]-sumxzt/N1;
- }
- fft(xzt,11);
- for(i=0;i<N/2;i++)
- {
- xz=(xzt.Real()*xzt.Real()+xzt.Imag()*xzt.Imag())/(1024*1024);
- }
- for(i=0;i<N/2;i++)
- {
- xz=sqrt(xz/L);
- }
- }
复制代码
该程序是我把上面的Matlab版 ZoomFFT改写成Vc++版,该程序通过编译没有问题,我调用函数ZoomFFT(dc,100000.0,3125.0,8,5),但是其中的xiz,xrz始终为0,所以后面的xz当然也是0了,请问这个函数错误在哪里,请指点指点,谢谢!!!
[ 本帖最后由 MVH 于 2006-10-4 15:54 编辑 ] |
|