void FFT(double *pr,double *pi,int n,int k,double *fr,double *fi,int l,int il)
{ //pr 原始序列实部
//pi 原始序列虚部 . 本程序中原始序列虚部都为0 
//n FFT的长度
//k k=log2(n)
//fr 变换后的实部
//fi 变换后的虚部
//l,il标志 一般正变换为,0,0,反变换为 1,0

int it,m,is,i,j,nv,l0;
double p,q,s,vr,vi,poddr,poddi;

for(it=0;it<n;it++)
{
m = it;
is = 0;
for(i=0;i<k;i++)
{
j = m/2;
is = 2*is+(m-2*j);
m = j;

}
fr[it] = pr[is];
fi[it] = pi[is];
}
pr[0] = 1.0;
pi[0] = 0.0;
p = 6.283185306/(1.0*n);
pr[1] = cos(p);
pi[1] = -sin(p);
if(l!=0) pi[1] = -pi[1];
for(i=2;i<n;i++)
{
p = pr[i-1]*pr[1];
q = pi[i-1]*pi[1];
s = (pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
pr[i] = p-q;
pi[i] = s-p-q;

}
for(it=0;it<n-1;it+=2)
{
vr = fr[it];
vi = fi[it];
fr[it] = vr+fr[it+1];
fi[it] = vi+fi[it+1];
fr[it+1] = vr - fr[it+1];
fi[it+1] = vi - fi[it+1];
}
m = n/2;nv = 2;

for(l0 = k-2;l0>=0;l0--)
{
m = m/2;
nv = 2*nv;
for(it=0;it<=(m-1)*nv;it = it + nv)
for(j=0;j<=(nv/2)-1;j++)
{
p = pr[m*j]*fr[it+j+nv/2];
q = pi[m*j]*fi[it+j+nv/2];
s = pr[m*j]+pi[m*j];
s = s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
poddr = p - q;
poddi = s - p - q;
fr[it+j+nv/2] = fr[it+j] - poddr;
fi[it+j+nv/2] = fi[it+j] - poddi;
fr[it+j] = fr[it+j] + poddr;
fi[it+j] = fi[it+j] + poddi;

}
}

if(l!=0)
{
for(i=0;i<n;i++)
{
fr[i] = fr[i]/(1.0*n);
fi[i] = fi[i]/(1.0*n);
}
}
if(il !=0)
{
for(i=0;i<n;i++)
{
pr[i] = sqrt(fr[i]*fr[i]+fi[i]*fi[i]);
}

}
}
这是我在网上下的FFT算法,
能不能帮我注释一下,每段大概的意思
因为我不懂这个算法,实在是看不懂
谢谢各位了
实在是急