我认为@zellus 是对的。这是对 2 的恭维的一种变体。它使用 14 位的“字节”大小,然后在转换为整数(称为索引)后乘以 2/8192 的比例因子。这会将索引值 8192 映射到 2g。像@Amro 一样,这种方法有小的舍入误差,但我希望它能更好地向您展示正在发生的事情(它可能在计算上也更快,我无法测试它,因为我没有 MATLAB 许可证)
步骤是
- 如果传入号码有标记 1,则该号码为负数。否则,它是积极的。无论如何放弃哨兵号码。
- 将二进制数转换为整数
- 如果整数为负数,则减 1
- 将整数乘以比例因子 2/8192。
将此应用于您的数据会产生
INCOMING PROCESS SENTINEL RAW INDEX SCALED
01 1111 1111 1111 --> +1 1111 1111 1111 --> +8191 --> 8191 --> 1.99976g
01 1111 1111 1110 --> +1 1111 1111 1110 --> +8190 --> 8190 --> 1.99951g
...
00 0000 0000 0001 --> +0 0000 0000 0001 --> +1 --> 1 --> 0.00024g
00 0000 0000 0000 --> +0 0000 0000 0000 --> +0 --> 0 --> 0.00000g
11 1111 1111 1111 --> -0 0000 0000 0000 --> -0 --> -1 --> -0.00024g
...
10 0000 0000 0001 --> -1 1111 1111 1110 --> -8190 --> -8191 --> -1.99976g
10 0000 0000 0000 --> -1 1111 1111 1111 --> -8191 --> -8192 --> -2.00000g
仅从外观上看,自然比例因子似乎是 0.00025。01 1111 1111 1111 是否有可能应该是 2.04775g?
我假设您正在尝试与 2G 到 -2G 规模的加速器(或其他设备)交互。如果文档说 2G 到 -2G,他们可能已经将 2.04775G 到 -2.05G 的真正全范围四舍五入。
如果您不熟悉它,请查找两个赞美。这是很酷的东西。二进制数实际上将自己添加到其中。
编辑:我在第一步中遗漏了一个很大的地方。如果第一位是一个,您还需要不是每个位。