- •В.Г. Шахов основы информационных технологий
- •Введение
- •Глава 1 Теоретические основы информационных технологий
- •1.1. Теория сигналов и спектральный анализ
- •1.2. Управление колебаниями
- •1.3. Теория информации
- •1.4. Дискретизация и квантование
- •Глава 2 Сжатие информации
- •2.1. Адаптивная дискретизация, разностная и дельта-модуляция.
- •2.2. Статистическое сжатие
- •2.3 Сжатие динамического диапазона.
- •2.4. Эффективное кодирование
- •2.5. Модификации кодов Хафмана
- •2.6. Алгоритмы Лемпеля – Зива
- •2.7. Сжатие графических изображений
- •2.8. Видеостандарт mpeg
- •Глава 3 Многоканальная передача и уплотнение линий связи
- •3.1. Сравнение и анализ основных методов разделения каналов
- •3.3. Адресное разделение каналов
- •3.4. Разделение каналов на основе псевдослучайных последовательностей
- •3.5. Комбинированное разделение каналов
- •Глава 4 Случайные процессы и их приложения
- •4.1. Основы теории случайных событий и величин
- •4.2 Основы теории случайных процессов
- •Глава 5 Основы цифровой обработки сигналов
- •5.1. Дискретные экспоненциальные функции (дэф)
- •5.2. Быстрое преобразование Фурье (бпф)
- •5.3. Применение теории чисел в цифровой обработке сигналов
- •5.5. Основы цифровой фильтрации
- •Глава 6 Борьба с помехами
- •6.1. Энергетические методы
- •6.2. Методы импульсной модуляции гармонической несущей
- •6.2. Простейшие методы приема импульсных сигналов
- •6.3. Помехоустойчивый прием модулированных колебаний при импульсной огибающей
- •6.3.1 Некогерентный ам-прием
- •6.3.2 Когерентный чм-прием
- •.3.3 Когерентный фм-прием.
- •6.4.Корректирующие коды.
- •6.4.1. Основные определения корректирующих кодов.
- •6.4.2. Алгебраические коды
- •6.4.3. Матричная запись линейных корректирующих кодов
- •6.4.4. Коды Рида - Маллера I рода
- •6.4.5. Полиномиальные коды
- •6.4.6. Итеративные коды
- •6.5. Непрерывные коды
- •6.5.1. Рекуррентные коды
- •6.5.2 Сверточное кодирование
- •6.5.3. Каскадные коды
- •6.5.4. Нелинейные коды
- •6.6. Системы с обратными связями
- •6.7. Комплексные решения помехоустойчивого приема.
- •Глава 7 Пример расчета параметров информационной системы
- •7.1. Основные сведения о системах телеизмерения
- •7.2. Содержание курсовой работы и исходные данные
- •7.3. Определение полосы занимаемых частот и построение спектральной диаграммы
- •7.3.1 Определение периода опроса
- •7.3.2. Определение верхней частоты спектра импульсной последовательности
- •7.3.3. Варианты модуляции
- •7.3.4. Выбор несущих и построение спектральной диаграммы
- •7.4. Определение максимального уровня помех в канале связи
- •7.4.1. Помехоустойчивость передачи импульсно-модулированных сигналов
- •7.4.2. Помехоустойчивость передачи кодовых посылок
- •7.5. Определение количества информации одного сообщения и скорости передачи информации.
- •7.6. Вычисление эффективности передачи
- •Заключение по курсовой работе
- •Общее заключение по учебному пособию
- •Библиографический список
- •Содержание
- •Глава 7 278
2.4. Эффективное кодирование
Эффективные коды были предложены Шенноном, Фано и Хафманом [24]. Сущность кодов заключается в том, что они неравномерные, то есть с неодинаковым числом разрядов, причем длина кода обратно пропорциональна вероятности его появления. Еще одна замечательная особенность эффективных кодов – они не требуют разделителей, то есть специальных символов, разделяющих соседние кодовые комбинации. Это достигается при соблюдении простого правила: более короткие коды не являются началом более длинных. В этом случае сплошной поток двоичных разрядов однозначно декодируется, поскольку декодер обнаруживает вначале более короткие кодовые комбинации. Эффективные коды долгое время были чисто академическими, но в последнее время успешно используются при формировании баз данных, а также при сжатии информации в современных модемах и в программных архиваторах [39].
Ввиду неравномерности вводят среднюю длину кода. Средняя длина – математическое ожидание длины кода:
. |
(2.22) |
Здесь – длина -той кодовой комбинации; – ее вероятность; – число различных комбинаций. Особенностью эффективных кодов является то, что средняя длина кода приближается к энтропии источника:
, |
(2.23) |
причем, стремится к сверху (то есть ).
Выполнение условия (2.23) усиливается при увеличении .
Существует две разновидности эффективных кодов: Шеннона-Фано и Хафмана. Рассмотрим их получение на примере. Предположим, вероятности символов в последовательности имеют значения, приведенные в таблице 2.1.
Таблица 2.1
Вероятности символов
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
0,1 |
0,2 |
0,1 |
0,3 |
0,05 |
0,15 |
0,03 |
0,02 |
0,05 |
Символы ранжируются, то есть представляются в ряд по убыванию вероятностей. После этого по методу Шеннона-Фано периодически повторяется следующая процедура: вся группа событий делится на две подгруппы с одинаковыми (или примерно одинаковыми) суммарными вероятностями. Процедура продолжается до тех пор, пока в очередной подгруппе не останется один элемент, после чего этот элемент устраняется, а с оставшимися указанные действия продолжаются. Это происходит до тех пор, пока в последних двух подгруппах не останется по одному элементу. Продолжим рассмотрение нашего примера, которое сведено в таблице 2.2.
Таблица 2.2.
Кодирование по методу Шеннона-Фано
1 |
2 |
3 |
4 |
5 |
|
||
4 |
0,3 |
|
I |
|
|
|
11 |
2 |
0,2 |
I |
II |
|
|
|
10 |
6 |
0,15 |
|
I |
I |
|
|
011 |
3 |
0,1 |
|
|
II |
|
|
010 |
1 |
0,1 |
|
|
I |
I |
|
0011 |
9 |
0,05 |
II |
|
|
II |
|
0010 |
5 |
0,05 |
|
II |
|
I |
|
00001 |
7 |
0,03 |
|
|
II |
II |
I |
000001 |
8 |
0,02 |
|
|
|
|
II |
000000 |
Как видно из таблицы 2.2, первый символ с вероятностью участвовал в двух процедурах разбиения на группы и оба раза попадал в группу с номером I . В соответствии с этим он кодируется двухразрядным кодом II. Второй элемент на первом этапе разбиения принадлежал группе I, на втором – группе II. Поэтому его код 10. Коды остальных символов в дополнительных комментариях не нуждаются.
Обычно неравномерные коды изображают в виде кодовых деревьев. Кодовое дерево – это граф, указывающий разрешенные кодовые комбинации [24]. Предварительно задают направления ребер этого графа, как показано на рис.2.10 (выбор направлений произволен).
Рис. 2.10. Кодовое дерево для табл. 2.2
По графу ориентируются следующим образом: составляют маршрут для выделенного символа; количество разрядов для него равно количеству ребер в маршруте, а значение каждого разряда равно направлению соответствующего ребра. Маршрут составляется из исходной точки (на чертеже она помечена буквой А). Например, маршрут в вершину 5 состоит из пяти ребер, из которых все, кроме последнего, имеют направление 0; получаем код 00001.
Вычислим для этого примера энтропию и среднюю длину слова:
Как видно, средняя длина слова близка к энтропии.
Коды Хафмана строятся по иному алгоритму. Процедура кодирования состоит из двух этапов. На первом этапе последовательно проводят однократные сжатия алфавита. Однократное сжатие – замена двух последних символов (с низшими вероятностями) одним, с суммарной вероятностью. Сжатия проводят до тех пор, пока не останется два символа. При этом заполняют таблицу кодирования, в которой проставляют результирующие вероятности, а также изображают маршруты, по которым новые символы переходят на следующем этапе.
На втором этапе происходит собственно кодирование, которое начинается с последнего этапа: первому из двух символов присваивают код 1, второму – 0. После этого переходят на предыдущий этап. К символам, которые не участвовали в сжатии на этом этапе, приписывают коды с последующего этапа, а к двум последним символам дважды приписывают код символа, полученного после склеивания, и дописывают к коду верхнего символа 1, нижнего – 0. Если символ дальше в склеивании не участвует, его код остается неизменным. Процедура продолжается до конца (то есть до первого этапа).
Таблица 2.3.
Кодирование по алгоритму Хафмана
N |
|
код |
I |
II |
III |
IV |
V |
VI |
VII |
4 |
0.3 |
11 |
0.3 11 |
0.3 11 |
0.3 11 |
0.3 11 |
0.3 11 |
0.4 0 |
0.6 1 |
2 |
0.2 |
01 |
0.2 01 |
0.2 01 |
0.2 01 |
0.2 01 |
0.3 10 |
0.3 11 |
0.4 0 |
6 |
0.15 |
101 |
0.15 101 |
0.15 101 |
0.15 101 |
0.2 00 |
0.2 01 |
0.3 10 |
|
3 |
0.1 |
001 |
0.1 001 |
0.1 001 |
0.15 100 |
0.15 101 |
0.2 00 |
|
|
1 |
0.1 |
000 |
0.1 000 |
0.1 000 |
0.1 001 |
0.15 100 |
|
|
|
9 |
0.05 |
1000 |
0.05 1000 |
0.1 1001 |
0.1 000 |
|
|
|
|
5 |
0.05 |
10011 |
0.05 10011 |
0.05 1000 |
|
|
|
|
|
7 |
0.03 |
100101 |
0.05 10010 |
|
|
|
|
|
|
8 |
0.02 |
100100 |
|
|
|
|
|
|
|
В таблице 2.3 показано кодирование по алгоритму Хафмана. Как видно из таблицы, кодирование осуществлялось за семь этапов. Слева указаны вероятности символов, справа – промежуточные коды. Стрелками показаны перемещения вновь образованных символов. На каждом этапе два последних символа отличаются только младшим разрядом, что соответствует методике кодирования. Вычислим среднюю длину слова:
Недостатком кода Хафмана можно считать то, что нулевая кодовая комбинация не всегда соответствует наименее вероятному символу. Это может привести к потере этого символа при передаче нулей низкими уровнями.
Оба кода удовлетворяют требованию однозначности декодирования: как видно из таблиц, более короткие комбинации не являются началом более длинных кодов.
При увеличении количества символов эффективности кодов возрастают, поэтому в некоторых случаях кодируют более крупные блоки (например, если речь идет о текстах, можно кодировать некоторые наиболее часто встречающиеся слоги, слова и даже фразы).
Эффект от внедрения таких кодов определяется в сравнении их с равномерным кодом:
|
(2.24) |
где – количество разрядов равномерного кода, который заменяется эффективным.