打印
[STM32F1]

Q1.15格式数据和Q15格式一样吗

[复制链接]
6310|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请问,Q1.15格式数据是不是和Q15一样?都是-1~0.9999之间的数据吗?
沙发
玛尼玛尼哄| | 2017-5-9 11:02 | 只看该作者
有符号数的表示法,机器数(出现在电脑的二进位数值)有3个特点, 无符号或符号转换成数值来表示,没有 +10101这样的资料,而是以010101来表示,只表示单纯的整数或小数,小数点的位置预设在一定的位置而较少变动,它的长度受到电脑硬体的限制,而不能无限增长。Q格式,就是将一个小数放大若干倍后,用整数来表示小数。

使用特权

评论回复
板凳
玛尼玛尼哄| | 2017-5-9 11:03 | 只看该作者
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 位元。
3
处理有数号是采Q15格式来表示定点数,因为MSB被用来表示正负号。且在乘法运算不考虑溢位的问题。
举例:+0.5 × (-0.5) = -0.25
1.100 0000 0000 0000× 0.100 0000 0000 0000
s⊕s.11 0000 0000 0000 0000 0000 0000 0000
得到的结果MSB 为两数的MSB 做XOR 求得,并取上面画底线Q15 的部分
可得1.110 0000 0000 0000 (16bit)。为了使结果也是Q15 格式,由于最高两位元
仅是表示正负号,所以DSP会自行将结果的最高位元舍弃。
CPU是定点微处理器不能直接处理小数,C语言中的自动调用运行时的函数来处理浮点数(float型),C语言中抹平了定点处理器和浮点处理器的差别,用户的编程工作量最少,但是编译出来的代码很庞大。在嵌入式应用中很多情况下,float型几乎不能去想。
整数定标本质上并不复杂,简单地说,就是通过假定小数点位于哪一位。从而确定小数精度。
常用Q格式来表示数的定标。Q0是把小数点位定于第0位的右侧,Q15是定于第15位的右侧。
公式为:
浮点Xf->定点Xq:
定点Xq->浮点Xf:
浮点1.1变成Q13就为:(int)(1.1*2^13)=9011;
Q0范围:-32768<X<32767
Q15范围:-1<X<0.9999695
定点加减法一定要具有相同的Q格式才能进行。
定点乘除法是Q值相加减。
DSP处理器本身没有硬件除法器,除法通过减法和移位完成的。
定点左移右移相当于Q值加减;
Q15格式范围是个不超过1的小数,小数之间相互乘法还是小数,永远不会溢出。这是小数的一个优势。
如果一个数据既有整数也有小数。使用Q格式,直观的做法就是选定一个适当的Q格式。
再不就全部化为小数,再用Q15格式表示。

使用特权

评论回复
地板
玛尼玛尼哄| | 2017-5-9 11:04 | 只看该作者

因此确实是一样的。

使用特权

评论回复
5
ime就是爱自己|  楼主 | 2017-5-9 15:31 | 只看该作者
玛尼玛尼哄 发表于 2017-5-9 11:04
因此确实是一样的。

使用特权

评论回复
6
玛尼玛尼哄| | 2017-5-9 15:52 | 只看该作者

不谢。多多在论坛参与回帖啊,混积分,你的分太少了,高人都懒得回复你,只有我这菜鸟回复。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

16

帖子

0

粉丝