DSP数的表⽰:定点⼩数Q格式表⽰和加法
DSP数的表⽰:定点⼩数Q 格式表⽰和加法
定点表⽰是的我们可以在低开销的整数硬件上使⽤⼩数运算。本⽂⾸先介绍⼩数表⽰⽅法Q格式,然后给⼀些定点加法的例⼦。
在低开销DSP上表⽰⼩数
为了降低开销,很多数字信号处理器都设计成只能进⾏整数算术运算。为了在这些处理器上表⽰⼩数,我们可以使⽤隐含⼩数点。
例如,8bit字,单被当做整数时表⽰。然⽽,我们可以假设存在⼀个隐含的⼩数点,并把该数理解为⼀个⼩数。假设⼩数点在第4和第5个bit之间,例如,。我们可以通过以下公式得到该数等价的⼗进制的值:
在这个例⼦中,我们⽤4bit表⽰整数部分,4bit表⽰⼩数部分。
从这个例⼦我们可以看到,⼩数点右边第⼀个bit的系数为0.5,第⼆个为0.25,以此类推。需要注意这个隐含的⼩数点并没有在硬件上表达,程序猿需要假设⼀个合适的缩放因⼦来正确的解释计算结果。在上⾯的例⼦中,硬件上只存储8bit数。如果程序员想要⽤a表⽰
5.375,就需要记住使⽤a进⾏的任何运算结果,都需要乘以⼀个缩放因⼦。
Q格式
⼩数点位置不同,同⼀个⼆进制数可以表⽰不同的值。为了编程⽅便,我们通常在同⼀算法中使⽤固定的⼩数点位置。Q格式是⽤来表达⼀个⼆进制数中整数、⼩数分别有多少bit的⼀种表⽰格式。例如,我们⽤3bit表述整数部分,4bit表⽰⼩数部分,则这个数的格式为Q3.4格式。
对于⼀个字长固定的处理器,另⼀种可⾏的表⽰格式是只表⽰⼩数部分。例如,当我们使⽤⼀个字长为16bit的处理器的时候,我们可以简单是说我们是使⽤Q15格式来表⽰⼩数。这⾥的Q15表⽰⼩数点右边有15bit,左边有1bit。同时Q15也等效于Q1.15。
⼩数点位置选择
⼩数点位置的选取需要考虑两个⽅⾯:
算法中需要表⽰的最⼤值
可允许最⼤的量化噪声
第⼀个⽅⾯决定了整数部分需要的bit数,第⼆个⽅⾯决定了⼩数部分的bit数。
需要注意的是,除了隐含的缩放因⼦,Q格式的⼩数与计算机上整数的表⽰没有任何区别。我们也可以使⽤Q格式来表⽰⼆进制补码。
Q格式举例
例⼀
假设算法需要⽤到浮点数。现在该值在浮点表⽰时算法表现良好。假设我们要⽤16bit字长的定点硬件来实现该算法,最合适的表⽰a的Q格式是什么?
因为a的整数部分在8和16之间,因此我们⾄少需要4bit来表⽰整数部分。假设我们使⽤有符号数,那么符号位需要占⽤以为,即⼩数点左边有5bit。因此我们使⽤Q5.11格式。
改格式表⽰的数的缩放因⼦为。也就是说Q5.11形式表⽰的a对应的去掉⼩数点后的值等于Q5.11表⽰的数乘以。因此,为了将a表⽰为
Q5.11格式,我们先将a乘以,对其四舍五⼊到最接近的整数,然后在将四舍五⼊结果转换为⼆进制:
因为a是正数,因此符号位为0,a的Q5.11格式表⽰为01001.00110111100。对于负数,我们需要⾸先到其绝对值的Q格式表⽰,然后转换为⼆进制补码,再加上符号位。
例⼆
假设为Q2.2格式的有符号数,其对应的⼗进制整数是什么?
因为是有符号数,所以⼗进制数为-1乘以a的⼆进制补码对应的⼗进制数。a的⼆进制补码为。因此。
符号扩展
在做有符号数加法的时候,加数与被加数长度可能不同,这是,我们需要将较短的数进⾏符号位扩展。
例如,将扩展两位,得到。对于正数来说,符号位为0,符号扩展即填零,这不会改变数的⼤⼩。
对于负数来说,在补码表⽰中,⼀个负数是依据⼀个互补的常数定义的。kbit的数,这个互补常数为。
对于⼀个4bit的数,互补常数为,这时,⼀个4bit正数b对应的负数-b可以表⽰为M-b。下⾯解释如何⽤6bit表⽰这个4bit有符号数。
对于6bit数,互补常数为,-b可以表⽰为。因此,-b的6bit表⽰和4bit表⽰的差为:
。这就表⽰,为了⽤6bit表⽰⼀个4bit有符号负数,我们只需要在4bit表⽰上加上,也就是将符号位扩
展两位。通过符号位扩展,我们只改变了负数的互补常量,负数本⾝并没有变。
Q格式加法
对Q格式两个数相加时,⾸先需要完成⼩数点对其和符号位扩展。
例三
计算a+b,其中a=-1.25(补码表⽰为),b=+3.25(补码表⽰为)。
a和b分别为Q2.2和Q3.3格式。⾸先需要进⾏⼩数点对其,然后将整数部分较短的数进⾏符号位扩展,最后再进⾏运算:
除了隐含的缩放因⼦,以上加法和整数补码加法⼀样。因为补码运算是模M运算。因此我们需要将符号位左边的数都忽略掉。因此。这⾥需要注意在运算前进⾏符号位扩展。
在使⽤定点数运算的时候,我们需要格外⼩⼼相应Q格式表⽰数的范围,防⽌溢出。
例如,假设a使⽤Qna.ma格式,b使⽤Qnb.mb格式。如果使⽤与上⾯类似的过程计算,设符号扩展后的结果为格式,则
nc=maximum{na,nb},mc=maximum{ma,mb}。这个时候结果是有可能溢出的。因为Nbit数相加可能会得到(N+1)bit的结果。如果使⽤格式表⽰结果,就需要程序员⾃⼰能够确定结果不会溢出。
解决溢出问题的⽅法有两种:
将两个输⼊缩放
使⽤Q(n+1).m格式的输出可以保证两个Qn.m格式的数相加不会溢出,这时候需要将两个输⼊在计算的时候也需要同时符号扩展⼀位。
使⽤保护位(guard bit)防⽌溢出
很多数字信号处理器的累加器的输出寄存器通常⽐输⼊数据宽⼏位。这些多出来的数据位叫做保护位(guard bit)。这些保护位可以保证程序员在做累加的时候不会溢出。n个保护位可以保证进⾏次累加不会溢出。
保护位也不是可以⽆限制添加的,因此累加器的累加次数的有限制的。因此在计算的时候,我们有时候需要对结果进⾏四舍五⼊和截断来得到⼀个较短的数。多次累加后,结果数值范围会变⼤,为了表⽰更⼤的值,需要使⽤更多的bit来表⽰整数部分,也就是说我们可能需要改变⼩数点位置。
总结
定点数可以⽤来表⽰⼩数。
支持小数点的进制转换器为了降低实现开销,很多数字信号处理器只⽀持整数运算。为了在这些处理器中使⽤⼩数,需要引⼊隐含⼩数点。
如果使⽤n bit来表⽰整数部分,m bit来表⽰⼩数部分,那么这种表⽰叫做Qn.m格式。
做两个有符号数加法的时候,两个数可能长度不同。这是需要将较短的数进⾏符号位扩展。
做两个Q格式数加法的时候,需要遵循如下步骤:对其⼩数点;对较短的整数部分的数进⾏符号位扩展;进⾏加法运算。
当使⽤定点数来做算法实现的时候,必须注意所使⽤的Q格式能够表⽰的数的范围。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论