DSP技术及其应用实习报告_第1页
DSP技术及其应用实习报告_第2页
DSP技术及其应用实习报告_第3页
DSP技术及其应用实习报告_第4页
DSP技术及其应用实习报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

DSP技术及应用实习报告PAGE2DSP技术及应用实习报告DSP技术及其应用实习报告DSP技术及其应用实习报告学校:北华大学学院:电气信息工程学院专业:电子信息工程专业班级:姓名:学号:实习题目:FFT算法的实现指导教师:刘柏生实习日期:2014-6-3至2014-6-13目录1绪论 21.1实习题目 21.2课题研究的目的 21.3DSP简介 22开发运行环境CCS 33实验原理 44软件设计 84.1程序流程图 84.2源程序 84.3设计步骤 85实习心得 196参考文献 19附录 20 PAGE321.绪论1.1实习题目傅立叶变换是一种将信号从时域变换到频域的变换形式,是声学,语音,电信和信号处理等领域中一种重要的分析工具。快速傅立叶变换(FFT)是快速计算DFT的一种高效方法,FFT的出现使DFT的运算大大简化,运算时间缩短一至两个数量级之多,DSP芯片的出现使FFT的实现变得更加方便。1.2课题研究的目的随着电子技术和集成电路技术的飞速发展,数字信号处理已经广泛地应用于通信、信号处理、生物医学以及自动控制等领域中。离散傅立叶变换(DFT)及其快速算法FFT作为数字信号处理的基本变换,有着广泛的应用。特别是近年来,基于FFT的ODFM技术的兴起,进一步推动了对高速FFT处理器的研究。FFT算法从出现到现在已有四十多年代历史,算法理论已经趋于成熟,但是其具体实现方法却值得研究。面向高速、大容量数据流的FFT实时处理,可以通过数据并行处理或者采用多级流水线结构来实现。特别是流水线结构使得FFT处理器在进行不同点数的FFT计算时可以通过对模板级数的控制很容易的实现。分析和比较了各种FFT算法后,选择基2和基4混合频域抽取算法作为FFT处理器的而实现算法,一种高速、处理点数可变的流水线结构FFT处理器的实现方法。1.3DSP简介数字信号处理(DigitalSignalProcessing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。DSP有两种含义:DigitalSignalProcessing(数字信号处理)、DigitalSignalProcessor(数字信号处理器)。我们常说的DSP指的是数字信号处理器。数字信号处理器是一种适合完成数字信号处理运算的处理器。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。数字信号处理是以众多学科为理论基础的,它所涉及的范围及其广泛。例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。DSP主要应用在数字信号处理中,目的是为了能够满足实时信号处理的要求,因此需要将数字信号处理中的常用运算执行得尽可能快,这就决定了DSP的特点和关键技术。适合数字信号处理的关键技术:DSP包含乘法器、累加器、特殊地址产生器、领开销循环的等;提高处理速度的关键技术:流水线技术、并行处理技术、超常指令(VLIW)、超标量技术、DMA等。从广义上讲,DSP、微处理器和微控制器(单片机)等都属于处理器,可以说DSP是一种CPU。DSP和一般的CPU又不同,最大的区别在于:CPU是冯.诺伊曼结构的;DSP是数据和地址空间分开的哈佛结构。2.开发运行环境CCSTICodeComposerStudio(CCStudio)是TI

eXpressDSPTM实时软件技术的重要组成部分,它可以使开发人员充分应用DSP的强大功能。随着TI的TMS320C5000(C5K)和TMS320C6000(C6K)DSP平台的应用范围不断扩大,已经由其应用于下载视频流的手持因特网接入产品扩展到蜂窝通信网络和光网络的通信基础设施,eXpressDSPTM也便获得了越来越多软件工程师的青睐。

eXpressDSP还包含了DSP/BIOS可伸缩内核,TMS320TMDSP标准算法的应用互操作性和可重复使用性以及400多家第三方厂商支持。大部分厂商提供eXpressDSP兼容算法、即插式应用以及种类繁多的硬件配件和咨询服务。

CodeComposerStudio3.1能够使开发人员编制出更多面向高级DSP应用的、紧凑的高性能代码。通过实时接入的DSP开发者之家网站,内置UpdateAdvisor对最新的工具、驱动程序及其技术进行自动的流线式管理。只要确保代码和功能调用的正确输入,凭借编辑器程序中的DynamicCodeMaestro技术即可快速生成C和C++编码。TI的eXpressDSP产品市场营销经理MikeTrujillo说:通过充分利用CCS的工具与功能,编程人员能够大大缩短应用开发的时间。使用CCStudio生成的高度优化代码,工程师能够最大限度地发挥高性能DSP的全部功能,或者,在其它情况下能够以成本更低的器件来满足其应用需求。

CodeComposerStudiov3.1使开发人员能够无缝管理任何复杂程度的项目,其项目管理器通过一个集成版本的控制接口与通用资源控制器连接,管理着成千上万的文件。同时支持外部“文件制作”功能,使项目能够在PC和UNIX平台上交叉运行。他们可以通过采用一个改进的产品开发流程,就可实现同一组项目文件的共享。于是可以使他们的开发周期缩短数周,并获得时间上提前于竞争对手推向市场的优势。

对于那些希望把业界领先的C6000TMDSP平台的高性能与C5000TMDSP平台的低功耗相结合的系统开发者来说,CodeComposerStudiov3.1为使其同时调试混合多处理器成为了可能。CodeComposerStudiov3.1还增加了实时数据交换(RTDXTM)仿真功能,可支持来自任何地方的2至50个C5000和C6000DSP器件同时运行。此外,支持RTDX的仿真器还实现了实时DSP/BIOSTM仿真调试,该高级调试功能可以使开发人员更深入地了解DSP代码在硬件或仿真状态中的运行情况。N越大,DIT-FFT运算量就减少得越多,FFT的优越性就更加突出。例如,当N=256时,直接计算中复数乘法次数为65536,FFT算法中复数乘法次数为1024,速度提高倍数为64。3.实验原理3.1设计原理3.1.1离散傅里叶变换DFT对于长度为N的有限长序列x(n),它的离散傅里叶变换(DFT)为X(k)=N-nk(1)式中,WN=e-j*2π/N,称为旋转因子或蝶形因子。从DFT的定义可以看出,在x(n)为复数序列的情况下,对某个k值,直接按(1)式计算X(k)只需要N次复数乘法和(N-1)次复数加法。因此,对所有N个k值,共需要N2次复数乘法和N(N-1)次复数加法。对于一些相当大有N值(如1024点)来说,直接计算它的DFT所需要的计算量是很大的,因此DFT运算的应用受到了很大的限制。3.1.2快速傅里叶变换FFTFFT并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法。由于我们在计算DFT时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。每运算一个X(k)需要4N次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。所以整个DFT运算总共需要4N^2次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。如此一来,计算时乘法次数和加法次数都是和N^2成正比的,当N很大时,运算量是可观的,因而需要改进对DFT的算法减少运算速度。直接计算DFT需要N2次复数乘法,N(N-1)次复数加法,直接计算DFT与DIT-FFT复数乘法的运算量之比为:旋转因子WN有如下的特性。对称性:WNk+N/2=-WNk(2)周期性:WNn(N-k)=WNk(N-n)=WN-nk(3)利用这些特性,既可以使DFT中有些项合并,减少了乘法积项,又可以将长序列的DFT分解成几个短序列的DFT。FFT就是利用了旋转因子的对称性和周期性来减少运算量的。FFT的算法是将长序列的DFT分解成短序列的DFT。例如:N为偶数时,先将N点的DFT分解为两个N/2点的DFT,使复数乘法减少一半:再将每个N/2点的DFT分解成N/4点的DFT,使复数乘又减少一半,继续进行分解可以大大减少计算量。最小变换的点数称为基数,对于基数为2的FFT算法,它的最小变换是2点DFT。一般而言,FFT算法分为按时间抽取的FFT(DITFFT)和按频率抽取的FFT(DIFFFT)两大类。DIFFFT算法是在时域内将每一级输入序列依次按奇/偶分成2个短序列进行计算。而DIFFFT算法是在频域内将每一级输入序列依次奇/偶分成2个短序列进行计算。两者的区别是旋转因子出现的位置不同,得算法是一样的。在DIFFFT算法中,旋转因子WN出现在输入端,而在DIFFFT算法中它出现在输入端。假定序列x(n)的点数N是2的幂,按照DIFFFT算法可将其分为偶序列和奇序列。偶序列:x(2r)=x1(r)奇序列:x(2r+1)=x2(r)其中:r=0,1,2,…,N/2-1,则x(n)的DFT表示为 式中,X1(k)和X2(k)分别为X1(r)和X2(r)的N/2的DFT。由于对称性,WNk+N/2=-WNk。因此,N点DFT可分为两部分:前半部分:x(k)=x1(k)+WkNx2(k)(4)后半部分:x(N/2+k)=x1(k)-WkNx2(k)k=0,1,…,N/2-1(5)从式(4)和式(5)可以看出,只要求出0~N/2-1区间x1(k)和x2(k)的值,就可求出0~N-1区间x(k)的N点值。以同样的方式进行抽取,可以求得N/4点的DFT,重复抽取过程,就可以使N点的DFT用上组2点的DFT来计算,这样就可以大减少运算量。基2DIFFFT的蝶形运算如图3.1所示。设蝶形输入为x1(k)和x2(k),输出为x(k)和x(N/2+K),则有x(k)=x1(k)+WkNx2(k)(6)x(N/2+k)=x1(k)-WkNx2(k)(7)在基数为2的FFT中,设N=2M,共有M级运算,每级有N/2个2点FFT蝶形运算,因此,N点FFT总共有MN/2个蝶形运算。图3.1基2DIFFFT的蝶形运算例如:基数为2的FFT,当N=8时,共需要3级,12个基2DITFFT的蝶形运算。其信号流程如图3.2所示。图3.28点基2DIFFFT蝶形运算从图(b)可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为x(0),x(4),x(2),x(6),x(1),x(5),x(3),x(7),输出是按自然顺序排列,其顺序为x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7).整个过程共有log2N次,每次分组间隔为2^(L-1)1=<L<=log2N(1)如上图第一次蝶形运算间隔为一,如第一个和第二个,第三个和第四个,以此类推;第二次间隔为二,如第一个和第三个,第二个和第四个等(2)基本运算单元以下面的蝶形运算为主:计算公式如下:(3)在FFT运算中,旋转因子WmN=cos(2πm/N)-jsin(2πm/N),求正弦和余弦函数值的计算量是很大的。1.函数库DSPLIB介绍

