1

在范围编码器中,使用有限精度算术可能会导致无法在不先应用某种刷新或调整以在工作寄存器中打开空间的情况下对下一个符号进行编码。

这样做的结果是,根据调整的方式,合法比特流的集合中可能会留下一些小间隙。

例如,维基百科页面建议将输出范围缩小到允许移出更多位的范围,而原始范围的某些部分未定义。

在解码器中,可能会到达同一点,然后发现输入比特流本身不符合编码器调整,而是继续向下进入应该被编码器丢弃的间隙。这种比特流没有正确的解码。

将此与诸如 Huffman 之类的东西进行对比,后者通常在没有任何模糊输入配置的情况下定义(除了在流的末尾可能有不完整的符号)。因此,可以将任意比特流解码为一条消息,然后将其重新编码为原始比特流。

我的问题是:是否可以制定某种调整来处理精度限制但不会产生不可解码或模棱两可的比特流的可能性?这样给定任意比特流,总是可以将其解码为一组符号,这些符号可以重新编码回原始比特流?

直觉上,这似乎是不可能的,我不应该对这个问题大发雷霆;但我看着霍夫曼并推断它具有我应该能够模拟的属性。

4

1 回答 1

0

在写这个问题的过程中,我相信我可能已经找到了解决方案;但我还不确定。我会把它留在这里,或者有人(可能是我自己)最终会告诉我为什么我错了,或者它是正确的并且可能对其他人有用......

当您到达输出的范围对于下一个符号来说太小时,这意味着该范围跨越了一个值,该值是 2 的大幂,这就是低边界和高边界结束的点最高位不同。

因此,请获取您的符号频率表并将其划分为与您范围内的 POT 边界大致相同的位置。然后根据符号是第一分区还是第二分区,设置 POT 的高边界或低边界;然后刷新新释放的位并对分区进行编码,就好像它是一个完整的符号并继续。

不过,也许有一种功能上等效的方法可以做到这一点,但不那么啰嗦。

于 2016-12-28T18:51:40.257 回答