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

2024-04-27 12:05:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图把一个数从一个定点表示转换成另一个。我使用2的补码表示法(Qmf表示法) 这是为了验证硬件实现。硬件实现如下:

输入数据采用Qmf格式。输入数据宽8位,小数长度为6位。我想把它转换成4位数字,有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表示的数字转换成浮点,然后再转换回定点。在软件中有没有一种更干净的方法?在


Tags: 数据方法硬件软件格式range数字整数
1条回答
网友
1楼 · 发布于 2024-04-27 12:05:29

我想你可以通过简单的位掩蔽操作和一点逻辑来完成转换。在

如果你的Q26数字是正数(即比特-7为零),那么对应的Q04数字将仅为原始数字的比特-2到比特-5,前提是比特-6为零。这意味着您的原始号码必须小于1。在

如果你的Q26数字是负数(即比特-7是1),那么对应的Q04数字又是比特-2到比特-5或者你原来的数字,但是这次前提是比特-6是1并且比特2-5中至少有非零位。这意味着原始数字必须大于-1。在

在每种情况下,忽略位0&1都会产生舍入错误,您可能需要通过在Q04数字的最低有效位加上或减去1来解释这一点。这显然需要一个额外的算术运算,并且有可能超出Q04数字的允许范围。在

如果您想在Python中使用它,可以尝试使用一个库,比如spfpm。在

相关问题 更多 >