TI公司TMS320C55xDSP函数库DSPLIB的内部函数库一般包括八种类型:快速傅立叶变换(FFT)、滤波和卷积、自适应滤波、相关运算、数学运算、三角运算、混合运算和矩阵运算。2.DSPLIB的组成

DSPLIB函数库由四个部分组成:

(1) dsplib.h——由C程序组成的头文件。

(2) 55xdsp.lib——由目标代码组成的库文件。

(3) 55xdsp.src——允许用户增添和修改的库源文件。

(4) 在“55x_test”子目录下的程序范例和链接命令文件。3.使用DSPLIB的一般方法

调用DSPLIB函数库方法如下:

(1)在用户应用程序中添加dsplib.h包含文件。

语法:#include<dsplib.h>

(2)将用户应用程序与DSPLIB函数库的目标文件相连接,即添加55xdsp.lib或55xdspx.lib。

语法:#include<55xdsp.lib>或#include<55xdspx.lib>

(3)使用正确的链接命令文件,描述用户C55x目标板上可用的存储器空间配置。4软件设计4.1程序流程图图4.1程序流程图4.2源程序见附录。4.3设计步骤(1)启动CCS,在CCS中建立一个C源文件和一个命令文件,并将这两个文件添加到工程,再编译并装载程序:阅读DSP原理及应用中FFT用DSP实现的有关程序。双击,启动CCS的仿真平台的配着选项。选择C5502Simulator。图4.2CCS环境仿真器选择界面(2)启动CCS2后建立工程文件zhefft.pjt图4.3创建新工程的界面(3)建立源文件FFT.c与链接文件FFT.cmd图4.4创建新程序的界面(4)将这两个文件加到zhefft.pjt这个工程中。图4.5添加工程所需文件的界面图4.6程序编译的界面(5)设置断点(6)(7)加载out文件图4.7加载.out文件的界面图4.8加载数据的界面(8)观察输入输出波形1)查看输入信号波形

