在两个不动点表达之间转换

Converting between two fixed point representations

本文关键字:之间 转换 两个      更新时间:2023-10-16

我正在尝试将一个数字从一个不动点表示转换为另一个。我使用2的补码表示(Qmf表示)这是为了验证硬件实现。硬件实现工作如下:

输入数据采用Qmf格式。输入数据为8比特宽,并且具有6比特的小数长度。我想把它转换成4位小数(没有整数位),我对此有一些疑问。

我注意到,当我试图将像1.984375这样的数字从Q26{range[-2,1.984375]}格式转换为Q04{range[-0.5,0.4375]}形式时,硬件实现如下所示:我读取位5-2,因为位6&7用于整数部分,并将其存储在4位寄存器中。因此,当转换为Q04格式时,该值被解释为-0.5。-0.5正确吗?产生的错误数量似乎很大。我做错什么了吗?如果上述方法是正确的。有没有任何标准的程序可以在软件中从一个定点表示转换为另一个,模仿我上面描述的硬件方法。我正在考虑将数字从Q26表示转换为浮点,然后将其转换回不动点。在软件中有更干净的方法吗?

我认为您可以通过简单的位屏蔽操作和一点逻辑来完成转换。

如果您的Q26数字为正(即第7位为零),则相应的Q04数字将仅为原始数字的第2位至第5位,前提是第6位为零。这意味着您的原始编号必须小于1。

如果您的Q26数字为负(即,位-7为1),则相应的Q04数字再次为位-2至位-5或您的原始数字,但这次假设位-6为1,并且位2-5中至少有一个非零位。这意味着您的原始数字必须大于-1。

在每种情况下,忽略位0&1,你可能想通过在你的Q04数字的最低有效位上加一或减一来解释。这显然需要额外的算术运算,并且有可能超出Q04数字的允许范围。

如果您想在Python中对此进行实验,可以尝试spfpm之类的库。