南昌大学DSP实验报告
南昌大学数字信号处理实验报告实验二时域采样与频域采样

一、实验名称:时域采样与频域采样二、实验目的: 时域采样理论与频域采样理论是数字信号处理中的重要理论。
要求掌握模拟信号采样前后频谱的变化,以及如何选择采样频率才能使采样后的信号不丢失信息;要求掌握频率域采样会引起时域周期化的概念,以及频率域采样定理及其对频域采样点数选择的指导作用。
三、实验原理与方法:时域采样定理:a) 对模拟信号以间隔T进行时域等间隔理想采样,形成的采样信号的频谱是原模拟信号频谱以采样角频率()为周期进行周期延拓。
公式为:b) 采样频率必须大于等于模拟信号最高频率的两倍以上,才能使采样信号的频谱不产生频谱混叠。
C) 计算机进行实验的公式为:即理想采样信号的傅立叶变换可用相应的采样序列的傅立叶变换得到,只要将自变量ω用代替即可。
频域采样定理:a) 对信号x(n)的频谱函数X(ejω)在[0,2π]上等间隔采样N点,得到则N点IDFT[]得到的序列就是原序列x(n)以N为周期进行周期延拓后的主值区序列,公式为:b) 由上式可知,频域采样点数N必须大于等于时域离散信号的长度M(即N≥M),才能使时域不产生混叠,则N点IDFT[]得到的序列就是原序列x(n),即=x(n)。
如果N>M,比原序列尾部多N-M个零点;如果N<M,z则=IDFT[]发生了时域混叠失真,而且的长度N也比x(n)的长度M短,因此。
与x(n)不相同。
四、实验内容及步骤:(1)验证时域采样理论。
模拟信号:式中A=444.128,=50π,=50πrad/s。
它的幅频特性曲线如下图。
的幅频特性曲线按照的幅频特性曲线,选取三种采样频率,即=1kHz,300Hz,200Hz。
观测时间选。
为使用DFT,首先用下面公式产生时域离散信号,对三种采样频率,采样序列按顺序用,,表示。
要求:编写实验程序,计算、和的幅度特性,并绘图显示。
观察分析频谱混叠失真。
实验程序:A=444.128;a=50*sqrt(2)*pi;w0=50*sqrt(2)*pi;Tp=50/1000;F1=1000;F2=300;F3=200; %观察时间Tp=50msT1=1/F1;T2=1/F2;T3=1/F3; %不同的采样频率n1=0:Tp*F1-1;n2=0:Tp*F2-1;n3=0:Tp*F3-1; %产生不同的长度区间n1,n2,n3x1=A*exp(-a*n1*T1).*sin(w0*n1*T1); %产生采样序列x1(n)x2=A*exp(-a*n2*T2).*sin(w0*n2*T2); %产生采样序列x2(n)x3=A*exp(-a*n3*T3).*sin(w0*n3*T3); %产生采样序列x3(n)f1=fft(x1,length(n1)); %采样序列x1(n)的FFT变换f2=fft(x2,length(n2)); %采样序列x2(n)的FFT变换f3=fft(x3,length(n3)); %采样序列x3(n)的FFT变换k1=0:length(f1)-1;fk1=k1/Tp; %x1(n)的频谱的横坐标的取值k2=0:length(f2)-1;fk2=k2/Tp; %x2(n)的频谱的横坐标的取值k3=0:length(f3)-1;fk3=k3/Tp; %x3(n)的频谱的横坐标的取值subplot(3,2,1)stem(n1,x1,'.')title('(a)Fs=1000Hz');xlabel('n');ylabel('x1(n)'); subplot(3,2,3)stem(n2,x2,'.')title('(b)Fs=300Hz');xlabel('n');ylabel('x2(n)'); subplot(3,2,5)stem(n3,x3,'.')title('(c)Fs=200Hz');xlabel('n');ylabel('x3(n)'); subplot(3,2,2)plot(fk1,abs(f1))title('(a) FT[xa(nT)],Fs=1000Hz'); xlabel('f(Hz)');ylabel('幅度') subplot(3,2,4)plot(fk2,abs(f2))title('(b) FT[xa(nT)],Fs=300Hz');xlabel('f(Hz)');ylabel('幅度')subplot(3,2,6)plot(fk3,abs(f3))title('(c) FT[xa(nT)],Fs=200Hz');xlabel('f(Hz)');ylabel('幅度')运行结果:由图可见,采样序列的频谱的确是以采样频率为周期对模拟信号频谱的周期延拓。
DSP实验报告1,2

