Процесс декодирования с конечной точностью арифметического кодирования?

Я немного читал об арифметическом кодировании, особенно о том, как работать с конечной точностью, поэтому, например, когда диапазон находится внутри интервала (0, 0,5) или (0,5, 1), можно просто вывести 0 или 1 соответственно, а затем удвоить диапазон. Что я не понимаю, если этот процесс будет принят, как можно декодировать полученный код?

1 ответ

Декодер запускает точную копию кодера (обязательно с задержкой относительно оригинала), включая его модель интервала кодирования.

Декодер также отслеживает известный выходной интервал кодера до точки, в которой он считал сжатый поток данных. Когда этот интервал соответствует одному из интервалов модели кодирования, он знает, что может декодировать соответствующий символ.


Обратите внимание, что при считывании сжатого потока данных выходной интервал может быть быстро уменьшен до размера 1 (наименьший шаг, который может представлять кодер с конечной точностью). Поскольку интервалы кодирования все дискретизированы, этот выходной интервал блока гарантированно помещается в некоторый интервал кодирования, поэтому декодер никогда не может отставать слишком далеко от кодера. Однако конец сжатого потока может потребовать "сброса" состояния декодирования - либо с помощью некоторого вспомогательного сигнала (например, длины файла), либо с помощью кодера, отправляющего достаточно дополнительных битов, чтобы гарантировать, что декодер найдет свой символ завершения.

Другие вопросы по тегам