УДК 004.627 ЦИФРОВОЙ АВТОМАТ АДАПТИВНОГО ПОСТРОЕНИЯ КОДА ХАФФМАНА Ю.А Зубань, канд. техн. наук; В.В. Петров, студ. Сумский государственный университет Адаптивные алгоритмы кодирования весьма эффективны для сжатия данных. Адаптивный (динамический) метод Хаффмана позволяет достичь наиболее высокой степени сжатия и достаточно хорошей скорости обработки данных. Синтез автоматной модели адаптивного кодирования Хаффмана – основная цель данной статьи. Полученная модель автомата и результаты исследования могут использоваться для аппаратной реализации адаптивного алгоритма кодирования Хаффмана. Нынешний век называют информационным веком, так как информация играет все более и более важную роль в современной жизни. Ее объемы постоянно возрастают, и, таким образом, требуются все большие и большие накопители и все более быстрые каналы связи для передачи. Но повышение емкости хранилищ и скорости линий передачи либо невозможно технически, либо не оправдано экономически. Но поскольку просто уменьшать объем информации нежелательно, то приходится искать другие способы уменьшения. То есть требуется каким либо образом уменьшить объем информации, не изменяя ее. Такой процесс называется архивацией, компрессией или сжатием данных. Представление информации, которым люди привыкли пользоваться, почти всегда избыточно. Избыточность присутствует в текстах, так как в них обязательно есть повторяющиеся слова, фразы, а то и целые абзацы. Избыточность информации присуща звуковой речи, так как в ней обязательно есть частоты, не слышимые человеком, или не существенные для восприятия. Аналогично, избыточно представление информации в электронном виде, обязательно есть некоторые повторяющиеся символы, цепочки символов. Удалив избыточность, мы можем уменьшить потребности в информационных емкостях, необходимых для хранения информации, и при этом не уменьшив содержательную сторону информации, то есть сохранив возможность восстановления ее к исходному виду. Таким образом, удаляя избыточность информации, можно уменьшить ресурсы, необходимые для хранения и передачи данных. Любой способ, подход и алгоритм, реализующий сжатие данных, предназначен для снижения объема выходного потока данных при помощи ее обратимого или необратимого преобразования. Метод Хаффмана даёт достаточно высокую скорость и хорошее качество сжатия. Широко применяется как в программных (всевозможные компрессоры, архиваторы и программы резервного копирования файлов и дисков), так и в аппаратных (системы сжатия, ”прошитые” в модемы и факсы, сканеры) реализациях. Синтез универсального автомата для построения кода Хаффмана – актуальная задача, решение которой позволяет построить более адекватную модель источника информации и соответственно получить более оптимальный с точки зрения средней длины код без применения больших аппаратных затрат. Если распределение вероятностей символов алфавита входного потока известно, то можно построить модель оптимального кодирования. Однако ввиду существования огромного числа различных комбинаций потока символов задача значительно усложняется, так как распределение вероятностей заранее неизвестно. В таком случае используются два подхода. Первый – заключается в просмотре входного потока и построении кодирования на основании собранной статистики, при этом требуется два прохода по массиву данных: один – для просмотра и сбора статистической информации, второй – для кодирования. В таком случае в выходной поток записывается статистическая схема использованного кодирования. Это несколько ограничивает сферу применения таких алгоритмов, так как исключает возможность однопроходного кодирования “на лету”, применяемого в телекоммуникационных системах, где и объем данных подчас не известен, а их повторная передача или разбор может занять неоправданно много времени. Данный метод известен как статическое кодирование Хаффмана. Второй метод – метод адаптивного кодирования. Его общий принцип состоит в том, чтобы менять схему кодирования в зависимости от характера изменений входного потока. Такой подход имеет однопроходный алгоритм и не требует сохранения информации об использованном кодировании в явном виде. Адаптивное кодирование может дать большую степень сжатия, по сравнению со статическим, поскольку более полно учитываются изменения частот входного потока. Данный метод известен как динамическое кодирование Хаффмана. Поскольку статические модели (в которых распределение принимается неизменным) в большинстве случаев не дают максимального качества сжатия, гораздо больший интерес представляют так называемые адаптивные модели, учитывающие текущий контекст потока. Такие модели позволяют строить быстрые однопроходные алгоритмы сжатия, не требующие априорных знаний о входном потоке данных и строящие распределение “на лету”. В кодировании Хаффмана входным символам ставятся в соответствие двоичные кодовые комбинации переменной длины. Длина кода каждого символа обратно пропорциональна двоичному логарифму его вероятности. Это кодирование является префиксным, что позволяет легко его декодировать, так как при префиксном кодировании код любого символа не является префиксом кода никакого другого символа – алфавит уникален. Как правило, кодовые комбинации синтезируются программно. Для аппаратной реализации обычно используется табличный метод. Его суть в том, что кодирование входных символов осуществляется с помощью таблицы (размещенной в ROM, ПЛМ и др. носителях данных, имеющих адресный доступ и соответствующую разрядность), которая содержит в себе информацию о дереве или о нескольких деревьях, структура и количество которых выбираются в зависимости от характеристик источника информации. По сути, в данном случае таблица представляет собой преобразователь кода, который пришедшей кодовой комбинации ставит в соответствие одну из немногих комбинаций кода Хаффмана, согласно изменению одного или группы параметров источника [2]. Алгоритм построения кодового дерева Хаффмана: а) символы входного алфавита образуют список свободных узлов. Каждый лист имеет вес, который может быть равен либо вероятности, либо количеству вхождений символа в ожидаемое сообщение; б) выбираются два свободных узла дерева с наименьшими весами; в) создается узел с суммарным весом выбранных узлов; г) созданный узел добавляется в список свободных, а два исходных удаляются из этого списка; д) одной связи, выходящей из созданного узла, ставится в соответствие бит 1, другой – бит 0; е) далее пункты повторяются, начиная со второго, до тех пор, пока в списке свободных узлов не останется только один свободный узел. Он и будет считаться корнем дерева. Получение кодовых комбинаций Хаффмана осуществляется перемещением по дереву от листа к корню и записью по пути соответствующих бит узлов, которая в конечном счете и даст нам требуемую кодовую последовательность. Аппаратная реализация адаптивного кодирования достаточно сложна, поэтому на сегодняшний день в различных устройствах применяются статические методы кодирования с несколькими возможными вариантами распределений вероятностей символов кодируемого алфавита. В общем виде автомат построения кода Хаффмана можно представить входным алфавитом A {ai : i 1, 2,| A |} , распределение вероятностей которого P { pi : i 1, 2, ..., | A |} , выходным алфавитом Y {yi } {0, 1} , множеством внутренних состояний Q и функциями переходов и выходов — и . Обозначим мощность входного алфавита | A | n . Число состояний автомата |Q| равно сумме узлов и листьев кодового дерева — сумме начальных n состояний, соответствующих входным символам (листья кодового дерева Хаффмана) и созданным в результате построения дерева n - 1 узлам, т. е. Q {q1 , q 2 , ..., q n , q n1 , q n 2 , ..., q 2n1 } , | Q | n (n - 1) 2n - 1 . (1) В соответствии с (1) в ходе построения кода происходит n-1 сортировка, в результате каждой из которых i i определяются два узла с наименьшими значениями вероятностей Pmin 1 и Pmin 2 , где 1 i n 1 , i i Pmin 1 Pmin 2 . Совокупность минимальных значений вероятностей представляет собой множество (2). n 1 1 2 n1 Pmin ={ Pmin 1 , Pmin 1 , …, Pmin 1 } { Pmin 2 , Pmin 2 …, Pmin 2 }, 1 2 (2) | Pmin | = 2(n-1) = 2n – 2 , Сумма двух минимальных вероятностей дает третью – вероятность узла дерева Хаффмана: i Pmin 1 узел i . Число создаваемых узлов в соответствии с (1) равно (n-1).Таким образом, существует Pmin 2 Pi множество узлов дерева P (P узел узел узел ={ P1 узел , P2 узел узел , …, Pn1 }, | P | = (n-1), являющееся подмножеством Pmin Pmin ). Множество Y состоит из 0 и 1. В процессе формирования кода символа автоматом выполняется Z переходов, в результате чего формируется двоичная последовательность длины Z, которая и является кодом данного символа. Обозначим принадлежность символа входного алфавита a i к поддереву Pi как ai Pi . Поддерево Pi – дерево, построенное начиная с узла Pi , являющегося корнем. Значение yi-го бита зависит i i i i от Pmin 1 и Pmin 2 , например: если ai Pmin 1 , то бит yi равен 0, а если a i Pmin 2 , то yi=1. Формирование кодового дерева Хаффмана приведено в таблице 2. Таблица 2 – Таблица формирования кодового дерева Номер сортировки Вероятность минимальных узлов дерева 1 Pmin 1 1 3 y1=0 1 1 P1узел = Pmin 1 Pmin 2 1 Pmin 2 2 Pmin 1 2 Pmin 2 3 Pmin 1 3 Pmin 2 2 Значение выходного бита yj Вероятность создаваемого узла y1=1 y2=0 2 2 P2узел = Pmin 1 Pmin 2 y2=1 y3=0 3 3 P3узел = Pmin 1 Pmin 2 y3=1 … … … n-1 n 1 Pmin 1 n1 Pmin 2 … n 1 n 1 Pnузел 1 = Pmin 1 Pmin 2 =1 yz=0 yz=1 В соответствии с описанным выше алгоритмом получения кода построим таблицу переходов и выходов синтезируемого автомата (табл. 3). Таблица 3 – Таблица переходов и выходов автомата Состояние Q( t 1 ) y (t 1) 3 4 А( t ) Состояние Q( t ) 1 2 a1 q1P1 qiPi a2 q 2P2 qj j … … an q nPn Продолжение табл. 3 1 узел P узел q q … qi j P Pmin qj2 узел q sPS q sPn Pmin S 3 2 Pmin 1 q 2 Pmin 2 q P2узел q P2узел q … 2 2 Pmin 1 Pmin 2 n1 n1 P узел n1 n1 n1 q2n 1 q Pmin 1 Pmin 2 P узел n1 q2nn 11 q Pmin 1 Pmin 2 - q2nn 32 q Pmin 2 yS y2 y2 … Pnузел 1 Pnузел 2 q2n 2 q Pmin1 yj 4 2 2 Pmin 1 Pmin 2 … - yi … … 2 - i P1 Pmin Алгоритм работы автомата можно также представить в виде дерева автомата (рис. 1) yZ yZ P узел q 2nn11 yZ yZ Pnузел 2 Pnузел 3 q 2 n 2 q 2n 2 узел 2 qP y2 q y2 2 Pmin 1 q 2 Pmin 2 Pjузел узел i q iP узел S qj q SP yi ys yj q1P 1 q Pn q P2 n 2 Рисунок 1 – Дерево автомата Согласно алгоритму формирования кода Хаффмана значение выходного бита определяется тем, по какому пути будет выполнен проход по дереву, т. е. через какой узел из двух минимальных ( Pmin1 , Pmin 2 ), получившихся при каждой сортировке. Тогда функция выходов имеет вид (3) 0 ï ðè ai Pmin1 , j= 1 ï ðè ai Pmin2 . (3) С учетом алгоритма формирования дерева получение конкретной комбинации выходного кода следующее: приход входной кодовой комбинации аi приводит к изменению вероятности pi появления данного символа, в соответствии с табл. 2 формируется или модифицируется дерево. Для случая, когда построение кодовой комбинации Хаффмана для символа входного алфавита происходит в реальном времени непосредственно после поступления входного кода символа и при этом возникает необходимость перестраивать кодовое дерево, то для ускорения формирования выходной кодовой комбинации (во избежание второго прохода по дереву), генерация и выдача последней начинаются с j j момента, когда кодируемый символ формирует узел, т.е. pi = Pmin 1 , или pi = Pmin 2 , при этом происходит узел формирование j-го узла с вероятностью Pв ых. j . Вывод следующего бита происходит, если выполняется хотя узел узел f f бы одно из равенств Pвых. j = Pmin 1 , Pв ых. j = Pmin 2 . Таким образом, алгоритм выполняет построение кодовой комбинации Хаффмана для символа параллельно с формированием или модификацией дерева. Множество вероятностей узлов, необходимых для формирования выходной комбинации, имеет вид узел узел узел Pвых ={ Pв ых.1 , Pвых.2 , узел узел …, Pвых. j }, Pвых P узел . Из этого следует, что формирование выходного кода узел зависит от множества вероятностей { Pвых. pi }. Из сказанного ранее важно отметить то, что для адаптивного алгоритма свойственна постоянная модификация дерева. В связи с этим возникает задача определения граничного критерия необходимости модификации дерева. узел Рассмотрим множество, определяющее код Хаффмана для кодируемого символа: { Pвых. ( t ) pi ( t ) } – узел до модификации, { Pвых. ( t ) pi ( t ) } – после. В результате модификации вероятность i-го символа изменяется: pi ( t ) = pi ( t ) + pi , где pi – изменение вероятности поступившего символа (так как символ поступил, то его вероятность только повышается). Так как суммарная вероятность всегда равна 1, то вероятность остальных символов должна в сумме уменьшиться на pi . Это повлечет изменение вероятностей всех узлов и листьев. Условием, при котором происходит модификация дерева, является изменение длины кодовой óçåë комбинации Хаффмана для символа: Z ( t ) Z ( t 1 ) , а Z (t ) f ( Pâû õ (t ) pi (t )) . Из последнего равенства следует, что сигналом к модификации служит некоторое конкретное значение pi ( t ) , отличное от нуля, при котором Z i Z i . Работа по определению и реакции на некоторое значение pi ( t ) может происходить на каждой из стадий построения кода Хаффмана, от поступления последней до выдачи самого кода, что непосредственно зависит от принципов, положенных в работу цифрового автомата. Так, например, можно реагировать на изменение: а) числа поступивших одинаковых кодовых комбинаций, где изменение дерева будет при достижении конкретного числа; б) порядка расположения узлов на уровне (уровень определяется узлами, при переходе на которые формируется один и тот же по счету бит кодовой комбинации Хаффмана); в) длины кодовой комбинации Хаффмана для символа или средней длины кода для данного дерева; г) энтропии входного алфавита. Рассмотренные в статье вопросы построения автоматной модели адаптивного построения кода Хаффмана дают широкие возможности синтеза данного автомата, в том числе и в виде специализированного устройства или на основе ПЛИС. Особенно для устройств кодирования, работающих в условиях часто изменяющихся параметров источника информации. Полученные результаты могут быть наиболее востребованы для адаптивных систем, также рассмотренных в данной работе. SUMMARY The adaptive encoding algorithms are essentially effective for data compression. The adaptive (dynamic) Huffman method allows to achieve the most high compression rate and sufficiently good processing speed. The synthesis of automaton model of adaptive Huffman encoding is the main goal of this article. Received automaton model and research results can be used for hardware implementation of the adaptive Huffman encoding algorithm. СПИСОК ЛИТЕРАТУРЫ 1 2 Жураковський Ю.П., Полторак В.П. Теорія інформації та кодування: Підручник. – К.: Вища шк., 2001. – 255 с.:іл.. Ватолин Д., Ратушняк и др. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. – М.: ДИАЛОГМИФИ, 2002. – 348 с Поступила в редакцию 21 декабря 2005 г.