DSP原理与应用实验报告实验一集成开发环境CCS应用基础一、程序分析(1)三个文件的作用及接口情况,说明各个文件中伪指令的作用。
答:test1.asm文件的作用是汇编主程序,vectors.asm文件是中断矢量处理程序,test1.cmd文件是命令文件。
test1.asm中伪指令的作用:.title作用是在每页的顶部打印文件标题.mmregs为存储器映像寄存器定义符号名。
使用.mmregs的功能和对所有的存储器映像寄存器执行set伪指令相同。
.usect汇编命令建立的自定义段也是未初始化段.def 定义全局变量.text已初始化段.end终止汇编,位于程序源程序的最后一行。
vectors.asm中伪指令的作用:.ref 定义全局变量.sect汇编器伪指令建立的自定义段也是已初始化段.space对存储器进行初始化。
(2)分析主程序的结构和功能,对每条指令进行注释,写出执行结果。
.title "example1.asm".mmregs ;使能存储器映像寄存器stack .usect "STACK",10h.def _c_int00;------------------------------------------------------------------------------.text_c_int00:stm # stack+10h, SP ;设置堆栈指针stm #0x0000, SWWSR ;所有存储器未加软件延迟;================================================stm #0x70,AR2st #0xff80,*AR2;================================================;观察控制位SXM的作用;当SXM=0时,进行无符号数的加载rsbx SXM ;SXM置零nopld *AR2, A ;(A)=( 000000FF80 H);------------------------;当SXM=1时,进行有符号数的加载ssbx SXM ;SXM置一nopld *AR2, A ;(A)=( FFFFFFFF80H ) ;================================================ ;================================================ ;观察控制位OVM的作用;当OVM=0时,对溢出不进行处理rsbx OVMld #0x7fff, 16, B ;立即数左移16位给Badd #0x7fff, 16, B ;(B)=( 00FFFE0000H);------------------------;当OVM=1时,对溢出进行处理ssbx OVMld #0x7fff, 16, Badd #0x7fff, 16, B ;(B)=( 007FFFFFFFH );================================================ ;================================================ ;观察控制位C16的作用;当C16=0时,进行32位双精度数加法运算ssbx OVMld #0x0001, 16, Aadd #0x7fff, Adst A, *AR2ld #0x0001, 16, Aor #0xffff, A ;相“或”rsbx C16nopdadd *AR2, A, B ;(B)=( 0000037FFEH);------------------------;当C16=1时,进行两个独立的16位数加法运算ssbx C16nopdadd *AR2, A, B ;(B)=( 0000027FFE H);================================================ ;================================================ ;观察控制位FRCT的作用;当FRCT=0时,对乘积不进行移位ld #0x1234, 16, Arsbx FRCTnopmpya *AR2 A中高16位与T相乘;(B)=( 0000001234H) ;------------------------;当FRCT=1时,对乘积左移1位ssbx FRCTnopmpya *AR2 ;(B)=( 0000002468 H);================================================ ;================================================ ;观察测试位TCbitf *AR2, #0x8000 ;(TC)=( 0 )nopnop;------------------------bitf *AR2, #0x0001 ;(TC)=( 1 )nopnop;================================================ ;================================================ ;观察标志位Cssbx SXMld #0x7fff, Ald #0x8000, Bmax A ;(C)=( 0 )nopnop;------------------------min B ;(C)=( 1 )nopnop;================================================ ;================================================ ;观察标志位OV A, OVBssbx SXMrsbx OV Ald #0x7fff, 16, Aadd #0xffff, A ;(OV A)=(0 )nopnop;------------------------add #0x7fff, 16, A ;(OV A)=( 1 )nopnop;================================================ dead_loop:nopnopnopnopb dead_loop.end(3)写出本工程的分段和存储器的定位情况。
dsp课程设计实验报告

