※Q格式:小数点位于第 n 位元之右侧,称为Qn 格式。例如;
16 位元二进位无号数:0100 0010 1000 0001
à在Q0格式下其表示的是:2^14+2^9+2^7+2^0=17025(d)
à在Q8格式下其表示的是:2^6+2^1+2^-1+2^-8=66.50390~(d)
à在Q16格式下其表示的是:2^-2+2^-7+2^-9+2^-16=0.25978~(d)
进行加法或减法时,Q格式并不会影响运算法则,两个Q8 格式的小数相
加,所得到的数值仍是Q8格式。两个Q6格式相减,所得到的数值仍是Q6格
式。因此在定点数之加减运算并不因Q格式不同而有差异。不过可能会产生溢位(overflow),而且不同格式的数值不能直接相加减。
乘法时,Q格式便会影响运算结果。两个16 位元数做乘法,会得到32 位元数。此时只能取16位元。
àQ0 格式:取运算结果最低的16 位元,删除较高的16 位元。
àQ16 格式:取运算结果最高的16 位元,删除较低的16 位元。
、、-----------------------------------------------------------------------------------------------------------------------------------------
Q格式的运算
1> 定点加减法:须转换成相同的Q格式才能加减
2> 定点乘法:不同Q格式的数据相乘,相当于Q值相加
3> 定点除法:不同Q格式的数据相除,相当于Q值相减
4> 定点左移:左移相当于Q值增加
5> 定点右移:右移相当于Q减少
、、----------------------------------------------------------------------------------------------------------------------------------------------------
那么是不是说定点DSP芯片就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。这就是数的定标。通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q表示法和S表示法两种。表1.1列出了一个16位数的16种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
浮点数与定点数的转换关系可表示为:
浮点数(x)转换为定点数(xq):xq=(int)x* 2 Q
定点数(xq)转换为浮点数(x):x=(float)xq*2 -Q
例如,浮点数 x=0.5,定标 Q=15,则定点数 xq=L0.5*32768J=16384,式中 LJ 表示下取整。反之,
一个用 Q=15 表示的定点数 16384,其浮点数为 16384 *2^-15=16384/32768=0.5。浮点数转换为定点
数时,为了降低截尾误差,在取整前可以先加上 0.5。
浮点转为定标 是乘法 简称浮沉