FFT算法(查表法)(共8页)_第1页
FFT算法(查表法)(共8页)_第2页
FFT算法(查表法)(共8页)_第3页
FFT算法(查表法)(共8页)_第4页
FFT算法(查表法)(共8页)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ARM或单片机用的FFT算法,用于信号处理。经过愚昧的本人优化,提高了计算效率(在aduc7026 41MHz FFT256点 环境下 运算时间为0.06s左右)PS:以下有两部分(fft.h和fft.c)【复制以下内容改名为fft.h】#ifndef _FFT_H_#define _FFT_H_#include#ifdef FFT_GLOBALS#define FFT_EXT#else#define FFT_EXT extern#endif#define PI 3.1415926#define FFT_POINT 8 /设置点数(此值变,下面的也要变)(011)#define SAMPLE_

2、NUM 256/可设256或512两种数/countn /count=1,2,4,8,16,32,64,128,256,512,1024,2048FFT_EXT float dataRSAMPLE_NUM;FFT_EXT float dataISAMPLE_NUM;FFT_EXT void SetData(float data,unsigned int i); /采集数据到第i个点(0SAMPLE_NUM)FFT_EXT void FFT(void);/采样来的数据放在dataR 数组中/*FFT结果数值处理*/计算和返回峰(模)值,k表示第几个值(0SAMPLE_NUM-1),type为0返

3、回峰值,1返回模值,2返回有效值FFT_EXT float GetPeak(unsigned int k,unsigned int type); /FFT_EXTfloat GetPhase(unsigned int k,unsigned int type); /计算和返回相位,k同上 /type为0返回角度,1返回弧度/speed为采样速率,返回第k(0SAMPLE_NUM)个点代表的频率FFT_EXT float GetStepF(float speed,unsigned int k); FFT_EXT float GetPower1(unsigned int k); /返回功率谱的第k点

4、FFT_EXT float GetPower2(unsigned int k,float total); / 返回k点所占的功率百分比(单位是%) total为总功率 FFT_EXT float GetTotalPower(void); /计算功率谱总和 FFT_EXT float GetTHD(void); /计算失真度#endif/【复制以下内容改名为fft.c】/查表式FFT算法#define FFT_GLOBALS#include fft.h#if SAMPLE_NUM=256 const float sin_tab256=0.000000,0.024541,0.049068,0.07

5、3565,0.098017,0.122411,0.146730,0.170962,0.195090,0.219101,0.242980,0.266713,0.290285,0.313682,0.336890,0.359895,0.382683,0.405241,0.427555,0.449611,0.471397,0.492898,0.514103,0.534998,0.555570,0.575808,0.595699,0.615232,0.634393,0.653173,0.671559,0.689541,0.707107,0.724247,0.740951,0.757209,0.77301

6、0,0.788346,0.803208,0.817585,0.831470,0.844854,0.857729,0.870087,0.881921,0.893224,0.903989,0.914210,0.923880,0.932993,0.941544,0.949528,0.956940,0.963776,0.970031,0.975702,0.980785,0.985278,0.989177,0.992480,0.995185,0.997290,0.998795,0.999699,1.000000,0.999699,0.998795,0.997290,0.995185,0.992480,0

7、.989177,0.985278,0.980785,0.975702,0.970031,0.963776,0.956940,0.949528,0.941544,0.932993,0.923880,0.914210,0.903989,0.893224,0.881921,0.870087,0.857729,0.844854,0.831470,0.817585,0.803208,0.788346,0.773010,0.757209,0.740951,0.724247,0.707107,0.689541,0.671559,0.653173,0.634393,0.615232,0.595699,0.57

8、5808,0.555570,0.534998,0.514103,0.492898,0.471397,0.449611,0.427555,0.405241,0.382683,0.359895,0.336890,0.313682,0.290285,0.266713,0.242980,0.219101,0.195090,0.170962,0.146730,0.122411,0.098017,0.073565,0.049068,0.024541,0.000000,-0.024541,-0.049068,-0.073565,-0.098017,-0.122411,-0.146730,-0.170962,

9、-0.195090,-0.219101,-0.242980,-0.266713,-0.290285,-0.313682,-0.336890,-0.359895,-0.382683,-0.405241,-0.427555,-0.449611,-0.471397,-0.492898,-0.514103,-0.534998,-0.555570,-0.575808,-0.595699,-0.615232,-0.634393,-0.653173,-0.671559,-0.689541,-0.707107,-0.724247,-0.740951,-0.757209,-0.773010,-0.788346,

10、-0.803208,-0.817585,-0.831470,-0.844854,-0.857729,-0.870087,-0.881921,-0.893224,-0.903989,-0.914210,-0.923880,-0.932993,-0.941544,-0.949528,-0.956940,-0.963776,-0.970031,-0.975702,-0.980785,-0.985278,-0.989177,-0.992480,-0.995185,-0.997290,-0.998795,-0.999699,-1.000000,-0.999699,-0.998795,-0.997290,

