对于16位定点DSP芯片来说,参与运算的数是16位整数。但实际情况下,数学运算过程的数不一定都是整数,例如电流值、放大倍数等。那么定点DSP芯片如何处理小数呢?通常由编程者确定一个数的小数点在16位中的哪一位,这就是数的定标。即16位二进制数小数点的位置不同,表示的数的大小与准确度就不同。
例如,同样一个十六进制数2000H,相应的二进制数为0010 0000 0000 0000B。如果认为其小数点在最后一位,称为Q0格式,即为纯整数,表示8192。如果认为其小数点在最高位后面,称为Q15格式,即为纯小数数,则表示0.010 0000 0000 0000B=0.25。
数的定标有Q格式表示法和S格式表示法。表1-2给出了16位二进制数的16种Q格式表示法、S格式表示法及其可以表示的数的范围。Q格式后面的数字表示小数的位数,如Q8格式表示有8位小数,Q15格式表示有15位小数。S格式后面的数字表示整数与小数各自的位数,如S7.8格式表示有7位整数,8位小数,当然在最高位还有1位符号位。
表1-2 Q格式表示、S格式表示及数值范围
从表1-2可以看出,不同的Q值所表示的数不仅范围不同,而且准确度也不同。Q值越大,数值范围越小,但准确度越高;反之,Q值越小,数值范围越大,但准确度越低。例如Q0的数值范围是-32768到+32767,准确度为1;Q15的数值范围是-1到0.99997,准确度为1/32768=0.00003。所以,对定点数而言,数值范围与准确度是一对矛盾,一个变量要能够表示比较大的数值范围,必须降低准确度。而想提高准确度,则数的表示范围就要相应减小。
浮点数(x)转换为定点数(xq)的公式为(www.daowen.com)
xq=(int)x×2Q
式中,Q表示定标值;(int)表示取整。
定点数(xq)转换为浮点数(x)的公式为
x=(float)x/2Q
式中,(float)表示取浮点数。
例如,浮点数x=0.5,定标值Q=15,则定点数xq=0.5×32768=16384。反之,一个用Q=15表示的定点数为16384,则其浮点数为x=16384/32768=0.5。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。