在主菜单中选择View→Graph→Time/Frequency命令,出现如图8-1所示的图形属性对话框,按照图8-1所示进行相应属性修改,修改好后,单击OK确认。将程序运行到第二个断点处,得到输入信号波形,如图8-2所示。图8-1图8-2输入波形(时域)2)使用CCS提供的工具,观察输入信号FFT变换结果

在主菜单中选择View→Graph→Time/Frequency命令,出现如图8-3所示的图形属性对话框,按照图8-3所示进行相应属性修改,修改好后,单击OK确认。可以看到使用CCS提供的工具,对输入信号进行FFT变换的结果如图8-4所示。图8-3图8-4对输入信号进行FFT变换(频域)3)使用C语言程序,计算FFT变换结果

在主菜单中选择View→Graph→Time/Frequency命令,出现如图8-5所示的图形属性对话框,按照图8-5所示进行相应属性修改,修改好后,单击OK确认。将程序运行到第三个断点处,可以看到如图8-6所示的C语言程序计算FFT变换结果。图8-5图8-6输出图形(频域)改变输入函数 INPUT[i]=sin(PI*2*i/SAMPLENUMBER*3)*1024改变输入函数 INPUT[i]=(sin(PI*2*i/SAMPLENUMBER*3)+sin(PI*2*i/SAMPLENUMBER*4+sin(PI*2*i/SAMPLENUMBER*8)))*1024;图8(5)改变输入函数 INPUT[i]=(sin(PI*2*i/SAMPLENUMBER*3)+sin(PI*2*i/SAMPLENUMBER*10)+sin(PI*2*i/SAMPLENUMBER*20)))*1024; 5.实习心得通过这次DSP课程设计,加深对DFT算法原理和基本性质的理解,熟悉了FFT的算法原理和FFT子程序的算法流程和应用,掌握了DSP中FFT的设计和编程思想,以及用FFT对连续信号和时域信号进行频谱分析的方法,和使用CCS的波形观察器观察波形和频谱情况。这次课程设计,使我增长了知识,同时也增强了我动手解决问题的能力,锻炼我做事细心、用心、耐心的能力。同时也让我意识到平时的课程文化的学习固然非常重要,但是在与实际相联系的过程中还是有许多问题的,所以在以后的学习生活中,我要努力学习,培养自己独立思考的能力,要加强理论文化与实际操作的联系。积极参加各种设计活动,培养自己的综合能力,使自己得到全面的提高。6.参考文献[1]戴明桢等编著.TMS320C54XDSP结构原理及应用.北京:航空航天大学出版社,第2版,2007;[2]彭启琮编著.DSP技术的发展与应用.北京:高等教育出版社,2002;[3]胡广书编著.数字信号处理理论、算法与实现.北京:清华大学出版社,2005;;

