DSP原理课练习题参考答案-应电

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《DSP原理与应用》练习题参考答案

32学时版本

用于应用电子方向

注意:红色字体文字为解题注解与说明,万万不

可作为答题内容

1.Q.15表示是16位数据中第15位为符号位,第14~0位为小数位。试写出下面问题的答案:

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

0.68*32768=570AH

-0.245*32768=-1F5CH=E0A4H

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

A200H/32768=-5E00H/32768=- 0.734375

5A00H/32768=0.703125

上面两小题使用教材P7两条公式,公式中Q为数据中的小数位数,digits<->data。取补码的正规方法是按位取反得到的反码加上1。16进制下快速算法是找出互补的数,即加上该互补数得10000H。例如求1F5CH补码,1F5CH+E0A4H=10000H。故E0A4H为所求。

⑶已知两个Q.15数相乘的乘积存放于累加器A中。FRCT=0时A为16进制0xFFEA000000,该乘积的十进制数是多少?FRCT=1时A为16进制0x007D000000,该乘积的十进制数又是多少?

FRCT=0时累加器A低30位为小数位

解法一,取乘积Q.15形式,乘积Q.15形式为D400H=-2C00H/32768=-11264/32768=- 0.34375

解法二,运用教材P7公式,EA000000/230=-16000000//230=-11/25=-0.34375

解法三,写出小数点后二进制位数值,乘积为-16000000H,小数点后的二进制为01011B,得2-2+2-4+2-5=-11/25=-0.34375

FRCT=1时累加器A低31位为小数位

解法一,取乘积Q.15形式,乘积Q.15形式为7D00H=32000/32768=0.9765625

解法二,运用教材P7公式,7D000000H/231=125/27= 0.9765625

解法三,写出小数点后二进制位数值,乘积7D000000H小数点后的二进制为1111101B,得2-1+2-2+2-3+2-4+2-5+2-7=125/27= 0.9765625

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

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

const double coef[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};

void fir(int *x, int *y)

{

int i, j;

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

{

double accumulator = 0.0;

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

{

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

}

y[i] = (int)accumulator;

}

}

以上表达式中,x, y分别是低通滤波输入、输出的16位整型数组变量。

现在要求把以上过程优化为在C54x平台上运行的精度最高、执行效率最高的16位定点运算形式。试写出在C54x DSP和CCS2.2环境下完成16位相乘和32位累加的定点运算的C程序。

第一步:把全部滤波器系数转化为Q.15定点数

第二步:把乘累加转化为整数乘法,Q.15乘以整数的小数点位置在第14位和第15位之间,累加结果为32位整数,其中最高两位为符号位,接着15位为整数,低15位为小数

第三步:舍去低15位小数,取一位符号位和15位整数位作为滤波输出结果

在下面有符号数乘法中小数点位置:

=

const int coef[15]={158, 264, -290, -1406, -951, 3187, 9287, 12272, 9287, 3187, -951, -1406, -290, 264 158};

void fir(int *x, int *y)

{

int i, j;

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

{

long accumulator = 0;

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

{

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

}

y[i] = (int)(accumulator>>15);

}

}

3. 解决图像编码中常见的8x8离散余弦变换在VC5402 DSP 上定点运算问题。 ⑴ 用C 语言写出定点运算实现8

cos

2214

cos 153π

π

⨯+⨯的程序,并且把最后结果存放到16位整型变

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

4

cos

π

的Q15定点数是23170 8

cos

π

的Q15定点数是30274

const int x[2]={153,221};

const int y[2]={23170,30274}; long a; int r;

a=x[0]*y[0]+x[1]*y[1]; r=(int)(a>>15);

或者C 程序也可写成: long a; int r;

a=153*23170+221*30274; r=(int)(a>>15);

在下面有符号数乘法中小数点位置:

=

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

cos

2214

cos 153π

π

⨯+⨯的代码,并且把最后结果转换为16

位整数存放到1102H 的地址中。 1000H 存放153,1001H 存放221 1002H 存放23170,1003H 存放30274

SSBX FRCT

STM #1000H,AR2 STM #1002H,AR3 STM #1102H,AR1 RPTZ A,#1

MAC *AR2+,*AR3+,A STH A, *AR1

在下面有符号数乘法中小数点位置:

=

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

cos

4

cos 118π

π

⨯⨯,VC5402 汇编指令代码

段如下: SSBX FRCT

相关文档
最新文档