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

📄 fft.c

📁 SmartARM2200开发平台光盘资料中的所有的源码和测试程序以及应用程序
💻 C
字号:
/***********************************************************************************/
/*                     FFT operation Math function                                 */
/*                                                                                 */
/*  Author: Guo zhi qian / Gan da                                                  */
/*  Ver1.0: 2003/08/25                                                             */
/*  Osc limit: No                                                                  */
/*  Notice: Data in:  xreal[]  after operation Data out: xreal[]                   */
/***********************************************************************************/

#include "config.h"


volatile float xreal[FFTSIZE];
volatile float ximag[FFTSIZE];



/***********************************************/
/*   Funtion: Reverse the bit consequence      */
/***********************************************/
uint32 Ibitr(uint32 j, uint32 nu)
 {   int32 b,j1,i,j2;
     j1=j;
     b=0;
     for(i=1;i<=nu;i++)
      {   j2=j1/2;
          b=b*2+(j1-2*j2);
          j1=j2;
      }
     return(b);
 }


/***********************************************/
/*   Funtion: FFT operation                    */
/*   unit n : the operation point Number       */
/*   uint nu: 2^X=n  => X=nu                   */
/***********************************************/
void Fft(uint32 n, uint32 nu)
 {   float treal,timag,arg,c,s;
     int32   p,n2,nu1,l,i,j,k,kn2;
     n2=n;
     nu1=nu;
     for (l=0;l<nu;l++)
      {   nu1=nu1-1;
          n2=n2/2;
          k=0;
          while(k+n2<n)
           {   for(i=0;i<n2;i++)
                {  j=k>>nu1;
                   p=Ibitr(j,nu);
	               arg=6.28315*p/n;
                   c=cos(arg);
                   s=sin(arg);
                   kn2=k+n2;
                   treal=xreal[kn2]*c-ximag[kn2]*s;
                   timag=ximag[kn2]*c+xreal[kn2]*s;
                   xreal[kn2]=xreal[k]-treal;
                   ximag[kn2]=ximag[k]-timag;
                   xreal[k]=xreal[k]+treal;
                   ximag[k]=ximag[k]+timag;
                   k=k+1;
                 }
                k=k+n2;
            }
      }
     for(k=0;k<n;k++)
      {   i=Ibitr(k,nu);
          if(i>k)
           {   treal=xreal[k];
               timag=ximag[k];
               xreal[k]=xreal[i];
               ximag[k]=ximag[i];
               xreal[i]=treal;
               ximag[i]=timag;
           }
       }
 }


/***********************************************/
/*   Funtion: Clear FFT buffer                 */
/***********************************************/
void Fft_buffer_clr(void)
 {   uint32 i;
     for(i=0;i<FFTSIZE;i++)
      {   xreal[i]=0;
          ximag[i]=0;
      }
 }

/***********************************************/
/*   Funtion: Genarate a wave data to xreal[]  */
/***********************************************/

void Sinwave(void)
 {   uint16 i;
     for (i=0;i<FFTSIZE;i++)   xreal[i] = sin(2.0 * PI * (i) / FFTSIZE);
 }

void Sqrwave(void)
 {   uint16 i;
     for (i=0;i<FFTSIZE/2;i++)   xreal[i] = 0;
     for (;i<FFTSIZE;i++)   xreal[i] = 5;
 }



⌨️ 快捷键说明

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