下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023-2024学年黑龙江省齐齐哈尔市铁锋区高二下学期4月期中物理试题(解析版)
- 2024年江西省南昌市新建区三年级数学第一学期期末监测试题含解析
- 2024年江苏省苏州市数学六年级第一学期期末复习检测试题含解析
- 2024年无机矿物填充塑料项目发展计划
- 2024年江苏省南京市瑞金北村小学数学三上期末达标检测模拟试题含解析
- 2024年光学仪器、零件及附件项目发展计划
- 新课改形势下农村中学音乐教育形势与实施研究(闵萌)
- 2024-2025学年小学生体育文化教育的教学设计
- 2024年华池县数学四年级第一学期期末预测试题含解析
- 2024年湖南省岳阳市湘阴县六年级数学第一学期期末学业水平测试模拟试题含解析
- Unit 2 Different families 第四课时(教学设计)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2024-2025学年部编版语文七年级上册 第一次月考试卷
- 心肺复苏技能操作考核表
- 八年级物理上册 第一章 走进实验室 1.1走进实验室:学习科学探究教学设计 (新版)教科版
- 2024-2030年中国松香(CAS 8050-09-7)行业市场发展趋势与前景展望战略分析报告
- 二十届三中全知识点
- 2024广西专业技术人员继续教育公需科目参考答案(97分)
- 江苏省建筑与装饰工程计价定额(2014)电子表格版
- 公称通径DN和钢管外径φ对照表
- 羽毛球正手击高远球评课稿
- Excel股票交易记录表
评论
0/150
提交评论