11、-0.995185,-0.992480,-0.989177,-0.985278,-0.980785,-0.975702,-0.970031,-0.963776,-0.956940,-0.949528,-0.941544,-0.932993,-0.923880,-0.914210,-0.903989,-0.893224,-0.881921,-0.870087,-0.857729,-0.844854,-0.831470,-0.817585,-0.803208,-0.788346,-0.773010,-0.757209,-0.740951,-0.724247,-0.707107,-0.689541,

12、-0.671559,-0.653173,-0.634393,-0.615232,-0.595699,-0.575808,-0.555570,-0.534998,-0.514103,-0.492898,-0.471397,-0.449611,-0.427555,-0.405241,-0.382683,-0.359895,-0.336890,-0.313682,-0.290285,-0.266713,-0.242980,-0.219101,-0.195090,-0.170962,-0.146730,-0.122411,-0.098017,-0.073565,-0.049068,-0.024541;

13、#endif#if SAMPLE_NUM=512const float sin_tab512=0.000000,0.012272,0.024541,0.036807,0.049068,0.061321,0.073565,0.085797,0.098017,0.110222,0.122411,0.134581,0.146730,0.158858,0.170962,0.183040,0.195090,0.207111,0.219101,0.231058,0.242980,0.254866,0.266713,0.278520,0.290285,0.302006,0.313682,0.325310,0

14、.336890,0.348419,0.359895,0.371317,0.382683,0.393992,0.405241,0.416430,0.427555,0.438616,0.449611,0.460539,0.471397,0.482184,0.492898,0.503538,0.514103,0.524590,0.534998,0.545325,0.555570,0.565732,0.575808,0.585798,0.595699,0.605511,0.615232,0.624859,0.634393,0.643832,0.653173,0.662416,0.671559,0.68

15、0601,0.689541,0.698376,0.707107,0.715731,0.724247,0.732654,0.740951,0.749136,0.757209,0.765167,0.773010,0.780737,0.788346,0.795837,0.803208,0.810457,0.817585,0.824589,0.831470,0.838225,0.844854,0.851355,0.857729,0.863973,0.870087,0.876070,0.881921,0.887640,0.893224,0.898674,0.903989,0.909168,0.91421

16、0,0.919114,0.923880,0.928506,0.932993,0.937339,0.941544,0.945607,0.949528,0.953306,0.956940,0.960431,0.963776,0.966976,0.970031,0.972940,0.975702,0.978317,0.980785,0.983105,0.985278,0.987301,0.989177,0.990903,0.992480,0.993907,0.995185,0.996313,0.997290,0.998118,0.998795,0.999322,0.999699,0.999925,1

17、.000000,0.999925,0.999699,0.999322,0.998795,0.998118,0.997290,0.996313,0.995185,0.993907,0.992480,0.990903,0.989177,0.987301,0.985278,0.983105,0.980785,0.978317,0.975702,0.972940,0.970031,0.966976,0.963776,0.960431,0.956940,0.953306,0.949528,0.945607,0.941544,0.937339,0.932993,0.928506,0.923880,0.91

18、9114,0.914210,0.909168,0.903989,0.898674,0.893224,0.887640,0.881921,0.876070,0.870087,0.863973,0.857729,0.851355,0.844854,0.838225,0.831470,0.824589,0.817585,0.810457,0.803208,0.795837,0.788346,0.780737,0.773010,0.765167,0.757209,0.749136,0.740951,0.732654,0.724247,0.715731,0.707107,0.698376,0.68954

19、1,0.680601,0.671559,0.662416,0.653173,0.643832,0.634393,0.624859,0.615232,0.605511,0.595699,0.585798,0.575808,0.565732,0.555570,0.545325,0.534998,0.524590,0.514103,0.503538,0.492898,0.482184,0.471397,0.460539,0.449611,0.438616,0.427555,0.416430,0.405241,0.393992,0.382683,0.371317,0.359895,0.348419,0

20、.336890,0.325310,0.313682,0.302006,0.290285,0.278520,0.266713,0.254866,0.242980,0.231058,0.219101,0.207111,0.195090,0.183040,0.170962,0.158858,0.146730,0.134581,0.122411,0.110222,0.098017,0.085797,0.073565,0.061321,0.049068,0.036807,0.024541,0.012272,0.000000,-0.012272,-0.024541,-0.036807,-0.049068,

21、-0.061321,-0.073565,-0.085797,-0.098017,-0.110222,-0.122411,-0.134581,-0.146730,-0.158858,-0.170962,-0.183040,-0.195090,-0.207111,-0.219101,-0.231058,-0.242980,-0.254866,-0.266713,-0.278520,-0.290285,-0.302006,-0.313682,-0.325310,-0.336890,-0.348419,-0.359895,-0.371317,-0.382683,-0.393992,-0.405241,

