下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、这次的任务是要用单片机做FFT(快速离散傅利叶变换),我觉得单片机越来越无敌了. 于是,连续几天被埋在时间与空间的斗争中.因为单片机的硬件资源和条件所限,不能像PC上的MatLab那样方便地进行FFT,我们单片机 (SPCE061A)的时钟频率最快约为50MHz,其RAM为2K字,ROM为32K字.从前学数据结构和算法的时候,千方百计想着用时间换空间还是用 空间换时间,现在才发现,那时是站着说话不腰疼,因为无论拿什么换什么,都是行得通的,损失的效率对于PC应用来说(就我现在的水平),是可以忽略不计 的,毕竟不是ACM(此理论的唯一一次失手就是在某次ACM比赛上). 整体来说,单片机最大的弱点还
2、是在于速度太慢,根本不可能进行实时FFT,而手动启动来进行运算的速度恐怕也慢得让人难以接受.为了加速,我几天苦苦挣扎 于算法的优化上.若不是因为数据精度还有一定的要求(汗),不能采用8Bit数据,我肯定会将两个数据压缩到一个字(16位)中去以节省空间.坚决榨干 单片机的每一滴油!我将所有的冗余计算全部转化为变量表示独立计算然后重复利用,而常量,哪怕是局部的,我也将它写成常数表(虽然还不知道如何在C中将常 数表写入ROM区,再汗一个).现在唯一的希望就在,单片机对浮点数运算的支持能力上.从前碰到浮点数我都会转化为整数,舍不得拿单片机来算浮点 数,而这次计算量实在太大了一点儿. 到目前为止,只在G
3、CC上编译通过,并且结果是正确的(与MabLab对照),接下来还是任重而道远啊 贴出主要部分代码:/*/FFT(快速离散傅利叶变换)/本例为8级256点数据/HUST STI OE0402 POPAPPLE/popapple/2007-8-9 18:10:20*/#include stdio.h#define LEVEL 8 /级数#define LENGTH 256 /点数/用结构体来表示复数typedef struct _JComplexfloat real;float image;JComplex,*pJComplex;typedef unsigned int uint;/WN为复常数码
4、表,为提高计算速度/其值为exp(-j*2*pi/LENGTH)n/n为0.LENGTH/2-1JComplex WNLENGTH/2= 1.0000,-0.0000, 0.9997,-0.0245, 0.9988,-0.0491, 0.9973,-0.0736, 0.9952,-0.0980, 0.9925,-0.1224, 0.9892,-0.1467, 0.9853,-0.1710, 0.9808,-0.1951, 0.9757,-0.2191, 0.9700,-0.2430, 0.9638,-0.2667, 0.9569,-0.2903, 0.9495,-0.3137, 0.9415,
5、-0.3369, 0.9330,-0.3599, 0.9239,-0.3827, 0.9142,-0.4052, 0.9040,-0.4276, 0.8932,-0.4496, 0.8819,-0.4714, 0.8701,-0.4929, 0.8577,-0.5141, 0.8449,-0.5350, 0.8315,-0.5556, 0.8176,-0.5758, 0.8032,-0.5957, 0.7883,-0.6152, 0.7730,-0.6344, 0.7572,-0.6532, 0.7410,-0.6716, 0.7242,-0.6895, 0.7071,-0.7071, 0.6
6、895,-0.7242, 0.6716,-0.7410, 0.6532,-0.7572, 0.6344,-0.7730, 0.6152,-0.7883, 0.5957,-0.8032, 0.5758,-0.8176, 0.5556,-0.8315, 0.5350,-0.8449, 0.5141,-0.8577, 0.4929,-0.8701, 0.4714,-0.8819, 0.4496,-0.8932, 0.4276,-0.9040, 0.4052,-0.9142, 0.3827,-0.9239, 0.3599,-0.9330, 0.3369,-0.9415, 0.3137,-0.9495,
7、 0.2903,-0.9569, 0.2667,-0.9638, 0.2430,-0.9700, 0.2191,-0.9757, 0.1951,-0.9808, 0.1710,-0.9853, 0.1467,-0.9892, 0.1224,-0.9925, 0.0980,-0.9952, 0.0736,-0.9973, 0.0491,-0.9988, 0.0245,-0.9997, 0.0000,-1.0000, -0.0245,-0.9997,-0.0491,-0.9988,-0.0736,-0.9973,-0.0980,-0.9952,-0.1224,-0.9925, -0.1467,-0
8、.9892,-0.1710,-0.9853,-0.1951,-0.9808,-0.2191,-0.9757,-0.2430,-0.9700, -0.2667,-0.9638,-0.2903,-0.9569,-0.3137,-0.9495,-0.3369,-0.9415,-0.3599,-0.9330, -0.3827,-0.9239,-0.4052,-0.9142,-0.4276,-0.9040,-0.4496,-0.8932,-0.4714,-0.8819, -0.4929,-0.8701,-0.5141,-0.8577,-0.5350,-0.8449,-0.5556,-0.8315,-0.
9、5758,-0.8176, -0.5957,-0.8032,-0.6152,-0.7883,-0.6344,-0.7730,-0.6532,-0.7572,-0.6716,-0.7410, -0.6895,-0.7242,-0.7071,-0.7071,-0.7242,-0.6895,-0.7410,-0.6716,-0.7572,-0.6532, -0.7730,-0.6344,-0.7883,-0.6152,-0.8032,-0.5957,-0.8176,-0.5758,-0.8315,-0.5556, -0.8449,-0.5350,-0.8577,-0.5141,-0.8701,-0.
10、4929,-0.8819,-0.4714,-0.8932,-0.4496, -0.9040,-0.4276,-0.9142,-0.4052,-0.9239,-0.3827,-0.9330,-0.3599,-0.9415,-0.3369, -0.9495,-0.3137,-0.9569,-0.2903,-0.9638,-0.2667,-0.9700,-0.2430,-0.9757,-0.2191, -0.9808,-0.1951,-0.9853,-0.1710,-0.9892,-0.1467,-0.9925,-0.1224,-0.9952,-0.0980, -0.9973,-0.0736,-0.
11、9988,-0.0491,-0.9997,-0.0245;/复数乘法,进出参数均为结构体指针void JC_Mul(pJComplex pjc_1,pJComplex pjc_2,pJComplex pjc_r)pjc_r-real = (pjc_1-real)*(pjc_2-real) - (pjc_1-image)*(pjc_2-image);pjc_r-image = (pjc_1-real)*(pjc_2-image) + (pjc_1-image)*(pjc_2-real);/复数加法,进出参数均为结构体指针void JC_Add(pJComplex pjc_1,pJComplex
12、pjc_2,pJComplex pjc_r)pjc_r-real = (pjc_1-real) + (pjc_2-real);pjc_r-image = (pjc_1-image) + (pjc_2-image);/复数减法,进出参数均为结构体指针void JC_Sub(pJComplex pjc_1,pJComplex pjc_2,pJComplex pjc_r)pjc_r-real = (pjc_1-real) - (pjc_2-real);pjc_r-image = (pjc_1-image) - (pjc_2-image);/FFT主程序void popFFT(pJComplex da
13、taIN)uint i,j;uint mask_1,mask_2;uint tempIndex_1,tempIndex_2;uint t,m_1,m_2,n_1;JComplex bufLENGTH/2;for(i=0;iLENGTH;i+) mask_1 = 1; mask_2 = 1(LEVEL-1); tempIndex_1 = 0; for(j=0;jLEVEL;j+) if(i&mask_1) tempIndex_1 |= mask_2; mask_1 = 1; dataINi.real = dataINtempIndex_1.image; dataINtempIndex_1.image = 0;for(t=1;t=LEVEL;t+) m_1 = 11; n_1 = LENGTH/m_1;/蝶形区个数 for(i=0;in_1;i+) for(j=0;jm_2;j+) /前半部索引 tempIndex_1 = (it)+j; /总索引(前半部) tempIndex_2 = tempIndex_1 + m_2;/总索引(后半部) JC_Mul(&dataINtempIndex_2,&WNj*n_1,&bufj); JC_Sub(&dataINtempIndex_1,&bufj,&dataINtempIndex_2); /必须先算后半部 JC_Add(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年茶叶线下门店加盟合同(茶品牌)
- 福州黎明职业技术学院《服装材料学》2025-2026学年期末试卷
- 泉州工程职业技术学院《小学教育》2025-2026学年期末试卷
- 合肥幼儿师范高等专科学校《高级财务会计》2025-2026学年期末试卷
- 安庆医药高等专科学校《国际经济学》2025-2026学年期末试卷
- 湖南省长沙市2026年九年级下学期语文期中试卷附答案
- 吉林电子技术就业趋势
- 2026年人教版小学四年级语文上册观察日记写作练习卷含答案
- 深度解析(2026)《GBT 4324.19-2012钨化学分析方法 第19部分:钛量的测定 二安替比林甲烷分光光度法》
- 深度解析(2026)《GBT 4028-2013计时仪器的检验位置标记》
- 2025年四川省广元市八年级地理生物会考考试真题及答案
- 配电作业安全培训教育课件
- 政治学基础知识试题及答案
- TCABEE080-2024零碳建筑测评标准(试行)
- 遗传性高胆红素血症诊疗专家共识(2025年版)解读课件
- 2026年煤炭垫资合同(1篇)
- 2026内蒙古地质矿产集团有限公司所属矿山企业招聘230人笔试备考试题及答案解析
- 2026年新版安全工程师安全生产法及相关法律知识
- 2025云南滇中新区股权投资有限公司招聘5人笔试历年备考题库附带答案详解
- 建筑项目危险作业安全操作规程
- 2025年江苏有线营业员笔试题及答案
评论
0/150
提交评论