广工DSP原理课练习题.docx

上传人:b****0 文档编号:9423255 上传时间:2023-05-19 格式:DOCX 页数:16 大小:112.80KB
下载 相关 举报
广工DSP原理课练习题.docx_第1页
第1页 / 共16页
广工DSP原理课练习题.docx_第2页
第2页 / 共16页
广工DSP原理课练习题.docx_第3页
第3页 / 共16页
广工DSP原理课练习题.docx_第4页
第4页 / 共16页
广工DSP原理课练习题.docx_第5页
第5页 / 共16页
广工DSP原理课练习题.docx_第6页
第6页 / 共16页
广工DSP原理课练习题.docx_第7页
第7页 / 共16页
广工DSP原理课练习题.docx_第8页
第8页 / 共16页
广工DSP原理课练习题.docx_第9页
第9页 / 共16页
广工DSP原理课练习题.docx_第10页
第10页 / 共16页
广工DSP原理课练习题.docx_第11页
第11页 / 共16页
广工DSP原理课练习题.docx_第12页
第12页 / 共16页
广工DSP原理课练习题.docx_第13页
第13页 / 共16页
广工DSP原理课练习题.docx_第14页
第14页 / 共16页
广工DSP原理课练习题.docx_第15页
第15页 / 共16页
广工DSP原理课练习题.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

广工DSP原理课练习题.docx

《广工DSP原理课练习题.docx》由会员分享,可在线阅读,更多相关《广工DSP原理课练习题.docx(16页珍藏版)》请在冰点文库上搜索。

广工DSP原理课练习题.docx

广工DSP原理课练习题

《DSP原理与应用》练习题

32学时版本

1.Q15表示是16位数据中第15位为符号位,第14~0位为小数位。

试写出下面问题的答案:

⑴分别写出十进制正数0.68和十进制负数-0.245的Q15表示。

⑵分别写出Q15表示的A200H和5A00H的十进制数值。

⑶已知两个Q15数相乘的乘积存放于累加器A中。

FRCT=0时A为16进制0xFFEA000000,该乘积的十进制数是多少?

FRCT=1时A为16进制0x007D000000,该乘积的十进制数又是多少?

2.在C54xDSP的C语言开发环境中,数据类型与通常的C语言开发环境的数据类型不同,主要数据类型如下表所示:

数据类型

位长

char,unsignedchar

16

short,unsignedshort,signedshort

16

int,unsignedint,signedint

16

long,unsignedlong,signedlong

32

float

32

double

32

现在利用一个15阶Hamming低通滤波器对16位音频信号进行FIR滤波。

在C54xDSP和CCS2.2上的C语言程序如下:

constdoublecoef[15]={0.00482584,0.00804504,-0.00885584,-0.04291741,

-0.02903702,0.09725365,0.28342322,0.37452503,

0.28342322,0.09725365,-0.02903702,-0.04291741,

-0.00885584,0.00804504,0.00482584};

voidfir(int*x,int*y)

{

inti,j;

for(i=0;i<1024;i++)

{

doubleaccumulator=0.0;

for(j=0;j<15;j++)

{

accumulator+=x[i-j]*coef[j];

}

y[i]=(int)accumulator;

}

}

以上表达式中,

分别是低通滤波输入、输出的16位整型数组变量。

现在要求把以上过程优化为在C54x平台上运行的精度最高、执行效率最高的16位定点运算形式。

试写出在C54xDSP和CCS2.2环境下完成16位相乘和32位累加的定点运算的C程序。

3.解决图像编码中常见的8x8离散余弦变换在VC5402DSP上定点运算问题。

⑴用C语言写出定点运算实现

的程序,并且把最后结果存放到16位整型变量r中。

数据类型见前面题3的表格。

⑵用C54x汇编指令写出定点运算实现

的代码,并且把最后结果转换为16位整数存放到1102H的地址中。

⑶现有一个8位无符号字符数118,对其执行浮点运算

,VC5402汇编指令代码段如下:

SSBXFRCT

MPY*(1000H),#118,A

MPYA*(1001H)

STHB,*(1002H)

运算前数据页1000H和1001H的地址存放的数据是多少?

运算后数据页1002H的地址存放的结果是多少?

⑷上面⑶的代码段求出

的结果是多少?

4.现在需要对16位整型音频信号数据执行512点FFT,待处理数据放在数据页首地址为0A00H,长度为512的缓冲区内。

在按时间抽取基2FFT碟形运算中输入数据倒序,输出数据顺序。

⑴写出在一个512次循环中以降序ARx-0B读入数据页0BFFFH~0A00H的256个输入数据的汇编指令代码。

⑵在⑴中已经读取0A65H地址的数据后,随后连续8次读取的输入数据的地址是多少?

