国家电工电子实验教学中心DSP课程设计设计报告设计题目:利用DSP实现实时信号频谱分析学院:电子信息工程学院专业:通信工程成员:指导老师:侯亚丽目录1设计环境简介...................................................................................11.1DSP芯片主要特性......................................................................11.2BJTU-DSP5502实验板板上资源主要包括:..............................11.3TMS320VC5502片上外设............................................................12指标及设计要求...............................................................................23设计思路及原理...............................................................................23.1整体思路......................................................................................23.2信号的实时采集与传输...............................................................23.3FFT算法.....................................................................................33.4“ping-pong”存储方式...........................................................64实验步骤...........................................................................................65实验结果及分析...............................................................................76实验中遇到的问题及解决方法........................................................97实验感想.........................................................................................98参考文献.........................................................................................109程序清单及源代码..........................................................................1011设计环境简介1.1DSP芯片主要特性C55x是TI的C5000系列的DSP的子系列,是目前能耗效率很高的DSP处理器,其功耗可低至0.05mW/MIPS.是54系列发展起来的,和C54x代码兼容,但是速度更快,功耗明显降低,如300MHz的C55x与120MHz的C54x相比,处理速度提高了5倍,功耗只有C54x的1/6.TMS320VC5502的程序/数据存储空间采用统一编址,整个寻址空间大小为16M字节(bytes),其中片内DARAM占64K字节,ROM占32K字节,其余存储空间被映射到片外4个片选的子空间。BJTU-DSP5502板支持TMS320VC5502DSP,工作频率可以高达300MHz,工作的核电压为1.26V,I/O电压为3.3V。1.2BJTU-DSP5502实验板板上资源主要包括:DSP芯片1枚(U1):TMS320VC5502@300MHzSDRAM1枚(U5):2M×32bit(8Mbytes)HY57V643220CTFLASH1枚(U4):256K×16bit(512Kbytes)SST39VF400A-70CPLD1枚(U2):CY37064VP100通信接口3个:仿真器JTAG接口(J1)、连接到PC机USB接口(J4)和UART接口(J2)信号采集和输出端口:立体音输入接口line-in(J5,直接接电脑的语音输出端口)/麦克风输入接口(J7)/耳机音频输出接口(J6)扩展板接口(J9,J10)1.3TMS320VC5502片上外设64bitTimer:4个,TIMER0/TIMER1/WatchDogTIMER/TIMER3(DSP/BIOStimer)McBSP:3通道,McBSP0/McBSP1/McBSP2DMA:6通道,DMA0/DMA1/DMA2/DMA3/DMA4/DMA5/DMA6IIC:1通道UART:1通道8/16bitHPI:1通道22指标及设计要求(1)设计谱分析算法,或调用DSPLIB中FFT函数,实现对信号的频谱分析。(2)利用C语言对A/D、D/A进行初始化(3)利用C语言对DMA进行初始化(4)编写DMA中断服务程序,实现信号的实时谱分析(5)利用CCS信号分析工具分析信号的频谱成分,对FFT算法结果进行验证。(6)信号频谱数据实时输出到Headphone输出接口,并在示波器上进行显示;(7)在实验板的Linein输入端接入正弦信号,分左右声道分别采集,并分别进行频谱分析;(8)利用CCS的Profiler工具计算FFT算法所需要的时间,并根据实时性要求进行必要的算法优化3设计思路及原理3.1整体思路首先通过DSP的DMA方式对外部信号进行实时采集,外部模拟信号先进行A/D转换,利用MCBSP的接收寄存器接收数据,并将数据存放到DSP存储区中。设计FFT算法或调用DSPLIB中的rfft或cfft频谱分析函数,对信号进行快速傅立叶变换。频谱数据利用DMA方式送到D/A转换器转换为模拟信号在示波器上显示。3.2信号的实时采集与传输DMA控制器可以在不影响CPU的情况下完成数据的传输,因此数据传输速度快,在要求信号实时采集和处理的系统中常采用DMA方式进行信号传输。本设计中输入信号经过A/D转换成数字信号后,将DMA通道4的源地址设为串口的接收寄存器,利用DMA通道4进行传输;而将DMA通道5的目的地址设置为串口的发送寄存器,将信号频谱利用DMA5通道进行传输,此步骤需要对AIC23、McBSP、DMA通道4和DMA通道5进行初始化配置。处理流图如图3.2.1所示。3开始A/D转换和D/A转换器初始化DMA通道初始化DMA方式接受A/D转换后的数据等待DMA中断设置DMA4和DMA5目的和源地址序列FFT、计算幅度谱D/A输出主程序中断服务程序图3.2.13.3FFT算法FFT(FastFourierTransformation),即为快速傅氏变换,是离散傅氏变换(DFT)的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。(1)离散傅里叶变换DFTN点DFT的正变换公式为:X(k)=0*)(nWnxN-nk式中,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运算的应用受到了很大的限制。(2)快速傅里叶变换FFT旋转因子WN有如下的特性。4对称性:WNk+N/2=-WNk周期性:WNn(N-k)=WNk(N-n)=WN-nk利用这些特性,既可以使DFT中有些项合并,减少了乘法积项,又可以将长序列的DFT分解成几个短序列的DFT。FFT就是利用了旋转因子的对称性和周期性来减少运算量的。一般而言,FFT算法分为按时间抽取的FFT(DITFFT)和按频率抽取的FFT(DIFFFT)两大类。DIFFFT算法是在时域内将每一级输入序列依次按奇/偶分成2个短序列进行计算。而DIFFFT算法是在频域内将每一级输入序列依次奇/偶分成2个短序列进行计算。两者的区别是旋转因子出现的位置不同,得算法是一样的。在DIFFFT算法中,旋转因子出现在输入端,而在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)(1)后半部分:x(N/2+k)=x1(k)-WkNx2(k)k=0,1,…,N/2-1(2)从式(1)和式(2)可以看出,只要求出0~N/2-1区间x1(k)和x2(k)的值,就可求出0~N-1区间x(k)的N点值。以同样的方式进行抽取,可以求得N/4点的DFT,重复抽取过程,就可以使N点的DFT用上组2点的DFT来计算,这样就可以大减少运算量。/21/2121200221NNrkrkNNrrxrWxrW/21/21221200NNrkrkkNNNrrxrWWxrW/21/211/22/200NNrkkrkNNNrrxrWWxrW12kNXkWXk,0,1,.../21rkNn为偶数n为奇数111000NNNnknknkNNNnnnXkxnWxnWxnW5基2DIFFFT的蝶形运算如图3.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.3.1基2DIFFFT的蝶形运算例如:基数为2的FFT,当N=8时,共需要3级,12个基2DITFFT的蝶形运算。其信号流程如图3.3.2所示。图3.3.2从图可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为x(0),x(4),x(2),x(6),x(1),x(5),x(3),x(7),输出是按自然顺序排列,其顺序为6x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7).在本设计中,信号的频谱通过FFT算法得出,FFT算法可以自己编写,也可以调用55xdsp.lib库rfft或cfft函数。调用库函数的需要在工程中添加库文件55xdsp.lib,并且在程序中包含头文件dsplib.h。调用的时候入口参数是时域信号地址,返回处理后的FFT信号,注意返回值不包含求模过程,而是交替返回实部和虚部。本实验采用自己编写的基2频率抽取法计算FFT。3.4“ping-pong”存储方式Ping-pong存储方式在内存开辟四块存储区,分别是gBufferRcvPing、gBufferRcvPong、gBufferXmtPing、gBufferXmtPong,其中前两块用于