TMS320C54x DSP结构、原理及应用的大作业.pdf

上传人:罗晋 文档编号:6072177 上传时间:2020-09-05 格式:PDF 页数:21 大小:446.93KB
返回 下载 相关 举报
TMS320C54x DSP结构、原理及应用的大作业.pdf_第1页
第1页 / 共21页
TMS320C54x DSP结构、原理及应用的大作业.pdf_第2页
第2页 / 共21页
TMS320C54x DSP结构、原理及应用的大作业.pdf_第3页
第3页 / 共21页
TMS320C54x DSP结构、原理及应用的大作业.pdf_第4页
第4页 / 共21页
TMS320C54x DSP结构、原理及应用的大作业.pdf_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《TMS320C54x DSP结构、原理及应用的大作业.pdf》由会员分享,可在线阅读,更多相关《TMS320C54x DSP结构、原理及应用的大作业.pdf(21页珍藏版)》请在三一文库上搜索。

1、南京航空航天大学 南京航空航天大学 DSP 原理与应用实验报告 DSP 原理与应用实验报告 学生姓名: 蔡静 学生学号: SX1401111 上机地点: 12 号楼 509 室 2015 年 6 月 一、已知一低通滤波器的采样率为 2KHz, 通带为 500Hz, 阻带为 600 Hz,带内波动 3dB,带外衰减-50dB,滤波器的相位具有线性特性, 具体幅频特性见下图。要求用等波纹方法设计出该 FIR 滤波器,然后 用 TMS320C54x 汇编语言编程实现该 FIR 滤波器。 FIR 滤波器系数为: 0.0073 -0.0009 -0.0395 -0.0609 -0.0149 0.0340

2、 -0.0014 -0.04570.0125 0.0641 -0.0375-0.1080 0.1254 0.4717 0.4717 0.1254 -0.1080-0.0375 0.0641 0.0125 -0.0457 -0.00140.0340-0.0149 -0.0609-0.0395-0.00090.0073 1.matlab 设计 FIR 滤波器: 0200400600800100012001400160018002000 -120 -100 -80 -60 -40 -20 0 20 Frequency Magnitude(dB) 滤 波 器 的 幅 频 响 应 2.C54x 汇编语言

3、设计 FIR 滤波器: 输入 100 点的冲激响应信号 impluse.dat,输出存到 y_impluse.dat 文 件中 00.10.20.30.40.50.60.70.80.91 -30 -25 -20 -15 -10 -5 0 Frequency Phase(degree) 滤 波 器 的 相 频 响 应 输入 100 点的正弦信号 y_sin200.dat,输出存到 out_sin200.dat 文件中 输入 100 点的正弦信号 y_sin800.dat,输出存到 out_sin800.dat 文件中 二、 认真阅读课本中 P182P186 上基于时间抽取的 81024 点 FF

4、T 的 程序及输入、输出说明,然后调试出该程序,并对输入方波信号进行 FFT 变换,检验输出信号是否是一 sinc 波形。同时更改程序,使其能 进行 2048 点 FFT 运算。 8 点 fft,输入 FFTIN.DAT,输出存到 out.dat 文件中 2048 点 fft,输入 FFTIN.dat,输出存到 out.dat 文件中。 三、编写 TMS320C54x 汇编语言程序,计算下列矩阵乘法: 3C 56 A4 78 32 47 88 64 28 38 6C 50 1E 29 50 3 4 5A 8 3 4 8 6 2 3 6 4 1 3 4 2 7 6 5 4 6 5 4 3 5 4

5、 3 2 4 3 2 1C CBA 要求: 两个矩阵的数据由 DATA 段输入(可放在源程序中,也可单 独建立一个数据文件); 两个矩阵的数据从 0 口以数据文件 IN.DAT 输入,计算结果 从 1 口以数据文件 OUT.DAT 输出。 1. 程序说明 本程序由 Matrix_Mul.asm,Matrix_Mul.cmd,input_B.dat,input_C.dat,ou tput_A.dat 组成。 通过两种不同的方式输入矩阵 B 和矩阵 C:矩阵 B 保存在 input_B.dat 文件中,由 data 段输入,通过.copy 命令加载到程 序中;矩阵 C 保存在 input_C.da