要求写出详细计算过程,光写对答案不能得满分。

5.使用VC5402DSP芯片对一无限长的16位整型音频信号序列执行103阶FIR带通滤波。

需要分配滤波数据缓冲区FIR_DATA和滤波系数缓冲区FIR_COEF。

现有的在C54xDSP和CCS2.2环境下的C语言程序fir.c和相应的链接命令文件fir.cmd如下:

fir.c文件:

intfir_data[103];

intfir_coef[103];

main()

{

fir(fir_data,fir_coef,signal_len,fp_in,fp_out);//执行FIR滤波的汇编函数

}

fir.cmd文件:

MEMORY

{

PAGE0:

/*programspace*/

VECS:

origin=0x0080,length=0x0080/*vectortablespace*/

PROG:

origin=0x0100,length=0x2B00/*programmemoryspace*/

PAGE1:

/*dataspace*/

DAT1:

origin=0x2C00,length=0x1400/*applicationdata*/

DAT2:

origin=0x4000,length=0x4000/*applicationdata*/

}

SECTIONS

{

.vectors:

{}>VECSPAGE0/*interruptvectortable*/

.text:

{}>PROGPAGE0/*programcode*/

.data:

{}>PROGPAGE0/*initializeddata*/

.coeffs:

{}>PROGPAGE0/*initializedparameters*/

.stack:

{}>DAT1PAGE1/*softwarestacksection*/

.variable:

{}>DAT2PAGE1/*uninitializedvarsforDSP&AIC10*/

.bss:

{}>DAT2PAGE1/*uninitializedvarsforapplications*/

}

于是滤波数据缓冲区FIR_DATA和滤波系数缓冲区FIR_COEF都在片外SRAM中。

现在为了提高执行效率尤其在汇编函数中使用双操作数寻址,需要令滤波数据缓冲区FIR_DATA和滤波系数缓冲区FIR_COEF在片内DARAM中。

在上面的C语言程序fir.c和相应的链接命令文件fir.cmd中需要做出哪些改动?

写出所有改动的地方。

6.在VC5402芯片上对无限长16位整型音频信号执行分段实时采集、滤波、输出至功放。

其中滤波使用51阶Hamming窗低通滤波以及循环缓冲区方法。

汇编指令代码段如下:

LOOP_FILTERING:

STM#DATA_PTR+50,①

STM#COEF_PTR,②

STM#LEN-1,AR7

STM#IN_PTR,AR1

STM#OUT_PTR,AR2

STM③,AR0

SSBX④

loop2:

STM⑤,BK

MVDD*AR1+,⑥

LD#0,A

STM⑦,AR6

loop1:

MAC⑧,⑨,A

BANZloop1,*AR6-

STHA,*AR2+

BANZloop2,*AR7-

其中COEF_PTR指向滤波系数缓冲区,DATA_PTR指向输入缓冲区,IN_BUF指向音频采集缓冲区,OUT_BUF指向音频功放输出缓冲区。

试写出下面问题的答案:

(1)在上面汇编指令代码段中9个标有序号的空中填空,使程序完整并且正确运行。

(2)在上面代码段跟踪过程中,读出指向滤波系数缓冲区的辅助寄存器内容为10AFH,随后连续执行4次MAC指令所访问的4个内存地址分别是多少?

又读出指向输入缓冲区的辅助寄存器内容为10F1H,随后同一辅助寄存器对同一缓冲区访问102次后读数是多少?

7.在题7标示为LOOP_FILTERING的使用循环缓冲区法完成FIR滤波的汇编指令代码段中存在两重循环嵌套。

现有代码采用根据辅助寄存器进行条件跳转的方法实现循环。

C54xDSP还提供另外一种执行效率更高的实现循环的方法,即重复和块重复。

试写出下面问题的答案:

⑴重复指令RPT和RPTZ使用C54xDSP内核什么专门的寄存器或者标志位?

把他们全部列举出来。

⑵块重复指令RPTB使用C54xDSP内核什么专门的寄存器或者标志位?

把他们全部列举出来。

⑶对题6标示为LOOP_FILTERING的使用循环缓冲区法完成FIR滤波的汇编指令代码段进行优化,用重复指令和块重复指令完全消除根据辅助寄存器进行条件跳转的指令。

8.题4标号为LOOP_FILTERING的滤波代码段必须封装成为如下形式的函数方能被C语言主程序调用。

voidfir(int*in_buf,int*data_buf,int*coeff_buf,intlen,int*out_buf)

其中第一形参为指向音频采集缓冲区的指针in_buf,第二形参为指向输入缓冲区的指针data_buf,第三形参为指向滤波系数缓冲区的指针coeff_buf,第四形参为滤波长度(不等于信号分段长度)len,第五形参为指向音频功放输出缓冲区的指针out_buf。