;[7]北京合众达电子技术有限公司编著.SEED-DTK系列实验手册.北京合众达电子技术有限公司出版,2007。附录Cmd源文件代码:-f0-w-stack500-sysstack500-lrts55.libMEMORY{DARAM:o=0x100,l=0x7f00VECT:o=0x8000,l=0x100DARAM2:o=0x8100,l=0x7f00SARAM:o=0x10000,l=0x30000SDRAM:o=0x40000,l=0x3e0000}SECTIONS{.text:{}>DARAM.vectors:{}>VECT.trcinit:{}>DARAM.gblinit:{}>DARAM.frt:{}>DARAM.cinit:{}>DARAM.pinit:{}>DARAM.sysinit:{}>DARAM2.far:{}>DARAM2.const:{}>DARAM2.switch:{}>DARAM2.sysmem:{}>DARAM2.cio:{}>DARAM2.MEM$obj:{}>DARAM2.sysheap:{}>DARAM2.sysstack:{}>DARAM2.stack:{}>DARAM2.input:{}>DARAM2.fftcode:{}>DARAM2}C文件源码:#include"math.h"#definesample_1256//256点基2FFT(N值)#definesignal_1_f60#definesignal_2_f200#definesignal_sample_f512//采样长度#definepi3.1415926intinput[sample_1];floatfwaver[sample_1],fwavei[sample_1],w[sample_1];floatsin_tab[sample_1];floatcos_tab[sample_1];voidinit_fft_tab();voidinput_data();voidfft(floatdatar[sample_1],floatdatai[sample_1]);voidmain(){inti;init_fft_tab();input_data();for(i=0;i<sample_1;i++){fwaver[i]=input[i]; fwavei[i]=0.0f; w[i]=0.0f; } fft(fwaver,fwavei); while(1);}voidinit_fft_tab()//初始输入信号,对输入信号进行采样{floatwt1;floatwt2;inti;for(i=0;i<sample_1;i++){ wt1=2*pi*i*signal_1_f; wt1=wt1/signal_sample_f; wt2=2*pi*i*signal_2_f; wt2=wt2/signal_sample_f; input[i]=(cos(wt1)+cos(wt2))/2*32768; }}voidinput_data()//分开计算cos(2*pi/N)及sin(2*pi/N),合成蝶形运算的系数{inti; for(i=0;i<sample_1;i++) { sin_tab[i]=sin(2*pi*i/sample_1); cos_tab[i]=cos(2*pi*i/sample_1); } }voidfft(floatdatar[sample_1],floatdatai[sample_1])//实现FFT算法 { intx0,x1,x2,x3,x4,x5,x6,x7,xx; inti,j,k,b,p,L; floatTR,TI,temp;/***********************************************************///实现比特反转,改变输入信号的顺序,以方便使输出信号按自然顺序输出 for(i=0;i<sample_1;i++)//实现倒序 { x0=x1=x2=x3=x4=x5=x6=0; x0=i&0x01;x1=(i/2)&0x01;x2=(i/4)&0x01;x3=(i/8)&0x01; x4=(i/16)&0x01;x5=(i/32)&0x01;x6=(i/64)&0x01;x7=(i/128)&0x01;//

温馨提示

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

评论

0/150

提交评论