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

📄 fftsy.c

📁 2407例程.rar
💻 C
字号:
/*************************************************************
  *文件名称:fft.c
 *文件标示:
 *摘    要:本文件内容为tms320lf2407 dsp快速傅立叶变换实验程序     
 *
 *当前版本:1.0
 *作    者:杨广龙
 *完成日期:2005年12月12日
 *
 *取代版本:
 *原作者  :
 *完成日期:
 *************************************************************/
#include         "2407c.h"
#include         "math.h"

#pragma DATA_SECTION(input,"ccb0");
#pragma DATA_SECTION(im,"bss");

const double sins[127]={-0.000, -0.000, -1.000, -0.000, -0.707, -1.000, -0.707, -0.000,
 -0.383, -0.707, -0.924, -1.000, -0.924, -0.707, -0.383, -0.000,
 -0.195, -0.383, -0.556, -0.707, -0.831, -0.924, -0.981, -1.000,
 -0.981, -0.924, -0.831, -0.707, -0.556, -0.383, -0.195, -0.000,
 -0.098, -0.195, -0.290, -0.383, -0.471, -0.556, -0.634, -0.707,
 -0.773, -0.831, -0.882, -0.924, -0.957, -0.981, -0.995, -1.000,
 -0.995, -0.981, -0.957, -0.924, -0.882, -0.831, -0.773, -0.707,
 -0.634, -0.556, -0.471, -0.383, -0.290, -0.195, -0.098, -0.000,
 -0.049, -0.098, -0.147, -0.195, -0.243, -0.290, -0.337, -0.383,
 -0.428, -0.471, -0.514, -0.556, -0.596, -0.634, -0.672, -0.707,
 -0.741, -0.773, -0.803, -0.831, -0.858, -0.882, -0.904, -0.924,
 -0.942, -0.957, -0.970, -0.981, -0.989, -0.995, -0.999, -1.000,
 -0.999, -0.995, -0.989, -0.981, -0.970, -0.957, -0.942, -0.924,
 -0.904, -0.882, -0.858, -0.831, -0.803, -0.773, -0.741, -0.707,
 -0.672, -0.634, -0.596, -0.556, -0.514, -0.471, -0.428, -0.383,
 -0.337, -0.290, -0.243, -0.195, -0.147, -0.098, -0.049};

const double coss[127]={1.000,  1.000, -0.000,  1.000,  0.707, -0.000, -0.707,  1.000,
  0.924,  0.707,  0.383, -0.000, -0.383, -0.707, -0.924,  1.000,
  0.981,  0.924,  0.831,  0.707,  0.556,  0.383,  0.195, -0.000,
 -0.195, -0.383, -0.556, -0.707, -0.831, -0.924, -0.981,  1.000,
  0.995,  0.981,  0.957,  0.924,  0.882,  0.831,  0.773,  0.707,
  0.634,  0.556,  0.471,  0.383,  0.290,  0.195,  0.098, -0.000,
 -0.098, -0.195, -0.290, -0.383, -0.471, -0.556, -0.634, -0.707,
 -0.773, -0.831, -0.882, -0.924, -0.957, -0.981, -0.995,  1.000,
  0.999,  0.995,  0.989,  0.981,  0.970,  0.957,  0.942,  0.924,
  0.904,  0.882,  0.858,  0.831,  0.803,  0.773,  0.741,  0.707,
  0.672,  0.634,  0.596,  0.556,  0.514,  0.471,  0.428,  0.383,
  0.337,  0.290,  0.243,  0.195,  0.147,  0.098,  0.049, -0.000,
 -0.049, -0.098, -0.147, -0.195, -0.243, -0.290, -0.337, -0.383,
 -0.428, -0.471, -0.514, -0.556, -0.596, -0.634, -0.672, -0.707,
 -0.741, -0.773, -0.803, -0.831, -0.858, -0.882, -0.904, -0.924,
 -0.942, -0.957, -0.970, -0.981, -0.989, -0.995, -0.999};

 double re[128]={0.000,  1.706,  3.337,  4.825,  6.108,  7.137,  7.879,  8.315,
  8.446,  8.292,  7.886,  7.279,  6.531,  5.712,  4.893,  4.145,
  3.536,  3.121,  2.945,  3.038,  3.411,  4.057,  4.954,  6.061,
  7.325,  8.682, 10.059, 11.384, 12.585, 13.596, 14.361, 14.838,
 15.000, 14.838, 14.362, 13.597, 12.586, 11.385, 10.060,  8.682,
  7.326,  6.062,  4.954,  4.058,  3.411,  3.038,  2.945,  3.121,
  3.535,  4.145,  4.892,  5.711,  6.531,  7.279,  7.886,  8.291,
  8.446,  8.315,  7.879,  7.138,  6.109,  4.826,  3.338,  1.706,
  0.001, -1.705, -3.336, -4.824, -6.108, -7.137, -7.878, -8.315,
 -8.446, -8.292, -7.886, -7.279, -6.532, -5.712, -4.893, -4.146,
 -3.536, -3.121, -2.945, -3.038, -3.410, -4.057, -4.953, -6.061,
 -7.324, -8.681,-10.059,-11.384,-12.585,-13.596,-14.361,-14.838,
-15.000,-14.838,-14.362,-13.597,-12.587,-11.386,-10.061, -8.683,
 -7.326, -6.062, -4.955, -4.058, -3.411, -3.038, -2.945, -3.121,
 -3.535, -4.144, -4.892, -5.711, -6.530, -7.278, -7.885, -8.291,
 -8.446, -8.315, -7.879, -7.138, -6.109, -4.826, -3.339, -1.707
 };