从C主程序跳入汇编子函数时ST1状态寄存器的CPL位自动为1。

试写出下面问题的答案:

(1)在跳入汇编子程序fir并且执行如下现场保护后,写出把上述fir函数五个形参传递至累加器B的指令。

PSHMAR0

PSHMAR1

PSHMAR2

PSHMAR3

PSHMAR4

PSHMAR5

PSHMAR6

PSHMAR7

FRAME#-12

(2)写出返回C语言主程序前执行现场恢复的汇编指令代码。

9.现在需要对信号缓冲区的256个16位有符号整数的音频信号数据减去其均值(直流分量),成为交流信号。

信号缓冲区在数据页,首地址2C00H。

均值存放于数据页2D00H地址中。

去直流分量的汇编指令代码如下:

STM#2C00H,AR1

LD*(2D00H),B

STM#255,AR0

loop:

LD*AR1,A

SUBB,A

STLA,*AR1+

BANZloop,*AR0-

现在要求对上述代码进行优化以提高执行效率,措施包括双16位读写和减法运算、重复或者块重复等。

其中仅改写为双16位操作便可使循环次数减半。

写出在上述代码基础上经过优化达到最高执行效率的汇编指令代码。

10.由美国国家科学奖章获得者、美国高通公司创始人之一兼首席科学家、被誉为CDMA之父的AndrewJ.Viterbi发明的Viterbi译码是卷积码的译码方法之一,因运算复杂度最低而广泛用于3G移动通信系统和卫星通信系统的信道纠错与检错。

其运算核心为循环执行的加比选ACS碟形运算,VC5402汇编代码如下:

LD*AR2,B;本地码间汉明距离→BL

ADD*AR5,B,A;AL=Old_Met(2*j)+BL

SUB*AR5

(1),B,B;BL=Old_Met(2*j+1)-BL

MAXA;A=max(A,B)

STLA,*AR4+

LD*AR2,B

SUB*AR5+,B,A;AL=Old_Met(2*j)-BL

ADD*AR5+,B,B;BL=Old_Met(2*j+1)+BL

MAXA;A=max(A,B)

STLA,*AR3+

现在要求用双16位运算指令对以上汇编代码进行优化以提高一倍运算效率。

写出经过双16位运算优化后达到最高执行效率的汇编指令代码。

已知每次ACS碟形运算开始时AR5内容为偶数。

11.现在需要在

)共8个乘积中取最小值并且存放到数据页1020H的内存中去。

分别存放于首地址为1000H和1010H的长度为8的内存区中,十进制数值如下所示:

在下面所出现的C54xDSP汇编指令中,LD*ar2+,T指令,MPY*AR3+,A/B指令,MINA指令,STLA,*AR1+指令均是单字指令,MINA指令的操作是比较两个累加器A和B的数值然后取其中最小值送至累加器A。

试写出下面问题的答案:

1写出执行完以下汇编指令后,AR1-1(即AR1所指向的上一个地址)的地址是多少?

其中十进制数值是多少?

STM#1000H,AR2

STM#1010H,AR3

STM#1020H,AR1

STM#6,AR0

LD*AR2+,T

MPY*AR3+,A

loop:

LD*AR2+,T

MPY*AR3+,B

MINA

BANZloop,*AR0-

STLA,*AR1+

2写出执行完以下汇编指令后,AR1-1(即AR1所指向的上一个地址)的地址是多少?

其中十进制数值是多少?

STM#1000H,AR2

STM#1010H,AR3

STM#1020H,AR1

STM#6,AR0

LD*AR2+,T

MPY*AR3+,A

loop:

LD*AR2+,T

BANZDloop,*AR0-

MPY*AR3+,B

MINA

STLA,*AR1+

3写出执行完以下汇编指令后,AR1-1(即AR1所指向的上一个地址)的地址是多少?

其中十进制数值是多少?

STM#1000H,AR2

STM#1010H,AR3

STM#1020H,AR1

STM#6,AR0

LD*AR2+,T

MPY*AR3+,A

loop:

LD*AR2+,T

BANZloop,*AR0-

MPY*AR3+,B

MINA

STLA,*AR1+

4写出执行完以下汇编指令后,AR1-1(即AR1所指向的上一个地址)的地址是多少?

其中十进制数值是多少?

STM#1000H,AR2

STM#1010H,AR3

STM#1020H,AR1

STM#6,AR0

LD*AR2+,T

MPY*AR3+,A

loop:

BANZDloop,*AR0-

LD*AR2+,T

MPY*AR3+,B

MINA

STLA,*AR1+

5最后,上面哪段代码正确(与本题第一句话的要求一致)?

哪段代码的执行效率最高?

