附2:程序清單
/*/////////////////////////////////////////////////////////////////////////////////////////////////
FFT轉(zhuǎn)換函數(shù),dataR:實(shí)部,datai:虛部,
////////////////////////////////////////////////////////////////////////////////////////////////*/
void FFT(float *dataR,float *dataI,int n)
{
int i,L,j,k,b,p,xx,qq;
int x[11]={0};
float TR,TI,temp;
float QQ;
//////////////////////////////////位倒置////////////////////////////////////////////////////
for(i=0;i《count[n];i++)
{ xx=0;
for(j=0;j《n;j++)
x[j]=0;
for(j=0;j《n;j++)
{x[j]=(i/count[j])&0x01;}
for(j=0;j《n;j++)
{xx=xx+x[j]*count[n-j-1];}
dataI[xx]=dataR[i];
}
for(i=0;i《count[n];i++)
{ dataR[i]=dataI[i];
dataI[i]=0;
}
////////////////////////////////////蝶形運(yùn)算////////////////////////////////////////
for(L=1;L《=n;L++)
{
b=1; i=L-1;
while(i》0)
{ b=b*2;
i--;
}
for(j=0;j《=b-1;j++)
{ p=1; i=n-L;
while(i》0)
{ p=p*2; i--;}
p=p*j;
for(k=j;k《count[n];k=k+2*b)
{
TR=dataR[k];
TI=dataI[k];
temp=dataR[k+b];
QQ=2*pi*p/count[n];
qq=p*count[11-n];
dataR[k]=dataR[k]+dataR[k+b]*cos_tab[qq]+dataI[k+b]*sin_tab[qq];
dataI[k]=dataI[k]-dataR[k+b]*sin_tab[qq]+dataI[k+b]*cos_tab[qq];
dataR[k+b]=TR-dataR[k+b]*cos_tab[qq]-dataI[k+b]*sin_tab[qq]; //查表運(yùn)算
dataI[k+b]=TI+temp*sin_tab[qq]-dataI[k+b]*cos_tab[qq];
}
}
}
for(i=0;i《count[n];i++)
{
w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
w[i]=w[i]/count[n-1];
}
w[0]=w[0]/2;
}
評(píng)論