DSP原理与应用课程设计Word文件下载.docx
《DSP原理与应用课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《DSP原理与应用课程设计Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
2.2.3、编辑源文件12
2.2.4、工程的构建12
2.3、调试12
2.3.1、载入可执行程序12
2.3.2、使用反汇编工具12
2.3.3、断点13
2.3.4、查看编辑内存14
第三章用CCS环境编程,调试实现正弦函数信号15
3.1产生正弦波的原理15
3.2调试15
3.2.1编写汇编源程序sin.asm和复位向量文件sin_v.asm15
3.2.2编写链接命令文件sin.cmd18
3.2.3具体调试过程18
3.3调试结果20
第四章设计心得23
参考文献24
第一章绪论
1.1数字信号处理概述
数字信号处理(Digital
Signal
Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。
数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。
数字信号处理在理论上的发展推动了数字信号处理应用的发展。
反过来,数字信号处理的应用又促进了数字信号处理理论的提高。
而数字信号处理的实现则是理论和应用之间的桥梁。
图1.1是数字信号处理系统的简化框图。
此系统先将模拟信号转换为数字信号,经数字信号处理后,再转换为模拟信号输出。
其中抗混叠滤波器的作用,是将输入信号x(t)中高于折叠频率(其值等于采样频率的一半)的分量滤除,以防止信号频谱的混叠。
随后,信号经采样和A/D转换后,变成数字信号x(n)。
数字信号处理器对x(n)进行处理,得到输出数字信号y(n),经D/A转换器变成模拟信号。
此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号y(t)。
图1.1
虽然数字信号处理的理论发展迅速,但在20世纪80年代以前,由于实现方法的限制,数字信号处理的理论还得不到广泛的应用。
直到20世纪70年代末80年代初世界上第一片单片可编程DSP芯片的诞生,才将理论研究结果广泛应用到低成本的实际系统中,并且推动了新的理论和应用领域的发展。
可以毫不夸张地说,DSP芯片的诞生及发展对近20年来通信、计算机、控制等领域的技术发展起到十分重要的作用。
1.2DSP芯片的特点
DSP芯片,也称数字信号处理器,是一种具有特殊结构的微处理器。
DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。
它是一种特别适合于进行数字信号处理运算的微处理器具,其主机应用是实时快速地实现各种数字信号处理算法。
根据数字信号处理的要求,DSP芯片一般具有如下主要特点:
1.2.1、哈佛结构
DSP芯片普遍采用数据总线和程序总线分离的哈佛结构或改进的哈佛结构,比传统处理器的冯·
诺伊曼结构有更快的指令执行速度。
(1)冯·
诺伊曼(VonNeuman)结构
该结构采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。
当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢。
(2)哈佛(Harvard)结构
该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。
微处理器的哈佛结构如图1.2.2所示。
1.2.2多总线结构
DSP芯片都采用多总线结构,可同时进行取指令和多个数据存取操作,并由辅助寄存器自动增减地址进行寻址,使CPU在一个机器周期内可多次对程序空间和数据空间进行访问,大大地提高了DSP的运行速度。
如:
TMS320C54x系列内部有P、C、D、E等4组总线,每组总线中都有地址总线和数据总线,这样在一个机器周期内可以完成如下操作:
(1)从程序存储器中取一条指令;
(2)从数据存储器中读两个操作数;
(3)向数据存储器写一个操作数。
1.2.3流水线技术
DSP执行一条之灵,需要通过取指、译码、取操作数和执行等几个阶段。
在DSP芯片中,采用流水线结构,在程序运行过程中这几个阶段是重叠的,如图1.2.3所示。
这样,在执行本条指令的同时,还一次完成了后面三条指令的取操作数、译码和取指,大大增强了DSP的处理能力。
利用这种流水线结构,加上执行重复操作,就能保证在单指令周期内完成数字信号处理中用得最多的乘法-累加运算。
1.2.4、多处理单元
DSP内部一般包括有多个处理单元,如算术逻辑运算单元(ALU)、辅助寄存器运算单元(ARAU)、累加器(ACC)以及硬件乘法器(MUL)等。
他们可以在一个指令周期内同时进行运算。
DSP芯片在进行连续的乘加运算时,每一次乘加运算都是单周期的。
这种多处理单元结构,特别适用于FIT和IIR滤波器。
此外,许多DSP芯片的多处理单元结构还可以将一些特殊的算法,如FFT的位码倒置寻址和取模运算等,在芯片内部用硬件实现以提高运行速度。
1.2.5、特殊的DSP指令
为了满足数字信号处理的需要,在DSP的指令系统中,设计了一些完成特殊功能的指令。
TMS320C54x中的FIRS和LMS指令,专门用于完成系数对称的FIR滤波器和LMS算法。
1.2.6、指令周期短
早期的DSP指令周期约200ns,采用4umNMOS制造工艺,其运算速度为5MIPS(每秒执行500万条指令)。
随着集成电路工艺的发展,DSP广泛采用亚微米CMOS制造工艺,其运算速度越来越快,以TMS320C54X为例,其运行速度可大100MIPS以上。
1.2.7、运算精度高
早期的DSP的字长为8位,后来逐步提高到16位、24位、32位。
为防止运算过程中溢出,有的累加器达到40位。
此外,一批浮点DSP,例如TMS320C3X、TMS320C4X等,提供了更大的动态范围。
1.2.8、硬件配置强
新一代的DSP芯片具有较强的接口功能,除了具有串行口、定时器、主机接口(HPI)、DMA控制器、软件可编程等待状态发生器等片内外设外,还配有中断处理器、PLL、片内存储器、测试接口等单元电路,可以方便地构成一个嵌入式自封闭控制的处理系统。
1.2.9、省电管理和低功耗
DSP功耗一般为0.5~4W,若采用低功耗技术可使功耗降到0.25W,可用电池供电,适用于便携式数字终端设备。
1.3、TMS320C5X的主要特性
TMS320C54X是为实现低功耗、高性能而专门设计的定点DSP芯片,其主要应用是无线通信系统等。
该芯片的内部结构与TMS320C5X不同,因而指令系统与TMS320C5X和TMS320C2X等是互不兼容的。
TMS320C54X的主要特点包括:
(1)运算速度快。
指令周期为25/20/15/12.5/10ns,运算能力为40/50/66/80/100MIPS;
(2)优化的CPU结构。
内部有1个40位的算术逻辑单元,2个40位的累加器,2个40位加法器,1个17×
17的乘法器和1个40位的桶形移位器。
有4条内部总线和2个地址产生器。
此外,内部还集成了维特比加速器,用于提高维特比编译码的速度。
先进的DSP结构可高效地实现无线通信系统中的各种功能,如用TMS320C54X实现全速率的GSM需12.7MIPS,实现半速率GSM需26.2MIPS,而实现全速率GSM语音编码器仅需2.3MIPS,实现IS-54/136VSELP语音编码仅需12.8MIPS;
(3)低功耗方式。
TMS320C54X可以在3.3V或2.7V电压下工作,三个低功耗方式(IDLE1、IDLE2和IDLE3)可以节省DSP的功耗,TMS320C54X特别适合于无线移动设备。
用TMS320C54X实现IS54/136VSELP语音编码仅需31.1mW,实现GSM语音编码器仅需5.6mW;
(4)智能外设。
除了标准的串行口和时分复用(TDM)串行口外,TMS320C54X还提供了自动缓冲串行口BSP(auto-BufferedSerialPort)和与外部处理器通信的HPI(HostPortInterface)接口。
BSP可提供2K字数据缓冲的读写能力,从而降低处理器的额外开销,指令周期为20ns时,BSP的最大数据吞吐量为50Mbit/s,即使在IDLE方式下,BSP也可以全速工作。
HPI可以与外部标准的微处理器直接接口。
1.4、用DSP实现正余弦函数的基本方法
在通信、仪器和控制等领域的信号处理系统中,可能会用到正弦发生器。
一般,产生正弦波的方法有两种:
(1)查表法。
此中方法用于对精度要求不是很高的场合。
如果要求精度高,表就很大,相应的存储器容量也要增大。
(2)台劳级数展开法。
这是一种更为有效的方法。
与查表法相比,需要的存储单元很少,而且精度很高。
一个角度θ的正弦和余弦函数,都可以展开成台劳级数,取其前5项进行近似:
Sinθ=x-x3/3!
+x5/5!
-x7/7!
+x9/9!
=x(1-x2/2*3(1-x2/4*5(1-x2/6*7(1-x2/8*9)))
Cosθ=1-x2/2!
+x4/4!
-x6/6!
+x8/8!
=1-x2/2!
(1-x2/3*4(1-x2/5*6(1-x2/7*8)))
上式中的X为θ的弧度值。
也可以有递推公式求正弦和余弦值:
Sinnθ=2cosθ*sin(n-1)θ-sin(n-2)θ
Cosnθ=2cosθ*cos(n-1)θ-cos(n-2)θ
利用递推公式计算正弦和余弦值需已知Cosθ和正、余弦的前两个值。
用这种方法,求少数点还可以,如产生连续正弦、余弦波,则积累误差太大,不可取。
第二章CCS集成开发环境
2.1CCS开发应用程序的一般步骤
利用CCS集成开发环境,用户可以在一个开发环境下完成工程定义、程序编辑、编译链接、调试和数据分析等工作环节.使用CCS开发应用程序的一般步骤为:
(1)打开或创建一个工程文件.工程文件中包括源程序(C或汇编)、目标文件、库文件、连接命令文件和包含文件.
(2)编辑各类文件.如头文件(.h文件),命令文件(.cmd文件)和源程序(.c,.asm文件)等.可以使用一般的编辑软件或CCS集成编辑环境进行各类文件编辑.
(3)对工程进行编译.如果有语法错误,将在构建(Build)窗口中显示出来.用户可以根据显示的信息定位错误位置,更改错误.
(4)排除程序的语法错误后,用户可以对计算结果/输出数据进行分析,评估算法性能.CCS提供了探针、图形显示、性能测试等工具来分析数据、评估性能
图2.1为一个典型的CCS集成环境窗口示例.整个窗口由主菜单、工具条、工程窗口、编辑窗口、图形显示窗口、内存单元显示窗口和寄存器显示窗口等构成.
图2.1
2.2、建立工程文件
与VisualBasic、VisualC以及Delphi等集成开发工具类似,CCS是采用工程(Project)来集中管理应用程序文档的。
一个工程包括汇编语言/C语言源程序、库文件、链接命令文件和头文件等。
如图2.2为工程文件名为sin的工程窗口。
图2.2
2.2.1、工程文件的建立、打开和关闭
CCS集成开发环境要求,对于每一个DSP开发应用项目,都要创建一个后缀名为.pjt的工程文件,以便于对开发应用项目的设计文档进行管理。
选择Project→New,在弹出的对话框中键入新的工程文件名,如sin.pjt确认后一个新的工程文件sin.pjt便建立了,并显示在工程文件窗口中。
如要打开已有的工程文件,只要选择Project→Open,在弹出的对话框中选择需要的工程文件就可以了。
若要关闭工程文件,只要在工程文件窗口中选择要关闭的工程文件,再右击后选择Close即可关闭。
2.2.2、在工程文件中添加货删除文件
工程文件创建后,就可以利用一下任何一种操作方法往工程文件中添加文件:
(1)在菜单栏中选择Project→AddFilesToProject。
(2)在工程窗口中右击工程文件,在弹出的快捷菜单中选择AddFilesToProject。
若要移除某个文件,在弹出的快捷菜单中选择RemovefromProject即可删除文件。
2.2.3、编辑源文件
CCS集成编辑环境可以编辑任何文本文件(对C程序和汇编程序),可以打开多个窗口或对同一文件打开多个窗口,进行多窗口显示.点击主莱单命令File→New→SourceFile弹出编辑窗口进行编辑.
2.2.4、工程的构建
如上述工程文件已经建立,工程所需的文本文件(如.asm.c.cmd等文件)也已经编辑好,并且已经添加到工程文件中,即可进行工程构建了。
2.3、调试
工程构建完成后,即可进入程序的调试阶段。
2.3.1、载入可执行程序
命令File→LoadProgram载入编译链接好的可执行程序.用户也可以修改”ProgramLoad”属性,使得在构建工程后自动装入可执行程序.设置方法为选择命令Options→ProgramLoad.
2.3.2、使用反汇编工具
在某些时候(例如调试C语言关键代码),用户可能需要深入到汇编指令一级.此时可以利用CCS的反汇编工具.用户的执行程序(不论是C程序或是汇编程序)载入到目标板或仿真器时,CCS调试器自动打开一个反汇编窗口.如图2.3所示.
图2.3
2.3.3、断点
设置断点是调试程序的必要工具。
在调试过程中,可以通过设置断点来暂停程序运行,以便于检查、分析程序的运行情况,观察和修改中间变量、寄存器货存储单元的数值。
CCS提供了两类断点:
软件断点和硬件断点。
断点设置,有两种方法可以增加一条断点。
(1)使用断点对话框
选择命令Debug→Breakpoints将弹出对话框如图2-7所示。
在”BreakpointType”栏中可以选择”无条件断点(BreakatLocation)”或”有条件断点(BreakatLocationifexpressionisTRUE)”.在”Location”栏中填写需要中断的指令地址.用户可以观察反汇编窗口,确定指令所处地址.对C代码,由于一条C语句可能对应若干条汇编指令,难以用唯一地址确定位置.为此可以采用”filenamelinelineNumber”的形式定位源程序中的一条C语句.断点类型和位置设置完成后,依次单击”Add”和”OK”按钮即可.断点设置成功后,该语句条用彩色光条显示。
(2)采用工程工具条
将光标移到需要设置断点的语句上,点击工程工具条上的”设置断点”按钮.则该语句位置一断点,默认情况下为”无条件断点”.用户也可以使用断点对话框修改断点属性,例如将”无条件断点”改为”有条件断点”。
(3)断点的删除
在图2-7所示断点对话框中,单击”Breakpoint”列表中的一个断点,然后点击”Delete”按钮可删除此断点.点击”Deleteall”按钮或工程工具条上的”取消所有断点”按钮,将删除所有断点。
(4)允许和禁止断点
在图2.4所示断点对话框中,单击”EnableAll”或”DisableAll”将允许或禁止所有断点.”允许”状态下,断点位置前的复选框有”对勾”符号.注意只有当设一断点,并使其”允许”时,断点才发挥作用。
图2.4
2.3.4、查看编辑内存
CCS允许显示特定区域的内存单元数据.方法为选择ViewMemory或单击调试工具条上的”显示内存数据”按钮.在弹出对话框中输入内存变量名(或对应地址)、显示方式即可显示指定地址的内存单元.为改变内存窗口显示属性(如数椐显示格式,是否对照显示等),可以在内存显示窗口中单击右键,从关联莱单中选Properties即弹出选项对话框.如图2.5所示:
图2.5
第三章用CCS环境编程,调试实现正弦函数信号
3.1产生正弦波的原理
1、查表法。
2、台劳级数展开法。
3.2调试
3.2.1编写汇编源程序sin.asm和复位向量文件sin_v.asm
打开软件,新建一个工程,并命名为sinoutput,在File菜单下新建一文件,并编写程序,编写完成后保存,并命名为sin.asm,具体程序清单见附录。
此文件主要分为几下几个功能模块:
程序存储器向数据存储器传输数据
STM#d_coef_s,AR5
RPT#3
MVPD#table_s,*AR5+
数据代码段.data的编写即系数表的建立:
.data;
定义数据代码段
table_s.word01c7h;
c1=1/(8*9)
.word030bh;
c2=1/(6*7)
.word0666h;
c3=1/(4*5)
.word1556h;
c4=1/(2*3)
计算一个角度的正弦值
SQUR*AR2+,A;
A=x^2
STA,*AR2;
AR2=>
x^2
||LD*AR4,B;
B=1
MASR*AR2+,*AR3+,B,A;
A=1-x^2/72
;
T=x^2
MPYAA;
A=T*A=x^2(1-x^2/72)
STHA,*AR2;
(d_temp)=x^2(1-x^2/72)
MASR*AR2-,*AR3+,B,A;
A=1-x^2/42(1-x^2/72)
T=x^2(1-x^2/72)
MPYA*AR2+;
B=x^2(1-x^2/42(1-x^2/72))
STB,*AR2;
(d_temp)=x^2(1-x^2/42(1-x^2/72))
MASR*AR2-,*AR3+,B,A
A=1-x^2/20(1-x^2/42(1-x^2/72))
B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))
(d_temp)=B=…
MASR*AR2-,*AR3+,B,A
A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))
MPYAd_xs;
B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))
STHB,d_sinx;
sin(theta)
计算从O(deg.)到90(deg.)的正弦值
STM#90,BRC
RPTBloop1-1
LDMAR1,A
LD#d_xs,DP
STLA,@d_xs
STLA,@d_xc
CALLsinx;
(dsinx)=sin(x)
CALLcosx;
(dcosx)=cos(x)
LD#d_sinx,DP
LD@d_sinx,16,A;
A=sin(x)
MPYA@d_cosx;
B=sin(x)*cos(x)
STHB,1,*AR6+;
AR6-->
2*sin(x)*cos(x)
MAR*AR1+0
计算从91(deg.)到179(deg.)的正弦值
STM#sin_x+89,AR7
STM#88,BRC
RPTBloop2-1
LD*AR7-,A
STLA,*AR6+
计算从180(deg.)到359(deg.)的正弦值
STM#179,BRC
STM#sin_x,AR7
RPTBloop3-1
LD*AR7+,A
NEGA
计算一个角度的余弦值
A=x-2
(AR2)=x'
2
||LD*AR4,B;
MASR*AR2+,*AR3+,B,A;
A=I-x-2/56
;
T=x2
A=T*A=x2(1-x2/56)
(dtemp)=x'
2(1-x2/56)
MASR*AR2-,*AR3+,B,A;
A=1-x2/30(1-x2/56)
T=x2(1-x2/56)
B=x2(1-x'
2/30(1-x2/56))
(dtemp)=x'
2(1-x2/30(1-x'
2/56))
MASR*AR2-,*AR3+,B,A;
A=1-x2/12(1-x'
SFTAA,-1,A;
-1/2
B=-x'
2/2(1-x'
2/12(1-x'
2/30