12.下面的汇编代码段实现视频编码的16x16方块运动估计。

用VC5402的ABDST指令计算当前16x16图像块与参考帧带运动补偿的16x16图像块之间的绝对值和差。

其中省略了计算出当前块与参考块指针的部分代码。

每行汇编指令后面都标出了指令周期数。

试用重复、块重复、跳转延迟等优化措施改写这段代码,使得运算结果相同的情况下执行效率最高。

SSBXSXM

(1)

LD*(pos_size),A

(1)

STLMA,AR3

(1)

L1:

……(省略)

LD*(width),A

(1)

STLMA,AR0

(1)

LD#0,B

(1)

STM#15,AR2

(1)

L2:

MVMMAR6,AR4

(1)

MVMMAR7,AR5

(1)

LD#0,A

(1)

STM#16,AR1

(1)

L3:

ABDST*AR4+,*AR5+

(1)

BANZL3,*AR1-(4)

MAR*AR6+0

(1)

MAR*AR7+0

(1)

BANZL2,*AR2-(4)

LD*(BL),A

(1)

SUB*(min_sad),A

(1)

BCL4,AGEQ(5)

STLB,*(min_sad)

(1)

LD*(current_pos),A

(1)

STLA,*(best_pos)

(1)

L4:

ADDM#1,*(current_pos)

(2)

BANZL1,*AR3-(4)

13.实验六A/D转换(输入数据)实验和实验七D/A转换(输出数据)实验利用VC5402DSP的片内外设第1号多通道缓冲串行口McBSP#1分别接收和发送数据。

McBSP的结构方框图如图1所示。

在EL-DSP-EXPⅠ教学实验系统中,VC5402的McBSP#1与位于语音处理单元的TLC320AD50C芯片相连,分别完成一维音频信号的输入、A/D转换、DSP采集和DSP输出、D/A转换、输出。

图1VC5402芯片的片内外设多通道缓冲串行口McBSP的结构方框图

接收数据时,自DR进入的数据最后到达McBSP#1内部16位寄存器DRR1,DDR1在VC5402的数据存储区映像地址是0x0041,同时发生三个动作:

①第1号串行口控制寄存器SPCR1的第1bit接收就绪位RRDY(ReceiveReady)显1;②RINT线向C5402的CPU发出中断;③REVT线向VC5402的DMA控制器发出事件激励信号。

一旦VC5402的CPU或者DMA控制器把DRR1的16位数据读出,1号串行口控制寄存器SPCR1的第1bit接收设备就绪位(ReceiverReady)显0。

这样VC5402的CPU或者DMA控制器就逐个读出DRR1的16位数据并且转存到数据缓存区中。

实验六的数据缓存区首地址1000H,长度256个16位字。

数据缓存区填满后,便可进行数字信号处理。

发送数据时,一旦上一个数据自McBSP#1内部16位寄存器DXR1(DXR1在C5402的数据存储区映像地址是0x0043)复制到发送部件上去(最后从DX发送出去),相当于DXR1被清空,就同时发生三个动作:

①第2号串行口控制寄存器SPCR2的第1bit发送设备就绪位XRDY(TransmitterReady)显1;②XINT线向VC5402的CPU发出中断;③XEVT线向VC5402的DMA控制器发出事件激励信号。

一旦VC5402的CPU或者DMA控制器向DXR1写入16位数据,2号串行口控制寄存器SPCR2的第1bit发送设备就绪位XRDY(TransmittReady)显0。

这样VC5402的CPU或者DMA控制器就把数据缓冲区中经过数字信号处理的数据逐个写入到DXR1。

实验七的数据缓存区首地址3000H,长度40个16位字。

实验六和实验七的指导程序都是用CPU查询方式分别完成数据接收和数据发送。

现在要求用效率较高的中断方式完成数据接收与发送的方案。

相关中断系统参数如图2和图3所示。

图2

图3

如图2所示,VC5402的McBSP#1的接收数据中断位是第10bit,发送数据中断位是第11bit。

其中断向量表的偏移量如图3所示,分别是68H和6CH。

试写出把实验六指导程序的查询方式改为中断方式的所有程序代码。

14.阅读C5402中断系统、DMA和McBSP的文档。

实验六和实验七的指导程序都是用CPU查询方式分别完成数据接收和数据发送。

现在要求用效率最高的DMA方式完成数据接收与发送的方案。

(1)当DMA控制器与DSPCPU通过中断同步时,分别写出把实验六和实验七指导程序的查询收发数据方式改为DMA方式的所有程序代码。

(2)当DMA控制器与DSPCPU通过查询DMA块传输是否结束的标志同步时,分别写出把实验六和实验七指导程序的查询收发数据方式改为DMA方式的所有程序代码。

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2