DSP课程设计实验语音信号的频谱分析:要求首先画出语音信号的时域波形, 然后对语音信号进行频谱分析。
在MATLAB中, 可以利用函数fft对信号进行快速傅立叶变换, 得到信号的频谱特性, 从而加深对频谱特性的理解。
其程序为:>> [y,fs,bits]=wavread('I:\xp.wav',[1024 5120]);>> sound(y,fs,bits);>> Y=fft(y,4096);>> subplot(221);plot(y);title('原始信号波形');>> subplot(212);plot(abs(Y));title('原始信号频谱');程序运行结果为:设计数字滤波器和画出频率响应:根据语音信号的特点给出有关滤波器的性能指标:低通滤波器性能指标, =1000Hz, =1200Hz, =100dB, =1dB;高通滤波器性能指标, =4800Hz, =5000Hz, =100dB, =1dB;带通滤波器性能指标, =1200Hz, =3000Hz, =1000Hz, =3200Hz, =100dB, =1dB;要求学生首先用窗函数法设计上面要求的三种滤波器, 在MATLAB中, 可以利用函数firl 设计FIR滤波器;然后再用双线性变换法设计上面要求的三种滤波器, 在MA TLAB中, 可以利用函数butte、cheby1和ellip设计IIR滤波器;最后, 利用MATLAB中的函数freqz画出各种滤波器的频率响应, 这里以低通滤波器为例来说明设计过程。
低通:用窗函数法设计的低通滤波器的程序如下:>> fp=1000;fc=1200;As=100;Ap=1;fs=22050;>> wc=2*fc/fs;wp=2*fp/fs;>> N=ceil((As-7.95)/(14.36*(wc-wp)/2))+1;>> beta=0.1102*(As-8.7);>> Win=Kaiser(N+1,beta);>>b=firl(N,wc,Win);>>freqz(b,1,512,fs);程序运行结果:这里选用凯泽窗设计, 滤波器的幅度和相位响应满足设计指标, 但滤波器长度(N=708)太长, 实现起来很困难, 主要原因是滤波器指标太苛刻, 因此, 一般不用窗函数法设计这种类型的滤波器。
dsp实验报告4讲解

实验 2.4 外中断一.实验目的1.通过实验熟悉 VC5509A 的中断响应过程。
2.学会 C 语言中断程序设计,以及运用中断程序控制程序流程。
二.实验设备计算机, ICETEK-VC5509-A 实验箱及电源。
三.实验原理1.中断及中断处理过程:⑴中断简介:中断是一种由硬件或软件驱动的信号, DSP 在接到此信号时,将当前程序悬挂起来,转去执行另外一个任务, 这个任务我们称为中断服务程序 (ISR )。
TMS320C55X DSP 可支持32个ISR ,可由硬件或软件触发。
⑵DSP 处理中断的步骤:① 接收中断请求 :由软件或硬件发出。
② 响应中断请求 :对于可屏蔽中断,需要满足若干条件,才发生响应;而对于不可屏蔽中断, 则立即响应。
③ 准备执行中断服务程序。
- 完成当前正在执行的指令;将进入流水线但还未解码的指令清除。
- 自动保存若干寄存器的值到数据堆栈和系统堆栈。
- 取得用户定义的中断向量表中当前中断向量,中断向量指向中断服务程序入口。
④ 执行中断服务程序。
中断服务程序包含中断返回指令, 这样返回时可以出栈以前保存的关 键寄存器数据,从而恢复中断服务程序执行前的现场。
⑶中断向量表:中断向量表的构成请参见 TI 的文档 sprs295d.pdf 之 3.11 节。
中断向量表的地址可以由用户指定。
⑷外中断:⑵ 构造中断向量表:可以用汇编语言构造,编写一个汇编语言模块程序 vector.asm 。
⑶ 修改链接命令文件:在 MEMORY 小节中开辟单独的地址段用以存放中断向量表;在 SECTIONS 小节中指定 .vectors 段到前步开设的内存段中。
⑷ 主程序中进行初始化设置:定位中断向量表、使能中断、清中断等。
4.实验程序流程图:TMS320C5509 可以响应2.ICETEK-CTR 板的键盘接口: 显示 /控制模块 ICETEK-CTR 每个扫描码结束后保存,同时向INT0-INT4 五个外中断。
DSP实验报告8

