完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
比较简单的~算是个半成品,还要和TDA2030功放机结合的~
源程序: /* * MusicSpectrum.c * * Created: 2013/4/30 19:34:05 * Author: 詹磊 */ #include #include #include "../Include/main.h" #include "../Include/ADC.h" #include "../Include/TFT.h" #include "../Include/FFT.h" compx Data[16]; void DrawingColumnar(uchar x,uchar y,uchar Wide,uchar High,int Data,int FullData,uint ColumnarColor) { uint i,tempData1,tempData2; uchar tempData; tempData=High-(uint)High*Data/FullData; tempData1=tempData*Wide; tempData2=((uint)High)*Wide; y=159-y; TFT_RamAddSet(x,y-High,x+Wide-1,y); for (i=0;i TFT_WriteByteDAT(BackgroundColor>>8); //高八位 TFT_WriteByteDAT(BackgroundColor); //低八位 } for (i=tempData1;i TFT_WriteByteDAT(ColumnarColor>>8); //高八位 TFT_WriteByteDAT(ColumnarColor); //低八位 } } int main(void) { uint temp; uchar i; ADCInit(); TFT_Init(); FFT_Init(); TFT_putstr(0,0,"--ZHAN LEI--n--MusicSpectrum--n--2013/04/30--",DataRed); while(1) { if (time==0) { for (i=0;i<16;i++) { ///* Data[i].real=255+sin(PI*2*i/FFT_N)*20 +sin(PI*2*i/FFT_N*2)*40 +sin(PI*2*i/FFT_N*3)*80 +sin(PI*2*i/FFT_N*4)*120 +sin(PI*2*i/FFT_N*5)*110 +sin(PI*2*i/FFT_N*6)*100 +sin(PI*2*i/FFT_N*7)*90 +sin(PI*2*i/FFT_N*7.9)*20; //*/ Data[i].imag=0; /* Data[i].real=(ADC_Buffer[i]-448)<<3; */ } FFT(Data); for (i=0;i<16;i++) { DrawingColumnar(8*i,0,2,63,Data[i].real,1023,DataGreen); } ADCSRA |=(1< } } /* * FFT.h * * Created: 2013/5/1 0:15:37 * Author: zhanddkk */ #ifndef FFT_H_ #define FFT_H_ #include "../Include/main.h" #define PI 3.1415926535897932384626433832795028841971 //定义圆周率值 #define FFT_N 16 //频谱分数 #define FFT_m 4 //最大级数(2^FFT_m=FFT_N) typedef struct COMPX { float real; float imag; }compx; extern void FFT_Init(); extern void FFT(compx *xin); #endif /* FFT_H_ */ /* * FFT.c * * Created: 2013/5/1 0:16:05 * Author: zhanddkk */ #include #include "../Include/FFT.h" float sin_tab[FFT_N],cos_tab[FFT_N]; //-------------------------------------------// //函数名:FFT初始化函数 //入口:void //出口:void //功能:建立sin()、cos()表 //-------------------------------------------// void FFT_Init() { uchar i; for (i=0;i sin_tab[i]=sin(PI*2*i/FFT_N); cos_tab[i]=cos(PI*2*i/FFT_N); } } //-------------------------------------------// //函数名:FFT运算函数 //入口:compx *xin:需要计算的FFT数据表结构体指针 //出口:void //功能:FFT运算,最后得到峰值功率频谱 //-------------------------------------------// void FFT(compx *xin) { uchar i,j=0,k; uchar L,b,p; uchar Nv2,Nm1; float TR,TI; //float tempData; float tempData_rc,tempData_is,tempData_rs,tempData_ic; float t; Nv2=FFT_N/2; //变址运算,即把自然顺序变成倒位序,采用雷德算法 Nm1=FFT_N-1; //--倒序运算--// for(i=0;i if(i t=xin[j].real; xin[j].real=xin[i].real; xin[i].real=t; } k=Nv2; while(k<=j) { j=j-k; k=k/2; } j=j+k; } //--基2的FFT蝶形运算--// for (L=1;L<=FFT_m;L++) /* Loop_1 L是L级蝶形运算 (2^FFT_m=FFT_N)*/ { b=1<<(L-1); /* b=2^(L-1) b是进行蝶形运算的两个数据的距离 */ for (j=0;j { p=1<<(FFT_m-L); /* p=2^(FFT_m-L) 旋转因子计算 */ p*=j; for (k=j;k TR=xin[k].real; TI=xin[k].imag; tempData_rc=xin[k+b].real*cos_tab[p]; tempData_is=xin[k+b].imag*sin_tab[p]; tempData_rs=xin[k+b].real*sin_tab[p]; tempData_ic=xin[k+b].imag*cos_tab[p]; /* tempData=xin[k+b].real; xin[k].real=xin[k].real+xin[k+b].real*cos_tab[p]+xin[k+b].imag*sin_tab[p]; xin[k].imag=xin[k].imag-xin[k+b].real*sin_tab[p]+xin[k+b].imag*cos_tab[p]; xin[k+b].real=TR-xin[k+b].real*cos_tab[p]-xin[k+b].imag*sin_tab[p]; xin[k+b].imag=TI+tempData*sin_tab[p]-xin[k+b].imag*cos_tab[p]; */ ///* xin[k].real=xin[k].real+tempData_rc+tempData_is; xin[k].imag=xin[k].imag-tempData_rs+tempData_ic; xin[k+b].real=TR-tempData_rc-tempData_is; xin[k+b].imag=TI+tempData_rs-tempData_ic; //*/ } } } //--功率峰值计算--// for (i=0;i xin[i].real=sqrt(xin[i].real*xin[i].real+xin[i].imag*xin[i].imag); } }
评分 |
|
相关推荐
97 个讨论
|
|
|
没想到还用到FFT、蝶形运算,avr运行得怎么样啊
|
|
|
|
|
|
|
|
|
只看到了一般源码!!!
|
|
|
|
|
|
|
|
|
算法是参考网上修改的:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
改造小萝卜机器人第二天——Visual Studio Code 解决ESP-IDF报错问题
2223 浏览 0 评论
3160 浏览 1 评论
6556 浏览 0 评论
3790 浏览 0 评论
3093 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 15:41 , Processed in 1.119063 second(s), Total 77, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2318