double im[128]={ 7.500,  8.896, 10.071, 10.977, 11.583, 11.874, 11.853, 11.542,
 10.977, 10.211,  9.307,  8.332,  7.362,  6.466,  5.710,  5.150,
  4.830,  4.775,  4.997,  5.487,  6.219,  7.153,  8.233,  9.395,
 10.567, 11.676, 12.651, 13.428, 13.954, 14.187, 14.106, 13.703,
 12.991, 11.998, 10.769,  9.363,  7.846,  6.291,  4.773,  3.362,
  2.121,  1.104,  0.348, -0.126, -0.312, -0.225,  0.104,  0.630,
  1.294,  2.029,  2.764,  3.427,  3.951,  4.275,  4.352,  4.150,
  3.652,  2.860,  1.794,  0.490, -1.002, -2.619, -4.290, -5.941,
 -7.499, -8.895,-10.070,-10.977,-11.583,-11.874,-11.853,-11.542,
-10.978,-10.212, -9.307, -8.333, -7.362, -6.466, -5.710, -5.150,
 -4.830, -4.775, -4.997, -5.486, -6.219, -7.152, -8.233, -9.394,
-10.566,-11.675,-12.651,-13.428,-13.953,-14.187,-14.106,-13.703,
-12.991,-11.998,-10.770, -9.364, -7.847, -6.292, -4.774, -3.362,
 -2.122, -1.104, -0.348,  0.125,  0.312,  0.225, -0.104, -0.630,
 -1.293, -2.029, -2.764, -3.427, -3.950, -4.275, -4.352, -4.150,
 -3.653, -2.861, -1.795, -0.490,  1.001,  2.618,  4.289,  5.940
};


double XT,YT,S[128];

double  actep, bctep, bcarg, aw, bw;
double atemp, btemp;

 void inline disable() 
{   asm(" setc INTM");}


void  initial()
{   asm(" setc    SXM");    
   asm(" clrc     OVM");    
   asm(" clrc      CNF");   
      *SCSR1=0x80FE;//4倍频
       *WDCR=0x0E8;
       WSGR=0x0000; 
      *IMR=0x0021;  
      *IFR=0x0FFFF;   
}

 void TIMEINT()
 {   
   *T1CNT=0X0000;   
   *T1CON=0X100C;  //1分频,连续增计数 
   *T1PR=0X186a;    
   *GPTCONA=0X08100;    //timer1周期触发
   *EVAIFRA=*EVAIFRA&0X0080;
   *EVAIMRA=*EVAIMRA|0x0080;
 }


void interrupt nothing()
{   return;
}



void myfft()
{

int j, ij, m, l, istep,kk=0;
j = 0;
 for (ij=0; ij<=128-1; ij++)
 {
   if (ij <= j)
   {
     actep = re[j]*0.0883883;  // 0.0883883 =sqrt(1.0 / 128);
     bctep = im[j]*0.0883883;
     re[j] = re[ij]*0.0883883;
     im[j] = im[ij]*0.0883883;
     re[ij] = actep;
     im[ij] = bctep;
   }
  m = 64;// 128/2
  do
  {
   if ((j+1)<=m)
   break;
   j = j - m;
   m = m/2;
  }
 while (m>=1);
 j = j + m;
}

l = 1;
 do
 {
 istep = 2 * l;
 for (m=1; m<=l; m++)
{
 aw = coss[kk];
 bw = sins[kk];
 kk++;
  for (ij=m-1; ij<=127; ij=ij+istep)
   {
    atemp = aw * re[ij+l] - bw * im[ij+l];
    btemp = aw * im[ij+l] + bw * re[ij+l];
    re[ij+l] = re[ij] - atemp;
    im[ij+l] = im[ij] - btemp;
    re[ij] = re[ij] + atemp;
    im[ij] = im[ij] + btemp;
   }
  }
 l = istep;
 }
 while( l < 128 );
kk=0;
}


main()
{
  int i;

  disable();
  initial();
  TIMEINT();   
 
  myfft();
  for(i=0;i<128;i++)
  {
    S[i]=sqrt(re[i]*re[i]+im[i]*im[i]);
  }
  puts("the end") ;
}

⌨️ 快捷键说明

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