广东工业大学2014年DSP技术考试题目及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《DSP技术》练习题参考答案-2014年
1.Q15表示是16位数据中第15位为符号位,第14~0位为小数位。试写出下面问题的答案:
(1)分别写出十进制正数0.68和十进制负数-0.245的Q15表示。
0.68*32768=570AH
-0.245*32768=-1F5CH=E0A4H
(2)分别写出Q15表示的A200H和5A00H的十进制数值。
A200H/32768=-5E00H/32768=- 0.734375
5A00H/32768=0.703125
上面两小题使用教材P7两条公式。取补码的正规方法是按位取反得到的反码加上1。16进制下快速算法是找出互补的数,即加上该互补数得10000H。例如求1F5CH补码,1F5CH+E0A4H=10000H。故E0A4H 为所求。
(3)已知两个Q15数相乘的乘积存放于累加器A中。FRCT=0时A为16进制0xFFEA000000,该乘积的十进制数是多少?FRCT=1时A为16进制0x007D000000,该乘积的十进制数又是多少?
FRCT=0时A低30位为小数位
解法一,乘积Q15形式为D400H=-2C00H/32768=-11264/32768=- 0.34375
解法二,乘积为EA000000/230=-16000000//230=-11/25=-0.34375
解法三,乘积为-16000000H,小数点后的二进制为01011B,得2-2+2-4+2-5=-11/25=-0.34375
FRCT=1时A低31位为小数位
解法一,乘积Q15形式为7D00H=32000/32768=0.9765625
解法二,乘积为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语言开发环境CCS2.2中,数据类型与通常的C语言开发环境的数据类型不同,主要数据类型如教材P232表8-1所示。现在利用一个15阶Hamming低通滤波器对16位音频信号进行FIR滤波。在C54x DSP和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 程序。 第一步:把滤波器系数转化为Q15定点数
第二步:把乘累加转化为整数乘法,Q15乘以整数的小数点位置在第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 上定点运算问题。 (1) 用C 语言编写VC5402上用定点运算实现8
cos 2294cos
130π
π
⨯+⨯的程序,并且把最后结果存放到16位整型变量r 中。CCS2.2的数据类型如教材P232表8-1所示。
4
cos π的Q15定点数是23170 8
cos
π的Q15定点数是30274
const int x[2]={130,229};
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=130*23170+229*30274; r=(int)(a>>15); 小数点位置:
=
(2) 用C54x 汇编指令写出用定点运算实现8
cos
4
cos 107π
π
⨯⨯的代码。可以利用首地址1000H 的256
字长数据缓存区存放数据。
数据页1000H 的地址存放的数据是327684
cos ⨯π
=23170=7642H 数据页1001H 的地址存放的数据是327688
cos ⨯π
=30274=7642H
SSBX FRCT
MPY *(1000H),#107,A MPYA *(1001H) STH B,*(1002H) 小数点位置:
第一次乘法第二次乘法
(3) 用(2)的算法以及汇编指令能够求出8
cos
4
cos
107π
π
⨯⨯的结果为多少?
23170107⨯取1个符号位和高15位数字,得75。3027475⨯取1个符号位和高15位数字,得69
用计算器,分两步,第一步算4
cos
107π
⨯取整数得75;第二步算8
cos
75π⨯取整数得69。
用计算器一步算出69,得1分
这里用计算器一步结果与两步结果都是69,为巧合。实际出题会不相等而相差1。
4. 在VC5402汇编语言程序中需要对数据页内8个地址0A72H ,0A74H ,0A78H ,0A7BH ,0A7FH ,0A81H ,0A85H ,0A87H 的16位指针变量初始化为0,作为NULL 标识。要求以最少指令和最快速度实现这一过程。写出所需全部指令。 如全写成绝对寻址,得一半分
LD #0, A
STL A, *(0A72H) STL A, *(0A74H) STL A, *(0A78H) STL A, *(0A7BH) STL A, *(0A7FH) STL A, *(0A81H)