DSP实验报告8实验8.1 语⾳采集和放送班级1班姓名宋潇玙、潘继茹学号2013051124、2013051132⼀、实验⽬的1.了解ICETEK-VC5509-A板上语⾳芯⽚codec芯⽚TLV320AIC23的设计和程序控制原理。
2.了解数字回声产⽣原理,变成及其参数选择,控制。
3.熟悉VC5509DSP扩展储存器的编程使⽤⽅法⼆、实验设备PC,ICETEK-VC5509-A实验箱,⽿机,麦克风三、实验内容通过观察窗⼝观察bEcho,uDelay,uEffect。
BEcho=1时数字回声功能激活。
Udelay调节⼀重回声延时,数字较⼩时延时较⼩,较⼤时延时较⼤。
UEffect调节回声⾳量,数字较⼩时⾳量较⼩。
四、实验结果观察窗⼝delay和effect分别是数字声的延迟时间和响度。
修改程序使回声信号出现两次void main(){ SDRAM_init();EnableAPLL();PLL_Init(40);AIC23_Init();for(;;){AIC23_Mixer();wait(25);AIC23_Mixer();}}实验8.2 语⾳信号编码解码⼀、实验⽬的1.了解ICETEK-VC5509-A板上语⾳芯⽚codec芯⽚TLV320AIC23的设计和程序控制原理。
2.了解语⾳编码G711的特点、⼯作原理及其编程。
3.了解PCM编码过程及应⽤,学习Alaw压缩解压缩⽅法的运算过程和程序编制实现。
4.通过实验体会语⾳编码。
⼆、实验设备PC,ICETEK-VC5509-A实验箱,⽿机,麦克风三.实验结果调节bcodec的参数值,为0时为原声,改变使之⾮零输出为编码并还原的声⾳。
实验8.3 语⾳信号的FIR滤波⼀.实验⽬的1.熟悉ICETEK–VC5509-A 板上语⾳codec 芯⽚TLV320AIC23 的设计和程序控制原理。
2.熟悉FIR滤波器⼯作原理及其编程。
3.使⽤TI算法库dsplib 提⾼程序运⾏效率。
DSP实验报告

