我正在尝试为教育目的实施QM编码.我的主要资源是"数据压缩手册"第5版第5.11章.这是我现在对编码器的粗略实现:
def _encode_bit(self, bit):
if bit == self._lps:
self._code_lps()
else:
self._code_mps()
def _code_mps(self):
self._a = self._a - self._q_e()
if self._a < 0x8000:
self._switch_intervals_if_needed()
self._renormalize()
self._p_table.next_mps()
def _code_lps(self):
self._c = self._c + self._a - self._q_e()
self._a = self._q_e()
self._switch_intervals_if_needed()
self._renormalize()
self._p_table.next_lps()
def _renormalize(self):
while self._a < 0x8000:
#C < 0,5 (0xFFFF / 3)
if self._c < 0x5555:
b = 0
d = 0
else:
b = 1
d = 0x5555
self._write_bit(b)
logger.debug("Written '%i' to output", b)
#C = 2 * (C …Run Code Online (Sandbox Code Playgroud)