分享

fft算法,比较快的

 启蒙彩魂 2011-01-04
//******************************************************************************//
#define  FFT_GLOBALS
#include "FFT.h"
//******************************************************************************//
void FFT(double dataR[SAMPLE_LEN])
{
    unsigned int x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,xx;
 unsigned int i,j,k,b,p,L;
 double dataI[SAMPLE_LEN]={0};
 double TR,TI,temp;
 
 /*字节倒序*/
 for ( i=0;i<SAMPLE_LEN;i++ )
 {
  x0=x1=x2=x3=x4=x5=x6=x7=x8=x9=0;
  
  x0=i&0x0001;
  x1=(i>>1)&0x0001;
  x2=(i>>2)&0x0001;
  x3=(i>>3)&0x0001;
  x4=(i>>4)&0x0001;
  x5=(i>>5)&0x0001;
  x6=(i>>6)&0x0001;
  x7=(i>>7)&0x0001;
  x8=(i>>8)&0x0001;
  x9=(i>>9)&0x0001;
  xx=x0*512+x1*256+x2*128+x3*64+x4*32+x5*16+x6*8+x7*4+x8*2+x9;
  dataI[xx]=dataR[i];
 }
 for ( i=0;i<SAMPLE_LEN;i++ )
 {
  dataR[i]=dataI[i]; dataI[i]=0;
 }
 //开始蝶形运算
 for ( L=1;L<=LEVEL;L++ )
 { /* for(1) */
  b=1; i=L-1;
  while ( i>0 )
  {    
   b=b*2; i--;
  } /* b= 2^(L-1) */
  for ( j=0;j<=b-1;j++ ) /* for (2) */
  {
   p=1; i=LEVEL-L;
   while ( i>0 ) /* p=pow(2,7-L)*j; */
   {
    p=p*2; i--;
   }
   p=p*j;
   for ( k=j;k<SAMPLE_LEN;k=k+2*b ) /* for (3) */
   {
    TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];
    dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];
    dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];
    dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];
    dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];
   } /* END for (3) */
  } /* END for (2) */
 } /* END for (1) */
 for ( i=0;i<SAMPLE_LEN/2;i++ )
 {
  dataR[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
 }
} /* END FFT */
//******************************************************************************//
void InitForFFT(void)
{
 int i; 
 for ( i=0;i<SAMPLE_LEN;i++ )
 {
  sin_tab[i]=sin(PI*2*i/SAMPLE_LEN);
  cos_tab[i]=cos(PI*2*i/SAMPLE_LEN);
 }
}
//******************************************************************************//

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多