основы передачи. Основы передачи дискретных сообщений
![]()
|
Эффективное кодирование – это процедуры направленные на устранение избыточности. Основная задача эффективного кодирования – обеспечить, в среднем, минимальное число двоичных элементов на передачу сообщения источника. В этом случае, при заданной скорости модуляции обеспечивается передача максимального числа сообщений, а значит максимальная скорости передачи информации. Пусть имеется источник дискретных сообщений, алфавит которого ![]() При кодировании сообщений данного источника двоичным, равномерным кодом, потребуется ![]() Если вероятности ![]() ![]() В данном случае каждое сообщение источника имеет информационную емкость ![]() ![]() Если при том же объеме алфавита сообщения не равновероятны, то, как известно, энтропия источника будет меньше ![]() Если и в этом случае использовать для перевозки сообщения ![]() Появляется избыточность, которая может быть определена по следующей формуле ![]() Среднее количество информации, приходящееся на один двоичный элемент комбинации при кодировании равномерным кодом ![]() Пример Для кодирования 32 букв русского алфавита, при условии равновероятности, нужна 5 разрядная кодовая комбинация. При учете ВСЕХ статистических связей реальная энтропия составляет около 1,5 бит на букву. Нетрудно показать, что избыточность в данном случае составит ![]() Если средняя загрузка единичного элемента так мала, встает вопрос, нельзя ли уменьшить среднее количество элементов необходимых для переноса одного сообщения и как наиболее эффективно это сделать? Для решения этой задачи используются неравномерные коды. При этом, для передачи сообщения, содержащего большее количество информации, выбирают более длинную кодовую комбинацию, а для передачи сообщения с малым объемом информации используют короткие кодовые комбинации. Учитывая, что объем информации, содержащейся в сообщении, определяется вероятностью появления ![]() Для сообщения, имеющего высокую вероятность появления, выбирается более короткая комбинация и наоборот, редко встречающееся сообщение кодируется длинной комбинацией. Т.о. на одно сообщение будет затрачено в среднем меньшее единичных элементов ![]() Если скорость телеграфирования постоянна, то на передачу одного сообщения будет затрачено в среднем меньше времени ![]() А значит, при той же скорости телеграфирования будет передаваться большее число сообщений в единицу времени, чем при равномерном кодировании, т.е. обеспечивается большая скорость передачи информации. Каково же в среднем минимальное количество единичных элементов требуется для передачи сообщений данного источника? Ответ на этот вопрос дал Шеннон. Шеннон показал, что 1. Нельзя закодировать сообщение двоичным кодом так, что бы средняя длина кодового слова ![]() ![]() ![]() ![]() 2. Существует способ кодирования, при котором средняя длина кодового слова немногим отличается от энтропии источника ![]() Остается выбрать подходящий способ кодирования. Эффективность применения оптимальных неравномерных кодов может быть оценена: Коэффициентом статистического сжатия, который характеризует уменьшение числа двоичных элементов на сообщение, при применении методов эффективного кодирования в сравнении с равномерным ![]() ![]() ![]() ![]() ![]() Коэффициент относительной эффективности ![]() В неравномерных кодах возникает проблема разделения кодовых комбинаций. Решение данной проблемы обеспечивается применением префиксных кодов. Префиксным называют код, для которого никакое более короткое слово не является началом другого более длинного слова кода. Префиксные коды всегда однозначно декодируемы. Веедем понятие кодового дерева для множества кодовых слов. Наглядное графическое изображение множества кодовых слов можно получить, установив соответствие между сообщениями и концевыми узлами двоичного дерева. Пример двоичного кодового дерева изображен на рисунке. 1. ![]() Рисунок 1. Пример двоичного кодового дерева Две ветви, идущие от корня дерева к узлам первого порядка, соответствуют выбору между “0” и “1” в качестве первого символа кодового слова: левая ветвь соответствует “0”, а правая – “1”. Две ветви, идущие из узлов первого порядка, соответствуют второму символу кодовых слов, левая означает “0”, а правая – “1” и т. д. Ясно, что последовательность символов каждого кодового слова определяет необходимые правила продвижения от корня дерева до концевого узла, соответствующего рассматриваемому сообщению. Формально кодовые слова могут быть приписаны также промежуточным узлам. Например, промежуточному узлу второго порядка на рис.1 можно приписать кодовое слово 11, которое соответствует первым двум символам кодовых слов, соответствующих концевым узлам, порождаемых этим узлом. Однако кодовые слова, соответствующие промежуточным узлам, не могут быть использованы для представления сообщений, так как в этом случае нарушается требование префиксности кода. Требование, чтобы только концевые узлы сопоставлялись сообщениям, эквивалентно условию, чтобы ни одно из кодовых слов не совпало с началом (префиксом) более длинного кодового слова. Любой код, кодовые слова которого соответствуют различным концевым вершинам некоторого двоичного кодового дерева, является префиксным, т. е. однозначно декодируемым. Метод Хаффмена Одним из часто используемых методов эффективного кодирования является так называемый код Хаффмена. Пусть сообщения входного алфавита ![]() ![]() Тогда алгоритм кодирования Хаффмена состоит в следующем: 1. Сообщения располагаются в столбец в порядке убывания вероятности их появления. 2. Два самых маловероятных сообщения объединяем в одно сообщение ![]() ![]() ![]() ![]() ![]() 3. Повторяем шаги 1 и 2 до тех пор, пока не получим единственное сообщение, вероятность которого равна 1. 4. Проводя линии, объединяющие сообщения и образующие последовательные подмножества, получаем дерево, в котором отдельные сообщения являются концевыми узлами. Соответствующие им кодовые слова можно определить, приписывая правым ветвям объединения символ “1”, а левым - “0”. Впрочем, понятия “правые” и “левые” ветви в данном случае относительны. ![]() На основании полученной таблицы можно построить кодовое дерево ![]() Так как в процессе кодирования сообщениям сопоставляются только концевые узлы, полученный код является префиксным и всегда однозначно декодируем. При равномерных кодах одиночная ошибка в кодовой комбинации приводит к неправильному декодированию только этой комбинации. Одним из серьёзных недостатков префиксных кодов является появление трека ошибок, т.е. одиночная ошибка в кодовой комбинации, при определенных обстоятельствах, способна привести к неправильному декодированию не только данной, но и нескольких последующих кодовых комбинаций. Пример на однозначность декодирования и трек ошибок Пусть передавалась следующая последовательность 1 0 0 1 1 1 0 0 0 1 a b c d При возникновении ошибки в первом двоичном элементе, получим 0 0 0 1 1 1 0 0 0 1 g c d Т.О. ошибка в одном разряде комбинации первого символа привела к неправильному декодированию двух символов. (Трек ошибок). Контрольные вопросы по теме: Назначение и цели эффективного кодирования. Поясните за счет чего, обеспечивается достижение сжатия при эффективном кодировании. Чем определяется минимальная средняя длина кодовой комбинация при применении эффективном кодировании. Какие проблемы возникают при разделении неравномерных кодовых комбинаций. Что такое префиксные коды. В чем заключается алгоритм Хаффмана. Что такое трек ошибок, и каковы причины его возникновения. 5. Защита от ошибок в системах связи От СПДС обычно требуется не только передавать сообщения с заданной скоростью передачи информации, но и обеспечивать при этом требуемую достоверность. Получив сообщение, пользователь должен быть с высокой степенью уверен, что отправлялось именно это сообщение. Помехи, действующие в канале, как известно, приводят к возникновению ошибок. Исходная вероятность ошибки в каналах связи обычно не позволяет достичь высокой степени достоверности без применения дополнительных мероприятий. К таким мероприятиям, обеспечивающим защиту от ошибок, относят применения корректирующих кодов. В общей структурной схеме СПДС задачу защиты от ошибок выполняет кодер и декодер канала, который иногда называют УЗО. 5.1. Понятие о корректирующих кодах Пусть имеется источник сообщений с объемом алфавита К. Поставим в соответствие каждому сообщению n - элементную двоичную последовательность. Всего последовательностей из n - элементов может быть ![]() Если ![]() Полученный таким образом код называется простым, он не способен обнаруживать и исправлять ошибки. Для того, что бы код мог обнаруживать и исправлять ошибки необходимо выполнение условия ![]() Появление ошибки в кодовой комбинации будет обнаружено, если передаваемая разрешенная комбинация перейдет в одну из запрещенных. Расстояние Хемминга – характеризует степень различия кодовых комбинаций и определяется числом несовпадающих в них разрядов. Перебрав все возможные пары разрешенных комбинаций рассматриваемого кода можно найти минимальное расстояние Хемминга d0. Минимальное расстояние d0 - называется кодовым расстоянием Кодовое расстояние определяет способность кода обнаруживать и исправлять ошибки. У простого кода d0=1 – он не обнаруживает и не исправляет ошибки. Так как любая ошибка переводит одну разрешенную комбинацию в другую. В общем случае справедливы следующие соотношения ![]() ![]() Линейные коды Двоичный блочный код является линейным если сумма по модулю 2 двух кодовых слов является также кодовым словом. Линейные коды также называют групповыми. Введем понятия группы. Множество элементов с определенной на нем групповой операцией называется группой, если выполняется следующие условия: 1. Замкнутость gi ![]() ![]() 2. Ассоциативность (сочетательность) (gi ![]() ![]() ![]() ![]() 3. Наличие нейтрального элемента gj ![]() 4. Наличие обратного элемента. gi ![]() Если выполняется условие gi ![]() ![]() Множество кодовых комбинаций n-элементного кода является замкнутой группой с заданной групповой операцией сложение по модулю 2. |