第3讲 定点运算及浮点运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Q表示法16进制数2000H
Q0表示为8192
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
符 号 位
Q15表示为0.25
小数点的位置
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
小数点的位置
浮点数与定点数的转换关系
浮点数转换为定点数
xq int x 2Q
左移加一
00010100 - 00011000 11111100舍去
00100001 - 00011000 00001001 左移加一 00010011
余数 商
非线性运算的定点快速实现
调用DSP编译系统的库函数 查表法
在实时DSP应用中实现非线性运算,一般都采取 适当降低运算精度来提高程序的运算速度。查 表法是快速实现非线性运算最常用的方法。
验算:由于z的Q值为15,所以定点值z=-3276即
结果超过16位表示范围
设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
00000011
00001010 + 11101000 11110010
得数为负,舍去
定点除法
第二次运算
被除数左移一次
00010100 - 00011000 11111100 00010100 + 11101000 11111100
得数为负,舍去
定点除法
第三次运算 被除数左移一次
00101000 - 00011000 00010000 00101000 11101000 00010000
除法运算的C语言定点模拟
z = x/y zq 2Qz= xq 2 Q yq 2 zq
xq 2
( Qz Qx Q y )
Qx
y
yq
float x,y,z; z = x/y; int x,y,z; long temp; temp = (long)x; z = (temp<<(Qz-Qx+Qy))/y;
定点除法
设x = 18.4,y = 36.8,浮点运算值为z = x/y = 18.4/36.8 = 0.5;
Qx = 10,Qy = 9,Qz = 15;所以有
x = 18841, y = 18841;
temp = (long)18841; z = (18841L<<(15-10+9))/18841 = 308690944L/18841 = 16384; 因为商z的定标值为15,所以定点z = 16384即为浮 点 z = 16384/32768= 0.5
被加数 加数
0 1 X X X X X X X X X X X X X X
0 0 X X X X X X X X X X X X X X
可能溢出 被加数 加数
0 0 X X X X X X X X X X X X X X
0 1 X X X X X X X X X X X X X X
可能溢出
定点除法
乘法运算的C语言定点模拟
z = xy z q 2
Qz
= xq y q 2
(Qx Q y )
Qz (Qx Q y ) z q = ( x q y q )2
float x,y,z; z = xy; int x,y,z; long temp; temp = (long)x; z = (temp×y) >> (Qx+Qy-Qz);
三、DSP定点运算与浮点运算
数的定标 DSP程序的定点模拟 DSP芯片的定点运算 定点实现非线性函数的快速实现方法 浮点芯片中的数值表示格式 DSP浮点数的基本运算方法
一、定点运算及定点DSP
1、数据格式
2、运算方法
3、定点DSP芯片
1、数据格式
在定点DSP芯片中,采用定点数进行数值运算, 其操作数一般采用整型数来表示 DSP芯片的数以2的补码形式表示 数的定标:“小数点” 的位置 Q表示法和S表示法 对定点数而言,数值范围与精度是一对矛盾, 一个变量要想能够表示比较大的数值范围,必须 以牺牲精度为代价。
SACH
ANS,1
;(ANS)=2000H(0.25/Q15)
定点乘法(续)
• 整数乘整数 • Q0×Q0 = Q0 17×(-5)=-85 0000000000010001=17 ×1111111111111011=-5 11111111111111111111111110101011=-85
定点乘法(续)
定点加法
描述: 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)), 若Qx≤Qz
定点加法
例子: 设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=29491/8192=3.6
• 混合表示法 • 1.5×0.75 = 1.125 01.10000000000000 = 1.5 ;Q14 ×00.11000000000000 = 0.75 ;Q14 0001.0010000000000000000000000000 = 1.125;Q28
定点加法
保留32位结果——双字 调整小数点保留16位结果 加法运算必须用相同的Q点表示 通过移位操作 解决溢出问题 溢出检测 溢出保护 完全避免
在通用DSP芯片中,一般不提供单周期的除法 指令,为此必须采用除法子程序来实现 二进制除法是乘法的逆运算。乘法包括一系 列的移位和加法,而除法可分解为一系列的 减法和移位。
定点除法
第一次运算 例如:10÷3=3余1
00001010 00001010 - 00011000 11110010 除数的最低有效位 对齐被除数的最高 有效位
z=x+y
zq 2
Qz
xq 2
= xq 2
Qx
yq 2
yq 2
(Qx Q y )
Qy
Q x
(Qx Q y )
2 Q x
= [ xq y q 2
] 2 Qx
z q [ xq y q 2
(Qx Q y )
] 2(Qz Qx )
00100001
+
得数为正,左移加一
定点除法
第四次运算
00100001 - 00011000 00001001 00100001 + 11101000 00001001 00010011
得数为正 左移加一 余数
商
定点除法
00001010 - 00011000 11110010舍去 00101000 - 00011000 00010000
结果超过16位的定点加法
例子: 设x=15000,y=20000,则浮点运算结果为z =x+y=15000+20000=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;
提高查表法的精度 扩大自变量范围
混合法
提高查表法的精度
扩大查表法的范围
设:表的范围为0.5 ~ 1 ,X为大于0.5的数 则:X m 2e 式中, 0.5 m 1 ,e为整数 log 2 ( X ) log 2 (m 2e ) log 2 (m ) log 2 (2e ) log 2 (m ) e 例如: log 2 (10000) log 2 (0.61035 214 ) log 2 (0.61035) 14 13.2877
定点减法
设x=3.0,y=3.1,则浮点运算结果为z=x-y= 3.0-3.1=-0.1; Qx=13,Qy=13,Qz=15,则定点减法为: x=24576;y=25395; temp=25395; temp=x-temp=24576-25395=-819;
因为Qx<Qz,故 z=(int)(-819<<2)=3276。 为浮点值z=-3276/32768-0.1
定点DSP芯片
TMS320C62x
TI公司1997年开发的新型定点DSP芯片,用于无线基站, 无线PDA,Modem, GPS等。 速度快,指令周期为3.3ns,运算能力为2400MIPS 内部结构不同,同时集成有2个16bit乘法器和6个算术 运算单元,一个周期内可执行8条32bit指令 使用超长指令集,在一个周期内可并行执行几个指令 大容量片内存储器(片内有96K程序和512K数据存储器) 和52MB寻址空间
定点加法
被加数 加数
0 0 X X X X X X X X X X X X X X
0 0 X X X X X X X X X X X X X X
无溢出 被加数 加数
0 1 X X X X X X X X X X X X X X
0 1 X X X X X X X X X X X X X X
有溢出
定点加法
3、定点DSP芯片
从TMS32010、 经历了TMS320C1X、C2X、C5X、C54X、 C62X等几代产品
TMS320C54x 为实现低功耗、高性能而专门设计的定点 DSP芯片 为无线通讯用的高性能价格比的芯片。 运算速度快,指令周期为10ns 优化的CPU结构。1个40位的算术逻辑单元、2个40位的累加器、 2个40位的加法器、1个17×17乘法器和40位的桶型移位器,有4 条内部总线和2个地址产生器 低功耗,可在3.3V或2.7V电压下工作,三个低功耗方式 智能外设,除标准的串行口和时分复用串行口外,还含有自动 缓存串行口(2k buffer)和外部处理器并行口HPI
定点数转换为浮点数
x float xq 2Q
浮点数 x=0.5,定标 Q=15, 则定点数=0.5*32768=16384
Q表示 Q15
S表示 S0.15
十进制数表示范围 -1≤X≤0.9999695
Q14
. . . . . . Q1 Q0
S1.14
. . . . . . S14.1 S15.0
-2≤X≤1.9999390
. . . . . . -16384≤X≤16383.5 -32768≤X≤32767
加法/减法运算的C语言定点模拟
float x,y,z; z=x+y; 两个操作数的定标值一样 如果加法/减法的结果超出16位的表示范围, 则必须保留32位结果,以保证运算的精度
2、运算方法
通常的是全部以Q15格式表示的小数
或以Q0格式表示的整数来工作
定点乘法 定点加法 定点除法
ห้องสมุดไป่ตู้
定点乘法
• 小数乘小数 • Q15×Q15=Q30 0.5*0.5 = 0.25 0.100000000000000 ;Q15 ×0.100000000000000 ;Q15 00.010000000000000000000000000000=0.25 ;Q30 • LT OP1 ;OP1=4000H(0.5/Q15) MPY OP2 ;OP2=4000H(0.5/Q15) PAC
定点乘法
设x = 18.4,y = 36.8,则浮点运算值为z =18.4×36.8 = 677.12; Qx = 10,Qy = 9,Qz = 5,所以 x = 18841;y = 18841; temp = 18841L; z = (18841L*18841)>>(10+9-5) = 354983281L >>14 = 21666; 因为z的定标值为5,故定点 z = 21666即为 浮点的 z = 21666/32 = 677.08
程序变量的Q值确定
确定变量的Q值实际上就是确定变量的动态范围。 设变量的绝对值的最大值为| max |,取整数n, 使其满足
2
n1
max 2
n
如果某变量的值在-1至+1之间,即<1,因此n = 0,Q=15-n = 15 确定变量的绝对值的最大值 理论分析法 (三角函数、汉明窗、FIR卷积、 自相关线性预测编码等) 统计分析法 (依据足够多的采样值)