22、-0.416430,-0.427555,-0.438616,-0.449611,-0.460539,-0.471397,-0.482184,-0.492898,-0.503538,-0.514103,-0.524590,-0.534998,-0.545325,-0.555570,-0.565732,-0.575808,-0.585798,-0.595699,-0.605511,-0.615232,-0.624859,-0.634393,-0.643832,-0.653173,-0.662416,-0.671559,-0.680601,-0.689541,-0.698376,-0.707107,

23、-0.715731,-0.724247,-0.732654,-0.740951,-0.749136,-0.757209,-0.765167,-0.773010,-0.780737,-0.788346,-0.795837,-0.803208,-0.810457,-0.817585,-0.824589,-0.831470,-0.838225,-0.844854,-0.851355,-0.857729,-0.863973,-0.870087,-0.876070,-0.881921,-0.887640,-0.893224,-0.898674,-0.903989,-0.909168,-0.914210,

24、-0.919114,-0.923880,-0.928506,-0.932993,-0.937339,-0.941544,-0.945607,-0.949528,-0.953306,-0.956940,-0.960431,-0.963776,-0.966976,-0.970031,-0.972940,-0.975702,-0.978317,-0.980785,-0.983105,-0.985278,-0.987301,-0.989177,-0.990903,-0.992480,-0.993907,-0.995185,-0.996313,-0.997290,-0.998118,-0.998795,

25、-0.999322,-0.999699,-0.999925,-1.000000,-0.999925,-0.999699,-0.999322,-0.998795,-0.998118,-0.997290,-0.996313,-0.995185,-0.993907,-0.992480,-0.990903,-0.989177,-0.987301,-0.985278,-0.983105,-0.980785,-0.978317,-0.975702,-0.972940,-0.970031,-0.966976,-0.963776,-0.960431,-0.956940,-0.953306,-0.949528,

26、-0.945607,-0.941544,-0.937339,-0.932993,-0.928506,-0.923880,-0.919114,-0.914210,-0.909168,-0.903989,-0.898674,-0.893224,-0.887640,-0.881921,-0.876070,-0.870087,-0.863973,-0.857729,-0.851355,-0.844854,-0.838225,-0.831470,-0.824589,-0.817585,-0.810457,-0.803208,-0.795837,-0.788346,-0.780737,-0.773010,

27、-0.765167,-0.757209,-0.749136,-0.740951,-0.732654,-0.724247,-0.715731,-0.707107,-0.698376,-0.689541,-0.680601,-0.671559,-0.662416,-0.653173,-0.643832,-0.634393,-0.624859,-0.615232,-0.605511,-0.595699,-0.585798,-0.575808,-0.565732,-0.555570,-0.545325,-0.534998,-0.524590,-0.514103,-0.503538,-0.492898,

28、-0.482184,-0.471397,-0.460539,-0.449611,-0.438616,-0.427555,-0.416430,-0.405241,-0.393992,-0.382683,-0.371317,-0.359895,-0.348419,-0.336890,-0.325310,-0.313682,-0.302006,-0.290285,-0.278520,-0.266713,-0.254866,-0.242980,-0.231058,-0.219101,-0.207111,-0.195090,-0.183040,-0.170962,-0.158858,-0.146730,

29、-0.134581,-0.122411,-0.110222,-0.098017,-0.085797,-0.073565,-0.061321,-0.049068,-0.036807,-0.024541,-0.012272;#endifvoid SetData(float data,unsigned int i) dataRi=data;/* 采样来的数据放在dataR 数组中,运算前dataI 数组初始化为0 */void FFT(void)const int count=1,2,4,8,16,32,64,128,256,512,1024,2048;int i,xx,n;int L,j,k,b;

30、float TR,TI,temp,Tsin,Tcos;/,p;long m;int x11=0;n=FFT_POINT; /* following code invert sequence */for(i=0;icountn;i+) xx=0;for(j=0;jn;j+) xj=0;for(j=0;jn;j+) xj=(i/countj)&0x01;for(j=0;jn;j+) xx=xx+xj*countn-j-1;dataIxx=dataRi;for(i=0;icountn;i+) dataRi=dataIi;dataIi=0; /* following code FFT */for(L=

31、1;L=n;L+) /* for(1) */b=1; / i=L-1;b=(L-1); /整型2的n次方简化运算(加快计算速度)m=SAMPLE_NUM/countL;for(j=0;j=b-1;j+) /* for (2) */ Tsin=sin_tab(m*j)%SAMPLE_NUM;Tcos=sin_tab(m*j+SAMPLE_NUM/4)%SAMPLE_NUM; for(k=j;kcountn;k=k+2*b) /* for (3) */ TR=dataRk; TI=dataIk; temp=dataRk+b; dataRk = dataRk+dataRk+b*Tcos+dataIk+b*Tsin; dataIk = dataIk-dataRk+b*Tsin+dataIk+b*Tcos; dataRk+b = TR-dataRk+b*Tcos-dataIk+b*Tsin; dataIk+b = TI+temp*Tsin-dataIk+b*Tcos; /* END for (3) */ /* END for (2) */ /* END for (1) */*FFT数值计算处

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论