БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
кафедра РЭС
реферат на тему:
«Основы экономного кодирования»
МИНСК, 2009
Сообщения, передаваемые с использованием РТС ПИ (речь, музыка, телевизионные изображения и т.д.) в большинстве своем предназначены для непосредственного восприятия органами чувств человека и обычно плохо приспособлены для их эффективной передачи по каналам связи. Поэтому они в процессе передачи, как правило, подвергаются кодированию.
Что такое кодирование и зачем оно используется?
Под кодированием в общем случае понимают преобразование алфавита сообщения A{ λi }, ( i = 1,2…K ) в алфавит некоторым образом выбранных кодовых символов Â{ xj }, ( j = 1,2…N ). Обычно (но не обязательно) размер алфавита кодовых символов dim Â{ xj } меньше или намного меньше размера алфавита источника dimA{ λi }.
Кодирование сообщений может преследовать различные цели. Например, это кодирование с целью засекречивания передаваемой информации. При этом элементарным сообщениям li из алфавита A{ λi } ставятся в соответствие последовательности, к примеру, цифр или букв из специальных кодовых таблиц, известных лишь отправителю и получателю информации.
Другим примером кодирования может служить преобразование дискретных сообщений li из одних систем счисления в другие (из десятичной в двоичную, восьмеричную и т. п., из непозиционной в позиционную, преобразование буквенного алфавита в цифровой и т. д.).
Кодирование в канале, или помехоустойчивое кодирование информации, может быть использовано для уменьшения количества ошибок, возникающих при передаче по каналу с помехами.
Наконец, кодирование сообщений может производиться с целью сокращения объема информации и повышения скорости ее передачи или сокращения полосы частот, требуемых для передачи. Такое кодирование называют экономным, безызбыточным, или эффективным кодированием, а также сжатием данных. В данном разделе будет идти речь именно о такого рода кодировании. Процедуре кодирования обычно предшествуют (и включаются в нее) дискретизация и квантование непрерывного сообщения λ(t), то есть его преобразование в последовательность элементарных дискретных сообщений { λiq }.
Прежде чем перейти к вопросу экономного кодирования, кратко поясним суть самой процедуры кодирования.
Любое дискретное сообщение li из алфавита источника A{ λi } объемом в K символов можно закодировать последовательностью соответствующим образом выбранных кодовых символов xj из алфавита Â{xj}.
Например, любое число (а li можно считать числом) можно записать в заданной позиционной системе счисления следующим образом:
li = M = xn-1×m n-1 + xn-2×m n-2 +… + x0×m 0, (1)
где m - основание системы счисления; x0 … xn-1 - коэффициенты при степенях m; x Ì 0, m - 1.
Пусть, к примеру, значение li = M = 59 , тогда его код по основанию m = 8, будет иметь вид
M = 59 = 7·81 + 3·80 =738 .
Код того же числа, но по основанию m = 4 будет выглядеть следующим образом:
M = 59 = 3×42 + 2×41+ 3×40 = 3234 .
Наконец, если основание кода m = 2, то
M = 59 = 1×25 + 1×24 + 1×23 + 0×22 + 1×21 + 1×20 = 1110112 .
Таким образом, числа 73, 323 и 111011 можно считать, соответственно, восьмеричным, четверичным и двоичным кодами числа M = 59.
В принципе основание кода может быть любым, однако наибольшее распространение получили двоичные коды, или коды с основанием 2, для которых размер алфавита кодовых символов Â{ xj } равен двум, xj Ì 0,1. Двоичные коды, то есть коды, содержащие только нули и единицы, очень просто формируются и передаются по каналам связи и, главное, являются внутренним языком цифровых ЭВМ, то есть без всяких преобразований могут обрабатываться цифровыми средствами. Поэтому, когда речь идет о кодировании и кодах, чаще всего имеют в виду именно двоичные коды. В дальнейшем будем рассматривать в основном двоичное кодирование.
Самым простым способом представления или задания кодов являются кодовые таблицы, ставящие в соответствие сообщениям li соответствующие им коды (табл. 1).
Буква li | Число li | Код с основанием 10 | Код с основанием 4 | Код с основанием 2 |
А | 0 | 0 | 00 | 000 |
Б | 1 | 1 | 01 | 001 |
В | 2 | 2 | 02 | 010 |
Г | 3 | 3 | 03 | 011 |
Д | 4 | 4 | 10 | 100 |
Е | 5 | 5 | 11 | 101 |
Ж | 6 | 6 | 12 | 110 |
З | 7 | 7 | 13 | 111 |
Таблица 1
Другим наглядным и удобным способом описания кодов является их представление в виде кодового дерева (рис..1).
Корень Узлы 0 1 Вершина 0 1 0 1 0 1 0 1 0 1 0 1 А Б В Г Д Е Ж З 1 2 3 4 5 6 7 8 Рис. 4. |
Рис. 1
Для того, чтобы построить кодовое дерево для данного кода, начиная с некоторой точки - корня кодового дерева - проводятся ветви - 0 или 1. На вершинах кодового дерева находятся буквы алфавита источника, причем каждой букве соответствуют своя вершина и свой путь от корня к вершине. К примеру, букве А соответствует код 000, букве В – 010, букве Е – 101 и т.д.
Код, полученный с использованием кодового дерева, изображенного на рис. 1, является равномерным трехразрядным кодом.
Равномерные коды очень широко используются в силу своей простоты и удобства процедур кодирования-декодирования: каждой букве – одинаковое число бит; принял заданное число бит – ищи в кодовой таблице соответствующую букву.
Наряду с равномерными кодами могут применяться и неравномерные коды, когда каждая буква из алфавита источника кодируется различным числом символов, к примеру, А - 10, Б – 110, В – 1110 и т.д.
Кодовое дерево для неравномерного кодирования может выглядеть, например, так, как показано на рис. 2.
Рис. 2
При использовании этого кода буква А будет кодироваться, как 1, Б - как 0, В – как 11 и т.д. Однако можно заметить, что, закодировав, к примеру, текст АББА = 1001 , мы не сможем его однозначно декодировать, поскольку такой же код дают фразы: ЖА = 1001, АЕА = 1001 и ГД = 1001. Такие коды, не обеспечивающие однозначного декодирования, называются приводимыми, или непрефиксными, кодами и не могут на практике применяться без специальных разделяющих символов. Примером применения такого типа кодов может служить азбука Морзе, в которой кроме точек и тире есть специальные символы разделения букв и слов. Но это уже не двоичный код.
Однако можно построить неравномерные неприводимые коды, допускающие однозначное декодирование. Для этого необходимо, чтобы всем буквам алфавита соответствовали лишь вершины кодового дерева, например, такого, как показано на рис. 3. Здесь ни одна кодовая комбинация не является началом другой, более длинной, поэтому неоднозначности декодирования не будет. Такие неравномерные коды называются префиксными.
Рис..3
Прием и декодирование неравномерных кодов - процедура гораздо более сложная, нежели для равномерных. При этом усложняется аппаратура декодирования и синхронизации, поскольку поступление элементов сообщения (букв) становится нерегулярным. Так, к примеру, приняв первый 0, декодер должен посмотреть в кодовую таблицу и выяснить, какой букве соответствует принятая последовательность. Поскольку такой буквы нет, он должен ждать прихода следующего символа. Если следующим символом будет 1, тогда декодирование первой буквы завершится – это будет Б, если же вторым принятым символом снова будет 0, придется ждать третьего символа и т.д.
Зачем же используются неравномерные коды, если они столь неудобны?
Рассмотрим пример кодирования сообщений li из алфавита объемом K = 8 с помощью произвольного n-разрядного двоичного кода.
Пусть источник сообщения выдает некоторый текст с алфавитом от А до З и одинаковой вероятностью букв Р(li ) = 1/8.
Кодирующее устройство кодирует эти буквы равномерным трехразрядным кодом (см. табл. 1).
Определим основные информационные характеристики источника с таким алфавитом:
- энтропия источника
, ;