没有合适的资源?快使用搜索试试~ 我知道了~
首页DSP程序中Q值运算.pdf
DSP程序中Q值运算.pdf
需积分: 43 30 下载量 122 浏览量
更新于2023-04-28
3
收藏 293KB PDF 举报
写DSP程序的时候遇到的Q12、Q15、Q30、等看不懂,就仔细研究了一下,整理了这个资料,帮助自己理解浮点运算和定点运算
资源详情
资源推荐
·
37
·
第3章 DSP芯片的定点运算
3.1
数
的
定
标
在定点
DSP
芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一
个整型数的最大表示范围取决于
DSP
芯片所给定的字长,一般为
16
位或
24
位。显然,字长
越长,所能表示的数的范围越大,精度也越高。如无特别说明,本书均以
16
位字长为例。
DSP
芯片的数以
2
的补码形式表示。每个
16
位数用一个符号位来表示数的正负,
0
表示
数值为正,
1
则表示数值为负。其余
15
位表示数值的大小。因此
二进制数
0010000000000011b
=
8195
二进制数
1111111111111100b
=-
4
对
DSP
芯片而言,参与数值运算的数就是
16
位的整型数。但在许多情况下,数学运算
过程中的数不一定都是整数。那么,
DSP
芯片是如何处理小数的呢?应该说,
DSP
芯片本
身无能为力。那么是不是说
DSP
芯片就不能处理各种小数呢?当然不是。这其中的关键就
是由程序员来确定一个数的小数点处于
16
位中的哪一位。这就是数的定标。
通过设定小数点在
16
位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标有
Q
表示法和
S
表示法两种。表
3.1
列出了一个
16
位数的
16
种
Q
表示、
S
表示及它们
所能表示的十进制数值范围。
从表
3.1
可以看出,同样一个
16
位数,若小数点设定的位置不同,它所表示的数也就不
同。例如:
16
进制数
2000H
=
8192
,用
Q0
表示
16
进制数
2000H
=
0.25
,用
Q15
表示
但对于
DSP
芯片来说,处理方法是完全相同的。
从表
3.1
还可以看出,不同的
Q
所表示的数不仅范围不同,而且精度也不相同。
Q
越
大,数值范围越小,但精度越高;相反,
Q
越小,数值范围越大,但精度就越低。例如,
Q0
的数值范围是-
32768
到
+32767
,其精度为
1
,而
Q15
的数值范围为-
1
到
0.9999695
,精度
为
1/32768 = 0.00003051
。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量
要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范
围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。
浮点数与定点数的转换关系可表示为:
浮点数
(x)
转换为定点数
(
x
q
)
:
Q
q
x 2x(int) =
定点数
(
q
x
)
转换为浮点数
(x)
:
Q
q
x
−
= 2)float(x
例如 ,浮点数
x=0.5
, 定标
Q
=
15
, 则定 点 数
q
x
=
16384327685.0 =
,式中
表示下取整。反之,一个用
Q
=
15
表示的定点数
16384
,其浮点数为
16384
×
2
-
15
=
16384/32768=0.5
。
·
38
·
表3.1 Q表示、S表示及数值范围
Q表示
S表示
十进制数表示范围
Q15
S0.15
-1≤X≤0.9999695
Q14
S1.14
-2≤X≤1.9999390
Q13
S2.13
-4≤X≤3.9998779
Q12
S3.12
-8≤X≤7.9997559
Q11
S4.11
-16≤X≤15.9995117
Q10
S5.10
-32≤X≤31.9990234
Q9
S6.9
-64≤X≤63.9980469
Q8
S7.8
-128≤X≤127.9960938
Q7
S8.7
-256≤X≤255.9921875
Q6
S9.6
-512≤X≤511.9804375
Q5
S10.5
-1024≤X≤1023.96875
Q4
S11.4
-2048≤X≤2047.9375
Q3
S12.3
-4096≤X≤4095.875
Q2
S13.2
-8192≤X≤8191.75
Q1
S14.1
-16384≤X≤16383.5
Q0
S15.0
-32768≤X≤32767
3.2
高级语言:从浮点到定点
在编写
DSP
模拟算法时,为了方便,一般都是采用高级语言
(
如
C
语言
)
来编写模拟程
序。程序中所用的变量一般既有整型数,又有浮点数。如例
3.1
程序中的变量
i
是整型数,
而
pi
是浮点数,
hamwindow
则是浮点数组。
例
3.1 256
点汉明窗计算
int i;
float pi=3.14159;
float hamwindow[256];
for(i=0;i<256;i++) hamwindow[i]=0.54
-
0.46*cos(2.0*pi*i/255);
如果要将上述程序用某种定点
DSP
芯片来实现,则需将上述程序改写为
DSP
芯片的汇
编语言程序。为了
DSP
程序调试的方便及模拟定点
DSP
实现时的算法性能,在编写
DSP
汇
编程序之前一般需将高级语言浮点算法改写为高级语言定点算法。下面讨论基本算术运算
的定点实现方法。
3.2.1 加法/减法运算的C语言定点模拟
设浮点加法运算的表达式为:
float x,y,z;
·
39
·
z=x+y;
将浮点加法
/
减法转化为定点加法
/
减法时最重要的一点就是必须保证两个操作数的定
标值一样。若两者不一样,则在做加法
/
减法运算前先进行小数点的调整。为保证运算精
度,需使
Q
值小的数调整为与另一个数的
Q
值一样大。此外,在做加法
/
减法运算时,必须
注意结果可能会超过
16
位表示。如果加法
/
减法的结果超出
16
位的表示范围,则必须保留
32
位结果,以保证运算的精度。
1
.结果不超过
16
位表示范围
设
x
的
Q
值为
Qx
,
y
的
Q
值为
Qy
,且
Qx>Qy
,加法
/
减法结果
z
的定标值为
Qz
,则
z
=
x+y
y
x
z
Q
q
Q
q
Q
q
yxz
−
−
−
+= 222
=
x
yx
x
Q
QQ
q
Q
q
yx
−
−
−
+ 222
)(
=
x
yx
Q
QQ
qq
yx
−
−
+ 2]2[
)(
)(
)(
2]2[
xz
yx
QQ
QQ
qqq
yxz
−
−
+=
所以定点加法可以描述为:
int x,y,z;
long temp; /*
临时变量
*/
temp
=
y<<(Qx
-
Qy);
temp
=
x
+
temp;
z
=
(int)(temp>>(Qx
-
Qz)),
若
Qx
≥
Qz
z
=
(int)(temp<<(Qz
-
Qx)),
若
QxQ
≤
z
例
3.2
定点加法
设
x
=
0.5
,
y
=
3.1
,则浮点运算结果为
z
=
x+y
=
0.5+3.1
=
3.6;
Qx
=
15
,
Qy
=
13
,
Qz
=
13
,则定点加法为:
x
=
16384
;
y
=
25395;
temp
=
25395<<2
=
101580;
temp
=
x+temp
=
16384+101580
=
117964;
z
=
(int)(117964L>>2)
=
29491;
因为
z
的
Q
值为
13
,所以定点值
z
=
29491
即为浮点值
z
=
29491/8192
=
3.6
。
例
3.3
定点减法
设
x
=
3.0
,
y
=
3.1
,则浮点运算结果为
z
=
x
-
y
=
3.0
-
3.1
=-
0.1;
Qx
=
13
,
Qy
=
13
,
Qz
=
15
,则定点减法为:
x
=
24576
;
y
=
25295
;
temp
=
25395;
temp
=
x
-
temp
=
24576
-
25395
=-
819;
因为
Qx<Qz
,故
z
=
(int)(
-
819<<2)
=-
3276
。由于
z
的
Q
值为
15
,所以定点值
z
=-
3276
即为
浮点值
z
=-
3276/32768
-
0.1
。
2
.结果超过
16
位表示范围
·
40
·
设
x
的
Q
值为
Qx
,
y
的
Q
值为
Qy
,且
Qx>Qy
,加法结果
z
的定标值为
Qz,
则定点加法为:
int x
,
y
;
long temp
,
z
;
temp
=
y<<(Qx
-
Qy)
;
temp
=
x
+
temp;
z
=
temp>>(Qx
-
Qz)
,若
Qx
≥
Qz
z
=
temp<<(Qz
-
Qx)
,若
Qx
≤
Qz
例
3.4
结果超过
16
位的定点加法
设
x
=
15000
,
y
=
20000
,则浮点运算值为
z
=
x
+
y
=
35000
,显然
z>32767
,因此
Qx
=
1
,
Qy
=
0
,
Qz
=
0
,则定点加法为:
x
=
30000
;
y
=
20000
;
temp
=
20000<<1
=
40000;
temp
=
temp+x
=
40000+30000
=
70000;
z
=
70000L>>1
=
35000;
因为
z
的
Q
值为
0
,所以定点值
z=35000
就是浮点值,这里
z
是一个长整型数。
当加法或加法的结果超过
16
位表示范围时,如果程序员事先能够了解到这种情况,并
且需要保证运算精度时,则必须保持
32
位结果。如果程序中是按照
16
位数进行运算的,则
超过
16
位实际上就是出现了溢出。如果不采取适当的措施,则数据溢出会导致运算精度的
严重恶化。一般的定点
DSP
芯片都设有溢出保护功能,当溢出保护功能有效时,一旦出现
溢出,则累加器
ACC
的结果为最大的饱和值
(
上溢为
7FFFH
,下溢为
8001H)
,从而达到防止
溢出引起精度严重恶化的目的。
3.2.2 乘法运算的C语言定点模拟
设浮点乘法运算的表达式为:
float x,y,z;
z = xy;
假设经过统计后
x
的定标值为
Qx
,
y
的定标值为
Qy
,乘积
z
的定标值为
Qz
,则
z = xy
z
Q
q
z
−
2
=
)(
2
yx
QQ
qq
yx
+−
q
z
=
)(
2)(
yxz
QQQ
qq
yx
+−
所以定点表示的乘法为:
int x,y,z;
long temp;
temp = (long)x;
z = (temp
×
y) >> (Qx+Qy
-
Qz);
例
3.5
定点乘法
设
x = 18.4
,
y = 36.8
,则浮点运算值为
z =18.4
×
36.8 = 677.12;
根据上节,得
Qx = 10
,
Qy = 9
,
Qz = 5
,所以
剩余15页未读,继续阅读
ZLI960117
- 粉丝: 9
- 资源: 74
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 保险服务门店新年工作计划PPT.pptx
- 车辆安全工作计划PPT.pptx
- ipqc工作总结PPT.pptx
- 车间员工上半年工作总结PPT.pptx
- 保险公司员工的工作总结PPT.pptx
- 报价工作总结PPT.pptx
- 冲压车间实习工作总结PPT.pptx
- ktv周工作总结PPT.pptx
- 保育院总务工作计划PPT.pptx
- xx年度现代教育技术工作总结PPT.pptx
- 出纳的年终总结PPT.pptx
- 贝贝班班级工作计划PPT.pptx
- 变电值班员技术个人工作总结PPT.pptx
- 大学生读书活动策划书PPT.pptx
- 财务出纳月工作总结PPT.pptx
- 大学生“三支一扶”服务期满工作总结(2)PPT.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功