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

📄 fft.lst

📁 AD9850串行驱动程序,使用51单片机,通过修改宏,能方便地对DDS进行配置!
💻 LST
字号:
C51 COMPILER V8.05a   FFT                                                                  09/02/2007 01:20:12 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE FFT
OBJECT MODULE PLACED IN FFT.OBJ
COMPILER INVOKED BY: C:\Keil\MCU\C51\BIN\C51.EXE FFT.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #include "stdio.h"
   3          #include <math.h>       //调用源(头)文件
   4          struct compx           /*定义一个复数结构*/
   5          {float real;float imag;
   6          };
   7          struct compx s[ 257 ];      //FFT输入输出均从是s[1]开始存入
   8          struct compx EE(struct compx,struct compx); //定义复数相乘结构
   9          void FFT(struct compx xin,int N);   /*定义FFT函数*/
  10          
  11          struct compx EE(struct compx a1,struct compx b2) //两复数相乘的程序
  12          {struct compx b3;  //b3保存两复数间的结果
  13   1      b3.real=a1.real*b2.real-a1.imag*b2.imag; //两复数间的运算
  14   1      b3.imag=a1.real*b2.imag+a1.imag*b2.real;
  15   1      return(b3);    /*返回结果*/
  16   1      }
  17          //-------------------------------------------
  18          void FFT(struct compx xin,int N)   /*FFT函数体*/
  19          {int f,m,nv2,nm1,i,k,j=1,l;   /*定义变量*/
  20   1      struct compx v,w,t;    /*定义结构变量*/
  21   1      nv2=N/2;           /*最高位值的权值*/
  22   1      f=N;                  /*f为中间变量*/
  23   1      for(m=1;(f=f/2)!=1;m++){;}            /*求级数m*/
  24   1      nm1=N-1;                               /*nm1为数组长度*/
  25   1      for(i=1;i<=nm1;i++)                   /*倒序*/
  26   1      {if(i<j) {t=xin[ j ];xin[j]=xin[ i ];xin[ i ] =t;}         /*i<j则换位*/
*** ERROR C216 IN LINE 26 OF FFT.C: subscript on non-array or too many dimensions
  27   2      k=nv2;                       /*k为倒序中相应位置的权值*/
  28   2      while(k<j) {j=j-k;k=k/2;}            /*k<j时最高为变为0*/
  29   2      j=j+k;                  /* j为数组中的位数,是一个十进制数*/ 
  30   2      } 
  31   1      {int le,lei,ip;       //变量初始化,le为序列长度
  32   2        float pi;
  33   2        for(l=1;l<=m;l++)                /*l控制级数*/
  34   2         {le=pow(2,l);                  /*le等于2的l次方*/
  35   3          lei=le/2;                   /*蝶形两节点间的距离*/
  36   3          pi=3.14159265;
  37   3          v.real=1.0;                    // 此次的v运于复数的初始化    v.imag=0.0;  
  38   3         w.real=cos(pi/lei);                  /*旋转因子*/
  39   3          w.imag=-sin(pi/lei);
  40   3          for(j=1;j<=lei;j++)      //外循环控制蝶行运算的级数
  41   3           {for(i=j;i<=N;i=i+le)      //内循环控制每级间的运算次数 
  42   4            {ip=i+lei;                 /*蝶形运算的下一个节点*/
  43   5             t=EE(xin[ ip ],v);             /*第一个旋转因子*/
  44   5             xin[ ip ].real=xin[ i ].real-t.real;   /*蝶形计算*/
  45   5             xin[ ip ].imag=xin[ i ].imag-t.imag;
  46   5             xin[ i ].real=xin[ i ].real+t.real;
  47   5             xin[ i ].imag=xin[ i ].imag+t.imag;
  48   5            }
  49   4            v=EE(v,w); //调用EE复数相乘程序,结果给下次的循环    
  50   4            }
  51   3           
  52   3         }
  53   2        }
  54   1      }
C51 COMPILER V8.05a   FFT                                                                  09/02/2007 01:20:12 PAGE 2   

  55          main()                    /*定义主函数*/
  56          {int N,i;     //变量初始化,N为总点数,i为每点数
  57   1      printf("shu ru N de ge shu N=");  /*提示输入*/
  58   1      scanf("%d",&N);                   /*输入N*/
  59   1      for(i=1;i<=N;i++)              /*输入*/
  60   1        {printf("di %d ge shu real=",i); 
  61   2         getchar();  
  62   2         scanf("%f",&s[ i ].real);
  63   2         getchar();   
  64   2         printf("\n");
  65   2         printf("di %d ge shu imag=",i);
  66   2         scanf("%f",&s[ i ].imag);
  67   2         printf("\n");
  68   2        }
  69   1        
  70   1        FFT(s,N);               /*调用FFt*/
  71   1        for(i=1;i<=N;i++)                 /*输出*/
  72   1         {printf("%f",s[ i ].real);
  73   2         printf(" + ");
  74   2          printf("%f",s[ i ].imag);
  75   2          printf("j");
  76   2          printf("\n");
  77   2         }  
  78   1      }

C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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