DSP原理课练习题参考答案-应电
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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