DSP实验报告院(系)名称自动化科学与电气工程学院学生姓名学号任课老师吴冠2014年 6 月实验1 CCS入门实验2(C语言的使用)一、实验目的1. 学习用标准C 语言编制程序;了解常用的C 语言程序设计方法和组成部分。
2. 熟悉使用软件仿真方式调试程序。
二、实验内容1. DSP源文件的建立;2. DSP程序工程文件的建立;3. 掌握C语言在DSP中的应用。
三、实验背景知识当使用标准C 语言编制的程序时,其源程序文件名的后缀应为.c。
CCS 在编译标准C 语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP 的可执行代码。
最后生成的是coff 格式的可下载到DSP 中运行的文件,其文件名后缀为.out。
由于使用C 语言编制程序,其中调用的标准C 的库函数由专门的库提供,在编译连接时编译系统还负责构建C 运行环境。
所以用户工程中需要注明使用C 的支持库。
四、实验主程序1.add.c:实验的主程序。
2.28335.gel:系统初始化3.28335.cmd: 声明了系统的存储器配置与程序各段的连接关系。
Add.c 中程序:#include <stdio.h>/* ======== main ======== */void main(){int a=10;int b=10;int c;c=a+b;for(;;);五、实验步骤1.双击图标进入CCS环境;2.添加工程pjt文件,点击Project →open命令3.在弹出的对话框中选中cadd.pjt文件添加该工程文件。
4.添加gel文件,即右键点击工程视窗中的GEL files,在弹出的菜单中选择laod gel 命令。
5.添加.out文件,即使用File→Load Program菜单命令。
装载add.out文件,进行调试。
.out文件一般存放在程序文件夹的debug文件夹中。
6.打开观察窗口观看变量的值,即使用View→Watch Window菜单命令。
dsp实验报告

dsp实验报告C54x的浮点数的算术运算(实验⼀)实验⽬的:1)了解TMS320C54x汇编语⾔程序的基本格式,以及汇编、链接的基本过程。
2)初步熟悉软件仿真器Simulator的⽤法。
实验内容:A.基础实验将两个⼩数相乘,分离尾数与指数,进⾏算术运算,最后归⼀化。
乘法运算时遵循指数相加尾数相乘的规则。
1)编写浮点乘法程序ex1.asm,完成X1*X2=0.3×(—0.8)运算。
2) 编写链接命令⽂件ex1.cmd。
B.提⾼实验:⽤汇编语⾔实现:y1=x1*a1-x2*a2y2=12/3+1y3=0.3*(-0.5)+1实验程序框图及清单:此次试验中,在⼀个程序⾥完成基础和提⾼部分,四个计算分别作为四个⼦程序。
具体程序及相关注释如下:.title "lab1.asm".mmregsSTACK .usect "STACK", 10H.bss x1,1 ;定点数操作数1.bss x2,1 ;定点数操作数2.bss e1,1 ;指数1.bss m1,1 ;尾数1.bss e2,1 ;指数2.bss m2,1 ;尾数2.bss ep,1 ;乘积的指数.bss mp,1 ;乘积的尾数.bss product,1 ;定点乘积.bss temp,1 ;暂存单元.bss a1,1.bss a2,1.bss b1,1.bss b2,1 ;提⾼实验y1=a1*b1-a2*b2.bss y1,1.bss c1,1 ;提⾼实验y2=12/3+1.bss c2,1.bss c3,1.bss y2,1.bss d1,1 ;提⾼实验y3=0.3*(-0.5)+1.bss d2,1.bss d3,1.bss y3,1.def start.datatable: .word 3*32768/10.word -8*32768/10.word 4*32768/10 ;.word 2*32768/10 ;提⾼实验y1=a1*b1-a2*b2数据.word 12,3,1 ;提⾼实验y2=12/3+1数据.word 3*32768/10.word -5*32768/10 ;提⾼实验y3=0.3*(-0.5)+1数据.word 1 .textstart: STM #0,SWWSRSTM #STACK+10H,SPMVPD table,@x1MVPD table+1,@x2LD @x1,16,A ;EXP AST T,@e1NORM ASTH A,@m1 ;将操作数x1转换成浮点数存⾄e1和m1中LD @x2,16,A ;EXP AST T,@e2NORM ASTH A,@m2 ;将操作数x2转换成浮点数存⾄e2和m2中CALL MULT ;调⽤浮点乘法⼦程序CALL LAB11 ;y1=x1*a1-x2*a2⼦程序CALL LAB12 ;y2=12/3+1⼦程序CALL LAB13 ;y3=0.3*(-0.5)+1⼦程序done: B doneMULT: SSBX FRCT ;设置⼩数相乘浮点乘法⼦程序SSBX SXM ;设置符号扩展LD @e1,A ;ADD @e2,A ;指数相加STL A,@ep ;LD @m1,T ;MPY @m2,A ;尾数相乘EXP A ;ST T,@temp ;NORM A ;将乘积浮点化STH A,@mp ;浮点乘积尾数存mp单元LD @temp,AADD @ep,ASTL A,@ep ;浮点乘积指数存ep单元NEG ASTL A,@tempLD @temp,TLD @mp,16,ANORM ASTH A,@productRETLAB11: STM #a1,AR1 y1=x1*a1-x2*a2⼦程序RPT #3MVPD table,*AR1+SSBX FRCTSSBX SXMLD @a1,TMPY @b1,ALD @a2,TMAS @b2,ASTH A,@y1RETLAB12: STM #c1,AR1 y2=12/3+1⼦程序RPT #2MVPD table+4,*AR1+RSBX FRCTRSBX SXMLD @c1,BRPT #15SUBC @c2,BADD @c3,BSTL B,@y2RETLAB13: STM #d1,AR1 y3=0.3*(-0.5)+1⼦程序RPT #2MVPD table+7,*AR1+SSBX FRCTSSBX SXMLD @d1,TMPY @d2,ALD A,-1,A ;q.15格式转换成q1.14格式ADD @d3,14,A ;与转换成q.14的1相加STH A,@y3 ;q1.14的结果存⼊y3RET.end实验中遇到的问题及解决⽅法主要是Dos命令的熟悉和语法错误的纠正运⾏结果:A.0x0148是基础部分的计算结果(q.15格式)换算回来是B.0x23d6是y1=x1*a1-x2*a2(0.3*0.4-(-0.8)*0.2)的结果0.28045654296875误差为0.28045654296875-0.28=0.00045654296875C.0x0005是y2=12/3+1的结果D.0x666是y3=0.3*(-0.5)+1的结果-0.150146484375误差为-0.150146484375-(-0.15)=-0.00014648375⼩结通过本次试验熟悉并掌握了部分dos命令以及dsp的⼤部分汇编指令,并能在dos调试环境下调程序,检查变量以验证结果正确与否。
DSP短学期 实验报告