6、t 文件中,利用 I/O 端口从 PA1 口输入。 矩阵相乘时,利用 RPTZ,RPTB,BANZ 实现三层循环嵌套,并通过 MAR 指令实现对辅助寄存器的修改。 2. 测试结果 矩阵 B 保存在 input_B.dat 文件中,由 data 段输入到 MatrixB(0 x0070); 矩阵 C 保存在 input_C.dat 文件中,通过 PA1 口输入到 MatrixC(0 x0080); 通过计算,结果矩阵 A 保存到 MatrixA(0 x0090)中,并通过 PA0 口输出到 output_A.dat 文件中。 四、附录 实验一: 四、附录 实验一: matlab 程序:程序: c

7、lc; clear all; n,fo,mo,w = remezord( 500 600, 1 0, 0.18 0.003, 2000 ); b = remez(n,fo,mo,w); h,w=freqz(b); figure(1); plot(w*2000/pi,20*log10(abs(h); grid on; xlabel(Frequency); ylabel(Magnitude(dB); title(滤波器的幅频响应); figure(2); plot(w/pi,unwrap(angle(h); xlabel(Frequency); ylabel(Phase(degree); grid

8、 on title(滤波器的相频响应); CCS 程序: FIR.asm CCS 程序: FIR.asm .title FIR.asm .mmregs .def_c_int00 PA0.set0 ;0 口 输出 PA1.set1 ;1 口 输入 x.usect x,28 ;定义数据空间 h.usect h,28 .bssy,1 .data COEF: .word 32768*73/10000; H0-H27 .word -32768*9/10000 .word -32768*395/10000 .word -32768*609/10000 .word -32768*149/10000 .wor

9、d 32768*340/10000 .word -32768*14/10000 .word -32768*457/10000 .word 32768*125/10000 .word 32768*641/10000 .word -32768*375/10000 .word -32768*1080/10000 .word 32768*1254/10000 .word 32768*4717/10000 .word 32768*4717/10000 .word 32768*1254/10000 .word -32768*1080/10000 .word -32768*375/10000 .word 3

10、2768*641/10000 .word 32768*125/10000 .word -32768*457/10000 .word -32768*14/10000 .word -32768*149/10000 .word -32768*609/10000 .word -32768*395/10000 .word -32768*9/10000 .word 32768*73/10000; H0-H27 .text _c_int00: SSBX FRCT ;状态寄存器 st1 置位,frct 置为 1,小 数乘法 STM #h,AR1;ar1 指向 h RPT #27;将 28 个系数传送到数据空间

11、 MVPD COEF,*AR1+ STM #x+27,AR3;ar3 指向 x(n-27) STM #h+27,AR4;ar4 指向 h27 STM #28,bk;循环缓冲区长度 bk=28 STM #-1,AR0;ar0=-1 LD #x,DP PORTR PA1,x;输入 x(n) STM #00BEh,AR6 ;输出数据缓冲区首地址#00BEh STM #0064h-1,AR7 ;循环计算 100 个样点 FIR: RPTZ A,#27 ;A 清零,迭代 28 次 MAC *AR3+0%,*AR4+0%,A ;乘法累加 STH A,y;保存 y(n) STH A,*AR6+ ;保存 y(

12、n)到 DM 空间,方便画图 PORTW y,PA0;输出 y(n) PORTR PA1,*AR3+0%;输入新数据 BANZ FIR,*AR7- end: B end .END FIR.cmd FIR.cmd -x .DebugFIR.obj -x .DebugFIR_V.obj -o FIR.out -m FIR.obj MEMORY PAGE 0: EPROM: org=0 xE000,len=0 x1000 VECS:org=0 xFF80,len=0 x0080 PAGE 1: SPRAM: org=0 x0060,len=0 x0020 DARAM: org=0 x0080,len

13、=0 x1380 SECTIONS .text: EPROM PAGE 0 .data: EPROM PAGE 0 .bss : SPRAM PAGE 1 x: align(16) DARAM PAGE 1 h: align(16) DARAM PAGE 1 .vectors: VECS PAGE 0 FIR_V.asm FIR_V.asm .title FIR_V.asm .ref _c_int00 .sect .vectors B _c_int00 .end 实验二:2048 点 fft FFT.ASM 实验二:2048 点 fft FFT.ASM * * N(8-1024) points

14、 FFT Program * * .title fft.asm .mmregs .copycoeff.inc .copyfftin.dat * .copyfftin64.dat .defstart sine:.usectsine,512 cosine:.usectcosine,512 d_input:.usectd_input,2048 fft_data:.usectfft_data,2048 fft_out:.usectfft_out,1024 STACK.usectSTACK,10 K_DATA_IDX_1.set 2 K_DATA_IDX_2.set 4 K_DATA_IDX_3.set

15、 8 K_TWID_TBL_SIZE.set 512 K_TWID_IDX_3.set 128 K_FLY_COUNT_3.set 4 K_FFT_SIZE.set 2048;N=2048(8) K_LOGN.set 11;LOG(N)=LOG(2048)=11(3) PA0.set 0 PA1.set 1 .bssd_twid_idx,1 .bssd_data_idx,1 .bssd_grps_cnt,1 .sectfft_prg *BitReversal Routine* .asgAR2,REORDERED .asgAR3,ORIGINAL_INPUT .asgAR7,DATA_PROC_

16、BUF .text start: SSBXFRCT STM#STACK+10,SP STM#d_input,AR1;input the 2N data *STM #fft_data,AR1;input the 2N data RPT#2*K_FFT_SIZE-1;from PA1 MVPDd_input1,*AR1+ *PORTRPA1,*AR1+ STM#sine,AR1;move coeft of sin RPT#1024;from program to data MVPDsine1,*AR1+ STM#cosine,AR1;move coeff of cos RPT#1024;from

17、program to data MVPDcosine1,*AR1+ STM#d_input,ORIGINAL_INPUT STM#fft_data,DATA_PROC_BUF MVMMDATA_PROC_BUF,REORDERED STM#K_FFT_SIZE-1,BRC RPTBDbit_rev_end-1 STM#K_FFT_SIZE,AR0 MVDD*ORIGINAL_INPUT+,*REORDERED+ MVDD*ORIGINAL_INPUT-,*REORDERED+ MAR*ORIGINAL_INPUT+0B bit_rev_end: * * * * FFT Code * * * *

18、 * .asgAR1,GROUP_COUNTER .asgAR2,PX .asgAR3,QX .asgAR4,WR .asgAR5,WI .asgAR6,BUTTERFLY_COUNTER .asgAR7,STAGE_COUNTER * * * stage 1 * * * STM#0, BK LD#0,ASM STM#fft_data,PX LD*PX,16,A STM#fft_data+K_DATA_IDX_1,QX STM#K_FFT_SIZE/2-1,BRC RPTBDstage1end-1 STM#K_DATA_IDX_1+1,AR0 SUB*QX,16,A,B ADD*QX,16,A

19、 STHA,ASM,*PX+ STB,*QX+ |LD*PX,A SUB*QX,16,A,B ADD*QX,16,A STHA,ASM,*PX+0 STB,*QX+0% |LD*PX,A stage1end: * * * Stage 2 * * * STM#fft_data,PX STM#fft_data+K_DATA_IDX_2,QX STM#K_FFT_SIZE/4-1,BRC LD*PX,16,A RPTBDstage2end-1 STM#K_DATA_IDX_2+1,AR0 ;1st butterfly SUB*QX,16,A,B ADD*QX,16,A STHA,ASM,*PX+ S

20、TB,*QX+ |LD*PX,A SUB*QX,16,A,B ADD*QX,16,A STHA,ASM,*PX+ STHB,ASM,*QX+ ;2nd butterfly MAR*QX+ ADD*PX,*QX,A SUB*PX,*QX-,B STHA,ASM,*PX+ SUB*PX,*QX,A STB,*QX |LD*QX+,B STA,*PX |ADD*PX+0%,A STA,*QX+0% |LD*PX,A stage2end: * * * Stage 3 through Stage logN * * * STM#K_TWID_TBL_SIZE,BK ST#K_TWID_IDX_3,d_tw

21、id_idx STM#K_TWID_IDX_3,AR0 STM#cosine,WR STM#sine,WI STM#K_LOGN-2-1,STAGE_COUNTER ST #K_FFT_SIZE/8-1,d_grps_cnt STM#K_FLY_COUNT_3-1,BUTTERFLY_COUNTER ST#K_DATA_IDX_3,d_data_idx stage: STM#fft_data,PX LDd_data_idx,A ADD*(PX),A STLMA,QX MVDKd_grps_cnt,GROUP_COUNTER group: MVMDBUTTERFLY_COUNTER,BRC RP

22、TBDbutterflyend-1 LD*WR,T MPY*QX+,A MACR*WI+0%,*QX-,A ADD*PX,16,A,B STB,*PX |SUB*PX+,B STB,*QX |MPY *QX+,A MASR*QX,*WR+0%,A ADD*PX,16,A,B STB,*QX+ |SUB*PX,B LD*WR,T STB,*PX+ |MPY*QX+,A butterflyend: ; Update pointers for next group PSHM AR0 MVDK d_data_idx,AR0 MAR *PX+0 MAR *QX+0 BANZDgroup,*GROUP_C

23、OUNTER- POPMAR0 MAR *QX- ;Updatecounters and indices for next stage LD d_data_idx,A SUB #1,A,B STLMB,BUTTERFLY_COUNTER STLA,1,d_data_idx LDd_grps_cnt,A STLA,ASM,d_grps_cnt LDd_twid_idx,A STLA,ASM,d_twid_idx BANZD stage,*STAGE_COUNTER- MVDKd_twid_idx,AR0 fft_end: * * * Compute the power spectrum * *

24、* STM#fft_data,AR2 STM#fft_data,AR3 STM#fft_out,AR4 STM#K_FFT_SIZE*2-1,BRC RPTBpower_end-1 SQUR*AR2+,A SQURA*AR2+,A STHA,*AR4+ power_end: STM#fft_out,AR4 RPT#K_FFT_SIZE-1 PORTW*AR4+,PA0 here:Bhere .end FFT.CMD FFT.CMD fft.obj -o fft.out -m fft.map -e start MEMORY PAGE 0: EPROM: org=0E000h, len=1000h

25、 VECS : org=0FF80h, len=0080h PAGE 1: SPRAM: org=0060h, len=0020h DARAM: org=0100h, len=7000h RAM : org=8000h, len=20000h SECTIONS .text : EPROM PAGE 0 .data : EPROM PAGE 0 STACK : SPRAM PAGE 1 .bss: SPRAM PAGE 1 sine: align(1024) DARAM PAGE 1 cosine : align(1024) DARAM PAGE 1 d_input : DARAM PAGE 1

26、 fft_data : DARAM PAGE 1 fft_out : DARAM PAGE 1 fft_v.asm fft_v.asm .title fft_v.asm .ref start .sect .vectors B start .end 实验三:实验三: Matrix_Mul.asm Matrix_Mul.asm .title Matrix_Mul.asm .mmregs .copy input_B.dat .def _c_int00 PA0 .set 0 ;0 口输出 PA1 .set 1 ;1 口输入 MatrixB .usect MatrixB,16 MatrixC .usec

27、t MatrixC,16 MatrixA .usect MatrixA,16 STACK .usect STACK,10h .text _c_int00: STM #STACK+10h,SP ;堆栈初始化 STM #MatrixB,AR1 RPT #15 ;输入 B,通过.copy 复制 到.data 段 MVPD input_B,*AR1+ STM #MatrixC,AR1 RPT #15 ;输入 C,通过 PA1 端口 PORTR PA1,*AR1+ STM #MatrixB,AR2 STM #MatrixC,AR3 STM #MatrixA,AR7 STM #16,BK STM #4,A

28、R0 STM #3,AR4 loop: STM #3,BRC ;块重复 4 次 RPTB NEXT-1 RPTZ A,#3 MAC *AR2+,*AR3+0%,A;X 每次加 1,Y 每次加 4 STL A,*AR7 ;存储 A PORTW *AR7+,PA0;输出 A MAR *+AR2(-4) ;AR2 重新指向行首 MAR *AR3+;AR3 指向下一列 NEXT: MAR *+AR2(4) ;AR2 指向下一行 MAR *+AR3(-4) ;AR3 重新指向首列 BANZ loop,*AR4- END: B END .end Matrix_Mul.cmd Matrix_Mul.cmd -x .DebugMatrix_Mul.obj -o Matrix_Mul.out -m Matrix_Mul.map MEMORY PAGE 0: EPROM: org=0E000h, len=1000h PAGE 1: SPRAM: org=0060h, len=1000h SECTIONS .text : EPROM PAGE 0 .data : EPROM PAGE 0 STACK : SPRAM PAGE 1 MatrixB : SPRAM PAGE 1 MatrixC : SPRAM PAGE 1 MatrixA : SPRAM PAGE 1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1