黄山香烟价格表和图片:fft算法,比较快的

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 17:08:50
//******************************************************************************//
#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 {
  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 {
  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   {
    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 {
  dataR[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
 }
} /* END FFT *///******************************************************************************//
void InitForFFT(void)
{
 int i; 
 for ( i=0;i {
  sin_tab[i]=sin(PI*2*i/SAMPLE_LEN);
  cos_tab[i]=cos(PI*2*i/SAMPLE_LEN);
 }
}
//******************************************************************************//