DSP应用系统设计实验报告一、设计任务通过矩阵键盘的输入,利用TMS320LF2407的事件管理模块,可以简单有效的控制步进电机的停转、转速和转向。
系统中设计了相应的人机界面,进行相应变量的显示、操作即可在液晶上实时显示电机当前运行状态。
利用拓展端口控制外围设备的方法,掌握使用2407DSP通用计时器的控制原理及中断服务程序的编程方法;了解蜂鸣器发生原理和音乐发生方法;了解步进电机的使用方法;了解液晶显示控制原理及编程方法及小键盘的应用。
该实验设计分成4个模块完成:•液晶模块•键盘模块•电机模块•其它模块(蜂鸣器、点阵)具体化即:1. DSP芯片接受矩阵键盘的输入。
2. DSP芯片对LED灯,蜂鸣器控制模块。
3. DSP芯片对相应信息的反馈,即:LCD液晶显示。
4. DSP控制电机正反转以及对电机速度调节。
二、系统构成及子模块原理:1.硬件原理方框图1所示,该系统由LCD液晶显示模块、矩阵键盘模块、电机模块及包含蜂鸣器和点阵的模块组成。
图1硬件原理方框图2:系统总流程图:3:子模块工作原理a.键盘输入:键盘在信号采集系统中是一个很关健的部件,它能向系统输入数据、传送命令等功能,是人工干预系统的主要手段,键盘输入功能主要提供控制信号和数据的输入。
键盘的扫描码由DSP的I/O扩展地址0x8001给出,当有键盘输入时,读此端口得到扫描码,当无键按下时读此端口的结果为0。
各按键的扫描码排列如下所示。
0x18,0x14,0x12,0x11 0 1 2 30x28,0x24,0x22,0x21 4 5 6 70x48,0x44,0x42,0x41 8 9 A B0x88,0x84,0x82,0x81 C D E F扫描码对应键值也即,当读8001H端口时,如果其值为‘18H’,则表示键盘按下的键是“0”,如果其值为‘0’,则表示没有键按下。
将键盘扫描得到的数据存入内存,然后根据数据值就能够确定所输入的键,通过映射关系,就能过将每一个键设为特定的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 实 验 报 告 实验课程: DSP原理及应用 学生姓名: 学 号: 专业班级:
2012年 5月 25日 2
目录 实验一 定点除法运算 实验二 FIR滤波器 实验三 FFT算法 实验四 卷积计算 实验五 数码管显示 实验六 语音录放 3
实验一 定点除法运算 一、实验目的 1、熟悉C54指令系统,掌握常用汇编指令,学会设计程序和算法的技巧。 2、学习用指令实现除法运算。
二、实验设备
计算机; DSP 硬件仿真器;DSP 实验开发平台。 三、实验原理 由内置的硬件模块支持,数字信号处理器可以高速的完成加法和乘法运算。但 TMS320 系列 DSP不提供除法指令,为实现除法运算,需要编写除法子程序来实现。二进制 除法是乘法的逆 运算。乘法包括一系列的移位和加法,而除法可分解为一系列的减法和移位。本 实验要求编写 一个16 位的定点除法子程序。 1.除法运算的过程 设累加器为 8 位,且除法运算为10 除以3,除的过程包括与除数有关的除数逐 步移位,然 后进行减法运算,若所得商为正,则在商中置1,否则该位商为0 例如:4 位除法示例: (1)数的最低有效位对齐被除数的最高有效位 00001010 - 00011000 11110010 (2)由于减法结果为负,丢弃减法结果,将被除数左移一位再减 00010100 - 00011000 11111000 (3)结果仍为负,丢弃减法结果,将被除数左移一位再减 00101000 - 00011000 00010000 (4)结果为正,将减法结果左移一位后把商置1,做最后一次减 00100001 - 00011000 00001001 (5)结果为正,将减法结果左移一位加1 得最后结果,高4 位是余数,低4 位商: 00010011 2.除法运算的实现 为了尽量提高除法运算的效率,’C54x 系列提供了条件减指令SUBC 来完成除法操作。
四、实验步骤 1.用Simulator 方式启动Code Composer。 2 . 执行Project New 建立新的项目, 输入chuf作为项目的名称, 将程序定 位在 D:\ti\myprojects\chuf目录。 3.执行File New Source File 建立新的程序文件,为创建新的程序文件命名为 chuf.asm 并 保存;执行Project Add Files to Project,把chuf.asm 加入项目中。 4. 执行File New Source File 建立新的文件并保存为chuf.cmd; 执行Project Add Files to Project,把chuf.cmd 加入项目中。 5.编辑chuf.asm 加入如下内容: ;*** 编制计算除法运算的程序段。其中|被除数|<|除数|,商为小数*** .title "chuf.asm" .mmregs .def start,_c_int00 4
.bss num,1 .bss den,1 .bss quot,1
.data table .word 4*32768/10 ;0.4 .word -8*32768/10 ;-0.8
.text _c_int00 b start nop nop start: STM #num,AR1 RPT #1 MVPD table,*AR1+ ;传送2个数据至分子、分母单元 STM #den,AR1 LD *AR1-,16,A ;将分母移到累加器A(31-16) MPYA *AR1+ ;(num)*(A(32-16))->B,获取商的符号 ;(在累加器B中) ABS A ;分母取绝对值 STH A,*AR1- ;分母绝对值存回原处 LD *AR1+,16,A ;分子->A(32-16) ABS A ;分子取绝对值 RPT #14 ;15次减法循环,完成除法 SUBC *AR1,A XC 1,BLT ;如果B〈0(商是负数)则需要变号 NEG A STL A,*(quot) ;保存商 .END 6、编译chuf.cmd加入如下内容: /*chuf.cmd*/ chuf.obj -m chuf.map -o chuf.out
MEMORY { PAGE 0: ROM :origin=0080h,length=1000h ROM :origin=0060h,length=10h PAGE 1: OTHER :origin=0400h,length=40h } 5
SECTIONS { .text: {}>ROM PAGE 0 .data : {}>ROM PAGE 0 .stack : {}>OTHER PAGE 1 .bss : {}>OTHER PAGE 1 } 7、实验结果:
五、实验小结 通过几次的课程实验,我学到了不少新的知识,只有自己真正做过才会知道和了解。结合课程中所学的理论知识,和参考资料做课程实验。达到学有所用的目的。学会查阅相关手册与资料,通过查阅手册和文献资料,并掌握合理选用 的原则,培养独立分析与解决问题的能力。 这次设计我们学到了很多东西,熟悉 CCS5000 软件的使用,还加深了对知识 的理解和掌握。作为一名大三的学生,我觉得能做类似的课程设计是十分有意义的。 6
实验二 FIR滤波器 一、 实验目的 1、熟悉数字滤波的基本原理和实现方法; 2、熟悉线性相位FIR 数字滤波器特性; 3、通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。
二、 实验设备 计算机; DSP 硬件仿真器;DSP 实验开发平台。
三、 实验硬件设置 1、将实验箱右侧的船型开关往”I”方向打开电源; 2、将主板的开关S33(主板右上角)拨通+/-5V 电源; 3、实验开始前先按RST 硬件复位(实验中不要再按复位键)。
四、 实验步骤 1、启动CCS编写实验程序代码; 2、打开Projects ,选择MYprojects →fir→fir.pjt; 3、打开程序后.进行运行和编译;编辑fir.asm 加入如下内容: ;一个FIR滤波器源程序 fir.asm .mmregs .global start .def start,_c_int00
INDEX .set 1 KS .set 256 ;模拟输入数据缓冲区大小
N .set 17 COFF_FIR .sect "COFF_FIR" ;FIR滤波器系数 .word 0 .word 158 .word 264 .word -290 .word -1406 .word -951 .word 3187 .word 9287 .word 12272 .word 9287 .word 3187 .word -951 7
.word -1406 .word -290 .word 260 .word 158 .word 0 .data INPUT .copy "firin.inc" ;模拟输入在数据存储区0x2400 OUTPUT .space 1024 ;输出数据在数据区0x2500 ;FIR_DP .usect "FIR_VARS",0 ;D_FIN .usect "FIR_VARS",1 ;D_FOUT .usect "FIR_VARS",1 COFFTAB .usect "FIR_COFF",N DATABUF .usect "FIR_BFR",N BOS .usect "STACK",0Fh TOS .usect "STACK",1
.text .asg AR0,INDEX_P .asg AR4,DATA_P ;输入数据x(n)循环缓冲区指针 .asg AR5,COFF_P ;FIR系数表指针 .asg AR6,INBUF_P ;模拟输入数据指针 .asg AR7,OUTBUF_P;FIR滤波器输出数据指针 _c_int00 b start nop nop start: ssbx FRCT STM #COFFTAB,COFF_P RPT #N-1 ;将FIR系数从程序存储器移动 MVPD #COFF_FIR,*COFF_P+ ;到数据存储器
STM #INDEX,INDEX_P STM #DATABUF,DATA_P RPTZ A,#N-1 STL A,*DATA_P+ ;将数据循环缓冲区清零
STM #(DATABUF+N-1),DATA_P ;数据缓冲区指针指向x[n-(N-1)] STM #COFFTAB,COFF_P ; FIR_TASK: STM #INPUT,INBUF_P STM #OUTPUT,OUTBUF_P STM #KS-1,BRC RPTBD LOOP-1