⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机用c语言编写的快速傅里叶变换
💻 C
字号:
  #include <c8051f020.h>
  #include <math.h>
  float  xdata datar[129];
    float xdata datai[129];
	float  xdata  w[32];
 //float  FFT(float datar[],float  datai[],float w[])
 
  float  FFT(void)
  {unsigned  int x0,x1,x2,x3,x4,x5,x6;
   unsigned  int L ,j,k,b,p,xx,i;  
   float  TR,TI,temp;
   for(i=0;i<128;i++)
   {x0=x1=x2=x3=x4=x5=x6=0;
   x0=i&0x01;x1=(i/2)&0x01;x2=(i/4)&0x01;
   x3=(i/8)&0x01;x4=(i/16)&0x01;x5=(i/32)&0x01;x6=(i/64)&0x01;
   xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;
   datai[xx]=datar[i];
   }
   for(i=0,i<128;i++;)
   {datar[i]=datai[i];datai[i]=0;}

     for(L=1;L<=7;L++)
     {b=1;i=L-1;
      while(i>1)
       {b=b*2;i--;}
      for(j=0;j<=b-1;j++)
      {p=1;i=7-L;
       while(i>0)
	   {p=p*2;i--;}
	    p=p*j;
	 for(k=j;k<128;k=k+2*b)
	 {TR=datar[k];TI=datai[k];temp=datar[k+b];
	 datar[k]=datar[k]+datar[k+b]*cos(2*3.14159*p/128)+datai[k+b]*sin(2*3.14159*p/128);
	 datai[k]=datai[k]-datar[k+b]*sin(2*3.14159*p/128)+datai[k+b]*cos(2*3.14159*p/128);
	 datar[k+b]=TR-datar[k+b]*cos(2*3.14159*p/128)-datai[k+b]*sin(2*3.14159*p/128);
	 datai[k+b]=TI+temp*sin(2*3.14159*p/128)-datai[k+b]*cos(2*3.14159*p/128);
	 }
	}
  }
for(i=0;i<32;i++)
   {w[i]=sqrt(datar[i]*datar[i]+datai[i]*datai[i]);
    w[i]=w[i]/64;}
   w[0]=w[0]/2;
   return  w[32];
  } 	  

  void  main(void)


  {	//float  xdata datar[129];
    //float xdata datai[129];
    unsigned  int   i;
	//float  xdata  w[32];
	for(i=0;i<64;i++)
	{datar[i]=100;
	 datai[i]=0;
	 }
	for(i=64;i<128;i++)
	{datar[i]=0;			  
	 datai[i]=0;
	 }	
	 FFT();
  // FFT(datar,datai,w);

	 while(1);	 
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -