Re: Вопрос начинающего по арифметическому кодированию


Сайт о сжатии >> Форум #Компрессор# >> [Ответить] [Ответы]

Автор: Vadim,
15 мая 2003 года в 12:57:52

В ответ на : Вопрос начинающего по арифметическому кодированию от alex в 15 мая 2003 года в 02:32:31:


Честно говоря, не все понял в рассуждениях, но попытаюсь разобраться.

> Ситуация.
> hi = 28671- 0110111111111111
> low=24576 - 0110000000000000
> hi и low близки друг к другу. Расширяем интервал.
> Удаляем цифры во вторых по значимости разрядах (т.е. 1 во втором разряде hi и 1 во

Сразу вопрос. Как я понял из рассуждений, в данной реализации арифметика предполагается 15 бит для хранения интервала? Предположим, что 15.

> втором разряде low).
> Увеличиваем специальный счетчик на 1. Справа дописываем 1 в hi и
> ноль в low. Так продолжаем до тех пор, пока во втором разряде не появятся одинаковые

Продолжать особо долго не получится, т.к. если во втором разряде появятся разные цифры, то уж их выкидывать никак нельзя :) Т.е., делаем ровно один такой шаг.

> цифры в low и hi. Эту цифру затем посылаем в код сообщения, а за ней
> равное счетчику колл. 0 или 1, (инвертированные совпавшей).
> Вопрос. Когда появятся одинаковые цифры после 3 растяжений (когда сдвинем и удалим
> 2, 3 и 4 разряд)?

Точно. В данном случае растяжение будет за счет разрядов 2,3 и 4. Иногда достаточно сократить только 2 и 3 разряды. Иногда только разряд 2. Если я правильно понял, вопрос был в том, сколько разрядов из трех максимально допустимых надо сокращать? Ответ см. ниже.

> А если встретится ситуация когда необходимо большее колл. растяжений? Тогда после
> третьего этапа удаления и сдвига останутся одни нули и единицы. Как же они совпадут?

Совпадать они могут начать после кодирования очередного символа, имеющего не единичную вероятность. Т.е. когда интервал уменьшится и, соответственно, уменьшится разница между hi и lo.

> Или есть другой критерий когда останавливать этот процесс кроме расчета на
> совпадение?

Можно этот процесс остановить раньше. Но никак не позже. Если, конечно, мы заинтересованы в декодировании :)

> Ведь как я понимаю пока интервал не растянут, нельзя переходить
> к кодированию очередного символа?

Можно. Если он растянут достаточно. Достаточность определяется тем, можем ли гарантировать приемлимую точность кодирования очередного символа.
Приемлимость, в свою очередь, определяется примерным знанием диапазона значений вероятностей, которые могут принимать символы алфавита. Т.е. если возможны очень маленькие вероятности, то растягивать надо побольше. Чтобы при кодировании интервал не свернулся в точку, в которой "определить, где свиная печенка, а где печенка господина майора не представляется возможным" :) Т.е. чтобы сокращенный интервал мог позволить при декодировании разобрать, где в нем какие символы располагаются.
Теперь небольшой пример для упрощения восприятия. Предположим, что мы нашли такое минимальное значение разницы между hi и lo, при которой декодирование в принципе возможно. Т.е. если минимальная вероятность символов 1/4, а возможных символов всего два, то нам достаточно всего 3 бит для интервала. И мы можем его не рестягивать до тех пор, пока 14-ые разряды в hi и lo разные.
С другой стороны, приемлимость еще подразумевает и степень сжатия. А три разряда интервала ну никак не будут точно отображать соотношение вероятностей кодируемых символов. Понятно дело, чем больше интервал, тем лучше он позволяет учитывать вероятности символов и, соответственно, сильнее сжимать.
Резюмируя, в каждом отдельном случае надо выбирать способ растягивания интервала (т.н. нормализацию) в соответствии с используемым моделированием. Т.е. подбирать его таким образом, чтобы обеспечивалась приличная степень сжатия и достаточная скорость.

Вот, вроде бы ответил...

Ответы:



Ответить на это сообщение

Тема:

Имя (желательно полное):

E-Mail:

URL:

Город:

Страна:

Вежливый и подробный комментарий:
(Форматируйте его, пожалуйста, как почту - короткими строками
Еnter в конце строки, пустая строка между параграфами).

Пожалуйста, заполните все поля.
И не нажимайте по два раза на кнопку! Дождитесь ответа сервера.