用c++编写fft出现的问题~

来源:百度知道 编辑:UC知道 时间:2024/05/16 04:20:19
我用c++ 载入如下程序的fft变换,经过修改,程序卡在 被我标记的while 循环处,小弟很不解,不知怎么修改,请大侠帮忙看看啊~~
对对对 就是这个while 循环里的问题 我知道是死在里面了 可是不知道怎么改 如果能给个修改方案就更好了 小弟谢了

void tra(float *x,float *y)
{
float t;
t=(*x);
(*x)=(*y);
(*y)=t;
}

void FFT(float *xr,float *xi,int n,int inv)
{
int i,j,a,b,k,m;
int ep,arg,mt,s0,s1;
float sign,pr,pi,ph;

float *c=new float[n];
float *s=new float[n];

j=0;
if(inv==0)
{
sign=1.0;
for(i=0;i<n;i++)
{
xr[i]=xr[i]/n;
xi[i]=xi[i]/n;
}
}
else sign=-1.0;
// printf("2\n");

for(i=0;i<=n-1;i++)
{
if(i<j)
{
tra(&xr[i],&xr[j]);
tra(&xi[i],&xi[j]);
}
k=n/2;

// while(k<=j)
// {
// j=j-k;
// k=k/2;
// }
// j=j+k;
}

ep=0;
i=n;
while(i!=1)
{
ep=ep+1;
i=i/2;
}
ph=(float)(2*M_PI/n);
for(i=0;i<n;++i)
{
s[i]=(float)(sign*sin(ph*i));
c[i]=(float)(co