并行fft频谱分析仪的设计.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
并行fft频谱分析仪设计 小组成员:孔峰 3007204154 王云飞3007204163 张然3007204173 组号:4c-2 07级电子信息工程2班 设计目标 本组旨在实现fft在51单片机上的并行运算。 虽然现在频谱分析仪一般基于快速傅里叶变换(即fft),大大减少了运算量,提高了运算速度,但仍显很慢。N点fft需要进行N2/2次复数乘法和N2/2次复数加法运算,而每次复数运算又有特定的复数函数实现,运算量相当可观。于是本组决定此系统由4个运算器并行进行运算,令有一个控制器控制如对扩展存储器存取等动作实现,旨在节省运算时间,提高效率。 完成情况简述 本组对于此命题并没有完全完成,软件设计,仿真等均基本完成,但结果并不尽如人意。 首先,由于89c52片内存储空间的限制,没有按照原定计划做1024点,即每个片子256点的fft。由于为实现并行运算,不能对变量用“即取即用”,而需每次单片机对外部存储器读取时,读足所需256点8位原始数据,和128点复数w值,w值实部虚部各8位,这显然已经超出了片内256B变量定义空间限制,因此转而做256点,即每个片子64点。 其次,由于硬件情况限制和时间仓促,在硬件上,没有完成原定5个最小系统电路的焊接,只焊接了两个最小系统,即一个控制器,一个运算器用来模拟结果,单个运算器内64个点的运算结果尚且正常,然终究看不到最终4个运算器结合的效果。 最后,本组成功得通过电路和软件结合的手段,解决了四个运算器对于外部扩展存储器的轮流存取、fft核心算法、数据存取与运算同时进行、片内存储和扩展存储统一编址等关键问题,颇有获益。 系统总体描述和系统框图 运算器189c52 运算器1 89c52 控制器89c52Pc输出电路ADC外存储器6264运算器489c52运算器389c52运算器289c52 控制器 89c52 Pc 输出电路 ADC 外存储器 6264 运算器4 89c52 运算器3 89c52 运算器2 89c52 系统框图如上所示,由五个51单片机最小系统组成,其中四个用于fft的具体运算,一个用于控制。控制器两个专门输出端接于运算器1的两个中断管脚,运算器1的两个输出端接于运算器2的两个中断管脚,以此类推,最终运算器4的输出端接到控制器的某个输入端,作为反馈信号,当某一动作完成时通知控制器。 调试流程 系统运行流程大致如下图所示: 遇到的问题及解决方法 每一步蝶形所需数据不同,若每一层蝶形运算都重新取值的话则大大浪费时间。 解决:若使用“先倒序后计算”方法,则前4步蝶形是单独一个片内64点本身的运算,后两步则才需要其他几个片子的运算结果。所以为解决每一步存取浪费时间的问题,在前4步中,用各自的倒序代替存取,便可以大大节省时间,最后两步则将所有数据集合到扩展存储器中,重新分配给每个运算器。这样也可以使控制器后期的程序设计更加连贯,控制器在完成了最后一步倒序后,直接组织输出 控制器对四个运算器控制的实现。 解决:51单片机外部中断引脚有两个int0和int1,这样,每个运算器中只允许两个中断服务程序,而每个运算器又要完成“读、写、计算”几个动作。在程序设计的过程中,我们将“读”和“计算”合并,即读数过后直接进算,只在读数结束后输出一个信号,通知下一个片子开始读数。这样的话,后面的片子还在取值过程中的时候,前面的片子已经开始了计算,一定程度上节省了时间,同时解决了控制的问题。 W值的获得 解决:由于c51编程中,允许变量定义的空间并不多。在程序调试过程中:auto segment too large的问题出现了多次。经过我们粗略计算,发现对于256点fft,每个片中128点的w值是占空间的首要。所以,我们将w值定义为常量,由扩展存储器中取出,放在每个片子的程序中去,而每个片子放程序的rom又足够大,这样,既节省了计算w值所需要的时间,又节省了空间。 几个片子对于一个扩展存储器的共享 实际上,这个问题我们在硬件实现上遇到的麻烦远比软件上麻烦很多,5个片子都要共享同一些地址/数据管脚,会遇到诸如“电流串扰“等等问题,这可能也成为了我们最终结果不尽如人意的原因之一。在软件方面,考虑到硬件实现中的延迟等问题,同步问题不好解决,对存储器的存取操作采用时分的方式进行,虽然地址指针改变等问题实现起来较为繁琐,但具有很高的可操作性,可实现性。 原理图 总体图 单个最小系统图 控制器与扩展存储器 Adc 程序流程图和原代码 Fft核心算法流程 结束写值T = A(k) + A(k + B)WNpA(k + B) = A(k) – A(k + B) WNpA(k) = T倒序读入x(n) 64点 128点w值 结束 写值 T = A(k) + A(k + B)WNp A(k + B) = A(k) –

文档评论(0)

189****6140 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档