下载中心
全国电子设计大赛一等奖作品中:FFT算法的源码rar
1星 发布者: yaoniming3k

2013-09-02 | 1积分 | 8.2KB |  1 次下载

下载 收藏 评论

文档简介
标签: 全国

全国

全国电子

全国

电子

电子

电子设计

电子设计

电子设计大赛

电子设计大赛

第八届全国大学生电子设计大赛终于落下帷幕了.经过半年的努力,总算有了回报,拿了个全国一等奖.经过这段时间的历练,懂得了很多事和某些人,我觉得这是远远超过技术本身的收获. 我们做的是A题音频信号分析仪.主要核心是快速傅立叶算法(FFT)的实现.以下是我们写的实现1,2,4,8,16,32,64,128,256,512,1024,2048点的浮点FFT计算代码,利用查表的方法:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Writed by levension @SCUT

//

//Date:2007.09.04

//

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include"table.h"

#include<math.h>

intcount[]={1,2,4,8,16,32,64,128,256,512,1024,2048};

/******************************************************

**基2碟形算法

**dataR--采样点的实部的指针

**dataI--采样点的虚部的指针

**n--点数的幂指数

**0,1,2,3,4,5,6,7,8,9,10,11分别对应者点数

**1,2,4,8,16,32,64,128,256,512,1024,2048

******************************************************/

void FFT(float *dataR,float *dataI,int n)

{

int i,L,j,k,b,p,xx,qq;

int x[11]={0};

float TR,TI,temp;

/********** following code invert sequence************/

for(i=0;i<count[n];i++)

{ xx=0;

for(j=0;j<n;j++)

x[j]=0;

for(j=0;j<n;j++)

{x[j]=(i/count[j])&0x01;}

for(j=0;j<n;j++)

{xx=xx+x[j]*count[n-j-1];}

dataI[xx]=dataR;

}

for(i=0;i<count[n];i++)

{

dataR=dataI;

dataI=0;

}

/************** following code FFT*******************/

for(L=1;L<=n;L++)

{

/* for(1) */

b=1; i=L-1;

while(i>0)

{ b=b*2;

i--;

}

/* b= 2^(L-1) */

for(j=0;j<=b-1;j++)

/* for (2)*/

{ p=1; i=n-L;

while(i>0)

/* p=pow(2,7-L)*j; */

{ p=p*2; i--;}

p=p*j;

for(k=j;k<count[n];k=k+2*b)

/* for (3) */

{

TR=dataR[k];

TI=dataI[k];

temp=dataR[k+b];

//QQ=2*pi*p/count[n];

qq=p*count[11-n];

//////////////////////////////查表/////////////////////////////////////

dataR[k]=dataR[k]+dataR[k+b]*cos_tab[qq]+dataI[k+b]*sin_tab[qq];

dataI[k]=dataI[k]-dataR[k+b]*sin_tab[qq]+dataI[k+b]*cos_tab[qq];

dataR[k+b]=TR-dataR[k+b]*cos_tab[qq]-dataI[k+b]*sin_tab[qq];

dataI[k+b]=TI+temp*sin_tab[qq]-dataI[k+b]*cos_tab[qq];

////////////////////////////////////////////////////////////////

}

/* END for (3) */

}

/* END for (2) */

}

for(i=0;i<count[n];i++)

{

dataR=sqrt(dataR*dataR+dataI*dataI);

dataR=dataR/count[n-1];

}

dataR[0]=dataR[0]/2;

}

下面附上TABLE.C文件

评论
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

推荐帖子
精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何构建一个触摸传感器电路

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

×