[工学]谱分析算法仿真及DSP实现.doc_第1页
[工学]谱分析算法仿真及DSP实现.doc_第2页
[工学]谱分析算法仿真及DSP实现.doc_第3页
[工学]谱分析算法仿真及DSP实现.doc_第4页
[工学]谱分析算法仿真及DSP实现.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计(论文)说明书题 目:谱分析算法仿真及DSP实现 院 (系): 专 业: 学生姓名: 学 号: 指导教师: 职 称: 2011年12月10日摘 要本文是基于软件无线电平台的信号谱估计系统的设计,目的是将接受到的信号预处理,方便将来提取信号的特征值。而且本设计前瞻性地采用了基于模型的设计方法,最大限度的减少了手工编写代码的工作量,尽量将精力集中于算法的实现上,整个设计从模型的建立到代码的生成都有详细的说明,因此本文对于想利用模型设计来生成代码的人来说具有非常大的借鉴意义。随着多体制通信互联和软件无线电的发展,通信信号的处理和调制识别逐渐成为了一个非常重要的课题。为了将信号的特征值剥离出来,非常有必要对信号进行功率谱分析和时频谱分析。功率谱分析是在频域上对信号进行分析,但由于积分的作用,会丢失时域的特征,其结果为一段信号在频域上整体的刻画,而进行时频谱分析不仅能对信号进行时域上的分析,还能在频域上进行分析,为提取信号特征值,信号的识别提供有力的分析依据。本设计第一步先手动编写涉及硬件的代码,使其能够将数据通过EDMA快速搬移到DSP的内部RAM中,而后的算法部分,如快速傅里叶变换,功率谱分析等一系列算法则通过在Matlab里仿真,当验证模型的正确性后就将其优化并生成CCS编译器能用的归档库,而后在手工编写的代码中调用该子函数,完成了整个系统的设计。最后将DSP运算的结果和Matlab的仿真结果进行比较,发现两者之间的误差非常小,可以达到所需的要求。关键词:EDMA;快速傅里叶变换;功率谱;代码生成AbstractThis article describes a design of the signal spectrum estimation system based on the soft design radio, the goal is to pretreat the receiving signal, and to facilitate the extraction of signal characteristic value in the future. Moreover this design forward-looking uses the model design method, reduces the manual compilation code work at maximum limit, and concentrates on algorithm realization as far as possible, the entire design provide detaile from the model establishment to the code production, therefore this article is usefull to those who want to generate code using the model .With the development of the multi-institutional communication interconnection and the software radio, communication signal processing and the modulation recognition has become a very important topic gradually. For extracting the signal characteristic value, it is necessary to analyse the signal power spectrum and the time domain spectral. The power spectrum analysis of the signal is in the frequency domain, but as a result of the integral function, it will lose the characteristic of time domain, this results for a signals characters in the whole frequency domain, and the time-frequency spectrum analysis can not only in the time domain analysis, but also in the frequency domain analysis, in order to extract the signal feature values, a strong signal of the identification of analytical basis. The first step of the design of the hardware involved in writing the code manually to enable them to quickly move the data to the DSP internal RAM through the EDMA, then the algorithm part, such as fast Fourier transform, power spectrum analysis and a series of algorithms is by Matlab in the simulation verify the correctness of the model as its optimization and after the CCS compiler can generate an archive library, and then manually write the code in the subroutine call to complete the entire system. Finally, the results of DSP operations and Matlab simulation results were compared and found that the error between the two is very small, the requirements can be achieved. Keyword: EDMA;FFT;PSD;Code generation目 录引言11 概述21.1 任务21.2 内容21.3 相关研究情况21.4 完成的工作22 DSP技术及应用22.1 DSP技术综述22.2 DSP软件设计方法的变革32.2.1 汇编语言编程42.2.2 C语言编程42.2.3 MATLAB辅助设计方法42.2.4 MATLAB-DSP集成设计环境(系统级集成环境)52.3 DSP技术的应用53 系统方案及硬件平台63.1 硬件平台63.1.1 开发板63.1.2 DSP芯片TMS320C6713B的结构及特点64 系统软件功能实现方法84.1 实现方法比较84.1.1 手工编写代码84.1.2 使用Matlab生成嵌入式代码84.2 嵌入式代码生成94.2.1 RTW自动生成代码的过程94.2.2 用户自定义目标板代码生成步骤95 软件功能设计与实现105.1 FFT、功率谱定义105.2 FFT、功率谱算法建模115.3 FFT、功率谱算法代码生成155.4代码修改及优化165.5 Simulink仿真与硬件在线仿真的误差对比166 总结23谢 辞24参考文献25附 录26 桂林电子科技大学课程设计(论文)报告用纸 第26页 共26页引言通信在我们日常生活中,已经成为不可或缺的名词。随着科技的发展和人类生活方式的变化,无线电的地位越来越突出,并给人类的生活带来了无限的便利。20世纪7080年代,无线电由模拟向数字全面发展,从无编程向可编程发展,由少可编程向中等可编程发展,出现了可编程数字无线电(PDR)。由于无线电系统,特别是移动通信系统的领域的扩大和技术复杂度的不断提高,投入的成本越来越大,硬件系统也越来越庞大。为了克服技术复杂度带来的问题和满足应用多样性的需求,特别是军事通信对宽带技术的需求,提出在通用硬件基础上利用不同软件编程的方法。20世纪80年代初开始的软件无线电的革命,将把无线电的功能和业务从硬件的束缚中解放出来。软件无线电就是宽带模数及数模变换器(A/D及D/A)、大量专用/通用处理器、数字信号处理器(DigitalSignalProicesser,DSP)构成尽可能靠近射频天线的一个硬件平台。在硬件平台上尽量利用软件技术来实现无线电的各种功能模块并将功能模块按需要组合成无线电系统。例如:利用宽带模数变换器(AnalogDigitalConverter,ADC),通过可编程数字滤波器对信道进行分离;利用数字信号处理技术在数字信号处理器(DSP)上通过软件编程实现频段(如短波、超短波等)的选择,完成信息的抽样、量化、编码/解码、运算处理和变换,实现不同的信道调制方式及选择(如调幅、调频、单边带、跳频和扩频等),实现不同保密结构、网络协议和控制终端功能等。软件无线电所特有的多频段、多功能、多体制的特性,使其在进行解调之前就需要对信号的调制模式以及参数进行识别和估计,才能准确解调出调制信息,所以调制信号识别是软件无线电台必须具备的功能之一,而调制信号特征的识别重点在于调制信号的特征提取。传统的傅里叶变换经过一个世纪的发展,已成为信号处理领域最强有力的分析方法和工具,这主要是由于它的正交性和鲜明的物理意义以及快速简洁的计算方法所决定的。但是,由于傅里叶变换是对时间求积,去掉了非平稳信号中的时变信号,因而要求信号是平稳的,对时变非平稳信号难以充分刻画。为了满足对突变信号、非平稳信号分析的要求,信号的识别的时域特征和频域特征同样重要,为此,短时傅里叶变换显得尤其重要,它不仅能提供时域上的分辨率,更能提供频域上的分辨率,为信号的识别提供有力的分析工具。Matlab Simulink环境是一个功能很强大的数字仿真平台,它是用于动态系统和嵌入式系统的多领域仿真和基于模型的设计工具。对各种时变系统,包括通讯、控制、信号处理、视频处理和图像处理系统,Simulink提供了交互式图形化环境和可定制模块库来对其进行设计、仿真、执行和测试。本文采用Matlab Simulink环境,建立了FFT,PSD模型,理论验证模型的可行性,并生成嵌入式C代码,在TMS320C6713上进行硬件验证。1 概述随着科技的进步,产品项目越来越巨型,动辄几十万行的代码越来越难维护,传统的自底向上的设计方法越来越难满足当今产品设计的需要,为了减少编程人员的工作量和增强代码的可维护性,自顶向下的基于模型的设计应运而生。基于模型的设计中,通过建模和仿真来获得从需求到设计的实现和测试,在开发编码之前的早期开发阶段就对模型进行测试,将产品的缺陷暴露在项目开发的初期,并在开发过程中持续不断地验证与测试,这样工程师就可以把主要精力放在算法和测试用例的研究上,确保规范的完整性和无歧义性,最后自动代码生成有效地减少了人为引入错误的可能,且大大缩短开发周期与成本,降低开发难度,并且软件的一致性好,软硬件整合简单,可靠性高。软件无线电的思想是在统一硬件平台用软件实现大部分功能,这样采用基于模型的设计非常有利于项目的设计与开发。本课题采用目前流行的基于模型的设计方法在Simulink下完成算法的仿真,最后生产嵌入式代码,在与手动编写的硬件相关的代码整合后完成整个设计。1.1 任务本课题的任务是在硬件开发平台GN0204上编程实现调制信号的处理。能够对信号进行FFT变换,功率谱分析,时频谱分析。1.2 内容本课题的内容是将信号采集下来并对信号进行处理。在识别调制信号前,必须要对信号进行处理,将信号通过快速傅里叶变换,功率谱分析。1.3 相关研究情况目前国内嵌入式代码编程都采用人工编写代码的方式,这样不仅效率低,开发周期长,而且容错率低。而国外很多大型项目使用基于模型的设计工作流程和统一的开发测试平台(如MATLAB、SCADE等),可使系统开发和验证自动化,减少费用和降低错误。而自动代码生成有效地减少了人为引入错误的可能,而且使代码规范化,软件统一性好,软硬件整合简单,可靠性高。目前采用基于模型的设计的大型项目有欧洲的空客380、美国的GM混合动力车、诺-马公司的联合攻击机等。1.4 完成的工作完成了对信号的高速采集和对采集到得信号进行快速傅里叶变换,功率谱分析这些工作。2 DSP技术及应用2.1 DSP技术综述随数字信号处理技术在最近20年获得了广泛的应用。数字信号处理理论和算法是这项技术的一个核心,数字信号处理器(DSP)是这项技术的另一个核心,其中可编程的DSP可以将性能很好的信号处理算法方便地应用到实时信号处理中。MATLAB是一个强大的分析、计算和可视化工具,特别适用于数字信号处理算法的分析和模拟,使用非常方便。但由于MATLAB程序的执行速度相对于实时信号处理来说,仍显得太慢,而MATLAB所依赖的平台是计算机等设备这类设备的体积、功耗不适合于实时信号处理,设备的结构也无法满足实时信号处理所要求的高速数据输入/输出,因此MATLAB在数字信号处理技术中,适合于对算法的模拟及对实测数据的事后处理。不过,目前有一种新的技术,可以将DSP和MATLAB两者密切结合起来,充分利用两者的特长,有力地促进数字信号处理算法的实现。就软件可编程而言,DSP与单片机、PC机的CPU的编程设计方法有类似之处,但DSP比单片机的运算速度高得多,又比CPU的功耗、设计复杂度低得多。因此,DSP是进行实时数字信号处理的最佳选择。2.2 DSP软件设计方法的变革随着计算机技术、DSP技术的发展,以DSP为核心进行信号处理所用到的软件实现方法经过了多次变革。表1.1按DSP软件设计方法的变革历程,列出了各种软件设计实现方法及其特点。表1.1 不同的软件设计方法软件设计方法第一、二步模拟第三、四步编程、调试开发周期难度代码效率代码长度可移植性完全汇编汇编汇编最长最大最高最小无C+汇编C汇编长最大最高最小无C+C/汇编CC/汇编混合中中高中部分C+CCC短小低大完全MATLAB+C/汇编MATLABC/汇编混合短中高中部分MATLAB+CMATLABC最短小低大完全MATLAB集成MATLABMATLAB最短最小最低最大完全表1.1中,代码的效率指运行速度,而代码长度指的足代码所占用的存储器空间。代码的效率和代码长度在大多数情况下是一致的,即代码长度越短,代码的效率/执行速度就越高,但在某些常见情况下,两者是相矛盾的。例如,编写一段循环执行的代码,代码长度很短,但由于每次循环执行时,DSP都要判断循环计数器并使用跳转指令(打断了流水线),执行速度并不高,而如果将这个循环体全部展开,循环体内的代码技循环次数重夏写出,代码长度大大加长,但DSP不再判断循环计数器,也不使用跳转指令(不打断流水线),执行速度会显著提高。类似地还有使用于程序还是使用宏的选择问题。对此,将c语言等高级语言编写的程序编译成DSP的汇编代码时,可以进行编译时的优化选择:使用代码长度的优化,还是代码速度的优化。表1.1中,代码的可移植性指的是,同样的程序能否在不同的DSP型号,或同一DSP但不同硬件配置的电路板上运行。显然,DSP汇编语言编写的程序可移植性差,而用C语言编写的程序可移植性好。2.2.1汇编语言编程20世纪80年代,DSP刚刚出现并应用于信号处理领域,DSP的性能指标比较低,运算速度大约在2千万次每秒,设计人员为达到足够的运算速度,只能采用表1.1中的方法和,用DSP的汇编语言编写高效、专用的程序代码;只是在算法模拟阶段采用C语言。2.2.2C语言编程20世纪90年代前半期,DSP的运算速度接近l亿次每秒,设计人员开始采用C语言的编程方法,以求降低开发难度、缩短开发周期,但受限于DSP的速度、存储器容量、整个硬件系统的成本,只能部分地采用C语言设计程序,关键程序段仍然要结合DSP的硬件特点,编写DSP汇编程序。目前,最快的DSP运算速度已经超过l0亿次每秒,外围器件,特别是高速、大容量的SDRAM型存储器的性能也越来越高。随着DSP速度不断提高和硬件成本不断降低,以及用户要求的产品开发周期的不断缩短,C语言设计的优越性越来越明显,它不仅降低了开发难度,缩短了开发周期,而是有很好的通用性和可移植性,即使淘汰或更换了DSP型号,大部分源程序仍然可以移植到新的DSP电路板上;同时,DSP、存储器的性能/价格比的大幅提高也有利于克服C语言设计的种种局限性,例如代码效率低、代码占用的存储容量太大等缺陷已不再是设计者考虑的主要问题,设计中考虑的主要问题是如何缩短开发周期,尽快推出产品。2.2.3MATLAB辅助设计方法20世纪90年代后期,MATLAB作为一种有效的信号处理工具出现后,逐渐渗透到DSP的设计当中。MATLAB是一个强大的分析、计算和可视化工具,使用非常方便。用C语言要比用汇编语言编程方使得多,而用MATLAB又比用C语言编程方便得多。在设计一个实时DSP系统前,常常用MATLAB对算法在DSP上运行的性能进行模拟,以验证算法本身的正确性。在DSP系统的程序调试过程中,利用MATLAB还可以产生模拟数据,供调试DSP时使用,并且将DSP的处理结果和MATLAB的处理结果进行比较和验证。在将一个新的数字信号处理算法应用于实际前,先用MATLAB进行模拟验证,当模拟结果满意时再招算法修改成C或DSP汇编语言,在目标DSP上实现。在DSP软件设计的整个过程中,这是最花费时间的部分,编程者要花费大量的时间编写程序,并在目标DSP 上调试程序。当MATLAB模拟结果令人满意后,我们常常把MATLAB的结果作为标准值,与用C或DSP汇编语言编写的DSP代码执行结果进行比较。这两者之间通常会有差别,出现差别的主要原因在三个方面:代码编写有误:实时处理时,DSP外围硬件接口的问题:算法用DSP实现时,数据要量化,存在量化误差。考虑到MATLAB与DSP上的C或汇编在运算精度、功态范围上的不同,即使DSP上的C或汇编程序编写无误,也有必要在目标DSP上重新验证算法的性能。在人多数情况下,MATLAB的模拟结果和DSP的运行结果在性能上的差别是很小的,可以忽略,但有时必须留心这一差别。2.2.4MATLAB-DSP集成设计环境(系统级集成环境)MATLAB使用方便的一个原因是它是一种解释型的语言。但解释型语言的一个缺点是执行速度很慢,另一个缺点是必须在MATLAB环境下才能运行,而安装MATLAB环境需要几百兆字节以上的硬盘空间和相当大的计算机内存。只有将其编译成可执行的应用程序,才能提高执行速度,并独立于MATLAB环境运行,这样生成的代码长度和需要的内存空间都小得多。一般来说,MATLAB程序总是光被翻译成C/C+。然后被诸如MSC+等开发工具编译成可执行文件。在较新版本的MATLAB(6.0以上)环境下提供了这一工具,能将MATLAB程序转换成DSP代码。其方法是:MATLAB程序先被转换为C程序,再针对特定的DSP型号、DSP目标板,编译(转换)成DSP汇编指令,最后生成DSP的可执行代码。但研究设计人员可以不去关心MATLAB程序如何转换为C程序,C程序如何转换为特定的DSP汇编指令等这些转换步骤是如何具体实现的,因为这是由MATLAB自动完成的。特别是对于专门研究算法的人员,他们无需熟悉,甚至无需了解具体的DSP硬件结构、功能、指令、DSP的存储器配置,只要在MATLAB环境下,就可检验算法在一种或几种DSP上的实际运行效果。这样,就把在MATLAB下模拟DSP实现某个算法的繁琐过程,以及用C和汇编语言编写、调试DSP代码的复杂性掩盖起来了。用户只要会使用MATLAB,即可在DSP上测试算法。2.3 DSP技术的应用根据美国的权威资讯公司统计,目前可编程DSP在市场上的使用情况如下:通信占56.1;计算机占21.16;消费电子和自动控制占10.69;军事/航空占4.59;仪器仪表占3.5;工业控制占3.31;办公自动化占0.65。直观地说明了DSP应用的广泛性和今后的发展趋势。DSP的市场获得飞速发展,主要受以下驱动力的影响。首先是因特网(Internet),众所周知,在Internet上,人们可以通过电子邮件(E-mail)来交换信息,通过全球信息网(WWW)世界范围数据库服务器来检索、查询各种信息。其范围涉及几乎所有的自然科学和社会科学领域,可谓包罗万象。由此形成一种Internet文化,这种文化将对人类社会产生不可估量的影响。因此,Internet网的发展和普及是不容怀疑的。Internet网的建造和扩展需要相应的设备,而它们中的很多部件都和DSP软硬件有关。其次是可视电话和会议电视,或者更为广泛地说是多媒体通信系统。过去由于技术的限制,不能同时满足视听要求。电话只能传输声音;电报只能传输文字;电视虽能同时传输声音和图像,但只能是单方向的广播,不能相互交流。随着高技术的发展,特别是卫星通信和光纤通信的发展,通信带宽已不再成为多媒体通信的主要“瓶颈”。再加上个人计算机逐渐普及到家庭,通信、广播、电视和计算机合为一体的时代已为时不远了。多媒体通信系统所需要的图像压缩(目前工业标准是JPEG、MPEG-1、MPEG-2,当然还会出现一些新的算法如小波变换等)、声音压缩(标准有G.711、G.722、G.728、G.729等)以及传输所需的高速调制解调器都和DSP有关。3 系统方案及硬件平台3.1 硬件平台3.1.1开发板本设计使用的是通信信号处理开发板GN0204,其搭载的硬件配置如下:采用TI公司的高速浮点型处理器TMS320C6713B,主频200MHz,300/225MHz可选配,分别达1600/2400/1800 MIPS,具有强大的通用信号处理能力;ALTERA CycloneII EP2C70F672C8 芯片,门数资源非常丰富,可满足目前绝大多数的信号处理硬件编程和控制能力;ALTERA MAXII EPM570T144芯片,可用于板上DSP和FPGA程序代码在线升级;1片64Mb 16位总线FLASH芯片,用于存储DSP运行代码和大量用户非易失性数据;1片128Mb 32位总线SDRAM,扩展DSP外部存储器资源;1片64/128/256kb EEPROM,用于存储用户非易失性数据;2片2/4/8Mb 16位总线SRAM,扩展FPGA外部存储器资源,可做为数据采集乒乓存储使用; 1个实时时钟模块(RTC),保存实时时间信息,掉电不丢失;6个用户指示灯;1个用户多功能指示彩灯;1个系统复位按键;1个配置拨码开关;3.1.2DSP芯片TMS320C6713B的结构及特点C6000 DSP的基本结构包括:哈佛结构 哈佛结构的主要特点是讲程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个互相独立的存储器,每个存储器独立编程,独立访问。与两个存储器相对应的是系统中设置了程序总线和数据总线,从而使数据的吞吐率提高了一倍。由于程序和数据存储在分开的空间中,因此取址和执行能完全重叠。流水线结构 流水线与哈佛结构有关。DSP广泛采用流水线,以减少指令执行的时间,从而增强了处理器的处理能力。处理器可以并行处理24条指令,每条指令处于流水线的不同阶段。图3.1所示为一个流水线操作的例子。多总线结构 许多DSP内部都采用了多总线结构,这样保证保证在同一个机器周期内,可以同时访问数据和程序存储空间,因此可以解决传统芯片的总线冲突问题,使系统的速度和效率大大提高。专用的硬件乘法器 乘法速度越快,DSP的性能则越好。由于具有专用的硬件乘法器,乘法可以在一个指令周期内完成。特殊的DSP指令 为了更好的满足数字信号处理应用的需要,在DSP指令系统中,设计了一些特殊的DSP指令,以完成一些专门的算法。图3.1 流水线结构快速的指令周期 哈佛结构、流水线结构、专用的硬件乘法器、特殊的DSP指令,再加上集成电路的优化设计,可使DSP的指令周期在10ns以下,C6000系列最大处理能力可达6000MIPS(MIPS为每秒百万条指令)C6000的8个独立功能单元里有2个16位乘法器(32位结果)和6个算术逻辑单元(32位/40位)。它采用加载/存储体系结构,数据在多处理单元之间的传输依靠32个32位通用的寄存器。C6000 DSP的指令集可以进行字节寻址,获得8位/16位/32位数据,因此存储器可以得到充分利用。指令集中有位操作指令,包括域操作、指令提取/设置/清除以及位计数和归一化等等。所有的指令都是条件执行指令,可以根据某种条件决定是否执行。C6000 DSP的存储器寻址空间为32位,其中芯片内部集成了17Mbit片内SDRAM,片内SDRAM被分为两部分:一是内部程序/缓冲存储器,二是内部数据/缓冲存储器。32位外部存储器接口包括直接同步存储器接口,可与同步动态存储器(SDRAM)、同步突发静态存储器(SBSRAM)连接,主要用于大容量、高速存储器;还包括直接异步存储器接口,可与静态存储器(SDRM)、可擦可编程只读存储器(EPROM)连接,主要用于小容量数据存储和程序存储;还有直接外部控制接口,可与先入先出(FIFO)存储器连接,这是控制接口线最少的存储方式。因此C6000 DSP可很方便地配置不同速度、不同容量、不同复杂程度的存储器。TMS320C6713的特点包括:具有8个功能单元的先进VIEW结构体系的CPU,包含2个乘法器和6个算术逻辑单元(ALU)。每个周期可以执行多达8条指令,是典型DSP芯片的10倍。运行设计者开发高效的类RISC(精简指令代码),以便提高开发效率。指令打包。为串行或并行执行8条指令提供代码长度等效处理。减少代码长度和降低功耗所有指令可以实现条件执行减少高开销的分支转移能在独立的功能的单元里高效的执行代码。高效的C编译器为快速开发和提高并行工作效率而使用的汇编优化器。支持8/16/32位数据,能高效的支持各类存储器。为语音合成和其他应用提供40位的算术精度饱和和归一化技术为关键的算术操作提供了支持。提供对域操作和指令提取、设置、清除及位计数的支持。硬件支持单精度(32位)和双精度(64位)的IEEE浮点操作提供硬件支持。32位整形乘法可以获得32位或64位的结果。4 系统软件功能实现方法4.1 实现方法比较4.1.1手工编写代码最传统的做法是全部手工编写代码,但存手工编写代码带来的问题是程序员必须要有良好的理论基础和过硬的编程能力,能够将理论算法转换成C语言,往往这个部分是最复杂,最困难的,而且由于个人的理解不同,对算法的优化能力各不相同。而且人工维护代码花费时间长,成本高,代码风格各异,使得程序的系统化集成存在一定困难。4.1.2使用Matlab生成嵌入式代码目前比较流行的一种做法是在Matlab中建模,仿真满意后通过后嵌入式代码生成,直接完成整个代码的设计。这种自顶向下的方法以及快速的开发流程已经越来越受大公司的青睐,例如空客830就是采用基于模型的设计。这样就让程序员集中精力于算法上,而不是专注于编写程序的细节上。本课题就是采用这样的方法来完成核心算法,当然涉及硬件的部分还是采用手工编写代码。4.2 嵌入式代码生成Embedded IDE Link可将MATLAB与CCS进行无缝链接。用户可以利用MATLAB脚本和Simulink模型在TI系列DSP上调试、验证自动生成嵌入式代码。利用RTW-EC等工具,从模型生成实时C代码,通过For Use with TIs Code Composer Studio 自动调用CCS开发工具来编译链接生成的C代码,并自动下载到TI的目标板上执行生成的代码。主要工作流程图4.1所示。Simulink and Real-Time WorkshopEmbedded IDE LinkTarget Support PackageThird-Party IDEEvaluation or Custom Board实现概念图4.1 代码生成工作流程4.2.1RTW自动生成代码的过程利用RTW(Real-Time Workshop)来生成实时代码的过程分成4个阶段:(1)用户建立MATLAB/Simulink/Stateflow模型model.mdl。RTW读取模型文件并对其进行编译,形成描述模型的model.rtw文件,该文件以ASCII码的形式进行存储。(2)TLC目标语言编译器读取model.rtw文件中的信息,将模型转化成源代码。TLC(Target Language Compiler)文件有两种形式,系统TLC文件和模块TLC文件。前者控制整个模型的代码生成,不同的目标使用不同的系统目标文件,比如一般实时目标使用grt.tlc,嵌入式实时目标使用ert.tlc;而后者仅针对某一模块,决定某一模块对应生成什么样的代码。(3)生成指定目标的代码。RTW代码生成器需要makefile模块,该文件指定合适的C或C+编译器及编译过程中的编译器选项,通过代码生成器将makefile模块文件生成目标makefile文件(model.mk),指导程序编译和链接模型中生成的源代码、主程序等。(4)链接开发目标程序4.2.2用户自定义目标板代码生成步骤对于大多数的项目开发,用户必须制作自定义的硬件平台,但有些硬件设备无法在simulink模型库中找到相应的驱动模块。对于这样的系统,用户无法使用simulink自带的模块建立应用模型。解决这个问题有4中方案:1、使用S-Function编写设备驱动模块;2、手工编写设备驱动程序和工作状态配置代码(例如ADC、DAC程序,工作在定时或中断状态等);3、将算法模型生成归档库;4、为算法模型生成的代码手工设置接口。本文主要说明归档库的生成和使用。Simulink自带的模块可以快速设计多种算法,如果将其生成DSP归档库,在现有工程中调用该库,可极大地加快工程的开发。5 软件功能设计与实现5.1 FFT、功率谱定义(1)DFT的精确定义为: (5.1)实质上,DFT是一个N点序列到另外一个序列的映射。前者包含了时域信息,后者包括了频域信息。被映射的序列可以是实序列也可以是复序列。由定义:= (5.2)为了简化DFT的表达式,使用了符号。这个符号被称作旋转因子。并且可以推得以下性质:(1) 以N为周期的周期性: =(2) 复共轭对称性: =(3) 中心对称性: =FFT算法设计的基本思想,就是充分利用DFT的周期性和对称性,减少重复的计算量;并把N点长序列分成几个短序列,减少每个序列长度,可大大减少计算量。实践中使用最多的FFT是“基2”算法。所谓“基2”,就是令DFT的点数N满足,(M为自然数)。FFT基2算法分为时域抽取法(Decimation In Time)和频域抽取法(Decimation In Frequency)两大类。因本文不涉及到具体的C编程,可以不去深究。(2)本文的功率谱计算采用最简单的周期图样法。周期图样法,是1898年由舒斯特提出的。它是直接由傅里叶变换得到的:将随机信号的N个样本点值看作为能量有限的信号,取其傅里叶变换,得到,然后再取其幅值的平方,并除以N作为的真实功率谱的估计。即: (5.3)由定义式(5.3)可以看出,周期图样法功率谱密度同样可以使用FFT来计算。不过这个定义式实用价值并不高,本文使用的是改良的Welch算法来提高周期图样法估计。即对采样数据分成多个不重叠的数据段做周期图并求平均。分段采用非矩形窗,由于非矩形窗在边沿趋近于零,从而减少了分段对重叠的依赖。选择合适的窗函数,采用每段一半的重叠率能大大降低谱估计的方差。在这种方法中,记录数据分为K=N/M段,即 (5.4)每段M个取样。数据窗wn在计算周期图之前就与数据段相乘,于是可定义K个修正周期图 (5.5)U是窗口序列函数的平均能量 (5.6)则定义谱估计为 (5.7)5.2 FFT、功率谱算法建模因为AD采样的数据为有极性的整型变量,而FFT、功率谱模块只能输入浮点型变量,因此要在输入接口和FFT、功率谱模块之间加入一个Data Type Conversion,以及输出和FFT、功率谱模块之间加入一个Data Type Conversion。总原理框图如图5.1所示,模型名称设为final.mdl:图5.1 FFT、PSD模型各模块设置按从左到右从上到下的顺序依次介绍:(1)In1因EDMA搬入的数据为512维的数组,因此要将In1的Port dimension设为512。如图5.2所示。图5.2 In1模块设置(2)Data Type Conversion将AD采样数据得到的int型变量转为single型变量。设置如图5.3所示:图5.3 Data Type Conversion模块设置(3)Magnitude FFT只是得到信号的幅度谱。设置如图5.4所示:图5.4 Magnitude FFT模块设置(4)Data Type ConversionFFT变换得到的幅度谱为single型变量,为方便传给FPGA用于显示,将single型变量转为int型变量。设置如图5.5所示:图5.5 Data Type Conversion模块设置(5)Out1同样的,输入是512维,则输出也应为512维,Port dimensions设为-1就为继承前面数据的维数。设置如图5.6所示:图5.6 Out1模块设置(6)periodogram使用改良的Welch功率谱算法。分为4段,窗函数为Hamming窗。设置如图5.7所示:图5.7 periodogram模块设置(7)Data Type Conversion本模块设置与上文(4)相同。(8)Out2本模块设置与上文(5)相同。(9)输入输出线设置如图5.8,5.9所示。图5.8 输入线设置图5.9 输出线设置5.3FFT、功率谱算法代码生成模型建立无误后即可生成代码,代码生成报告如图5.10所示:图5.10 代码生成报告从Inports和Outports可以看到代码的输入接口为数组in_data,维数为512,而输出接口为数组FFT_out和PSD_out,维数都为512。5.4代码修改及优化用CCS打开需要添加该归档库的工程EDMA_FFT.pjt。将库final.lib添加到工程里,代码修改。如添加头文件rtwtypes.h,以及声明全局变量int32_T in_data、int32_T FFT_out、int32_T PSD_data,声明子函数void final_step()。最后在中断8里添加数据处理子函数final_step()。这样就完成了从模型到嵌入式C代码的整个流程。5.5 Simulink仿真与硬件在线仿真的误差对比(1)Simulink仿真将模型的In和Out去掉,分别用信号源Sine Wave和Vector Scope替代。去掉Magnitude FFT和periodogram模块之后的Data Type Conversion模块,如图5.11所示。图5.11 建立FFT、PSD模型其中Sine Wave的设置如图5.12所示,Vector Scope设置如图5.13所示。图5.12 Sine Wave参数设置图5.13 Vector Scope参数设置设置好后,点击图标,进行仿真,这时会自动弹出两个窗口,分别为FFT和PSD的运算结果,如图5.14,5.15所示。图5.14 FFT仿真结果图5.15 PSD仿真结果(2)目标板在线仿真在CCS中编译好程序,然后连接目标板,将程序下载到目标板上。然后在如图5.16所示处加入断点。图5.16 硬件在线仿真然后点击图标,开始跑程序,可以看到程序会暂停且程序指针指向断点处。点击菜单栏的ViewGraphTime/Frequency,设置如图5.17所示,以便查看输入的波形。图5.17 Graph设置看in_data的波形同样的步骤设置分别如图5.18,5.19所示,分别查看FFT和PSD的运算结果。图5.18 Graph设置看FFT_out的波形图5.19 Graph设置看PSD_out的波形设置完后可以在CCS中看到很多直观的图形,如图5.20所示。图5.20 输入1MHz正弦波输入信号是1MHz的正弦波信号。AD采样率为39MHz,FFT长度为512点,看图5.16可知,FFT计算出频谱的尖峰在点13处,根据换算公式,可得: (5.8)即点13对应的频率为0.99023MHz,这是由于输入频率不是的整数倍,因而无法用整数点准确的表示,而且非整数倍频率还会出现频率泄露的现象,只能通过加窗得以改善,这里FF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论