在两个定点表示之间转换

时间:2017-11-09 00:15:53

标签: python c++ signal-processing fixed-point

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

输入数据采用Qmf格式。输入数据为8位宽,分数长度为6位。我想用4个小数位(无整数位)将其转换为4位数,我对此有一些疑问。

我注意到当我尝试将Q26 {范围[-2,1.984375]}格式的数字转换为1.984375到Q04 {范围[-0.5,0.4375]}格式时,硬件实现运行如下:  我读取位5-2,因为位6和7用于整数部分并将其存储在4位寄存器中。因此,当转换为Q04格式时,此值将被解释为-0.5。 -0.5是否正确?发生的错误数量似乎很大。难道我做错了什么 ?  如果上述方法是正确的。是否有任何标准程序可以在模拟上述硬件方法的软件中从一个定点表示转换为另一个定点表示。我正在考虑将数字从Q26表示转换为浮点并将其转换回固定点。在软件中有更简洁的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为你可以通过简单的位掩码操作和一些逻辑来进行转换。

如果您的Q26号码为正(即第7位为零),则相应的Q04号码将只是原始号码的第2位至第5位,前提是第6位为零。这意味着您的原始号码必须少于一个。

如果你的Q26号码是负数(即第7位是1),那么相应的Q04号码又是第2位到第5位或你的原始号码,但是这次只要第6位是1并且有至少在位2-5中的非零位。这意味着您的原始号码必须大于-1。

在每种情况下,您都会因忽略位0和0而得到舍入误差。 1,您可能希望通过在Q04数字的最低有效位中加或减一个来解释。这显然需要额外的算术运算,并且存在溢出Q04号码允许范围的风险。

如果你想在Python中试验这个,可以试试像spfpm这样的库。