Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 640

.pdf
Скачиваний:
7
Добавлен:
30.04.2022
Размер:
3.05 Mб
Скачать

H (z) = - 0,1 · log2 0,1 - 0,9 · log2 0,9 = 0,47.

При переходе к кодированию блоками по два знака (таблица 6.4)

= бл / 2 = ½ (0,81 ·1 + 0,09 · 2 + 0,09 · 3 + 0,01 · 3) =

0,645.

 

 

Таблица 6.4

 

 

 

 

Блоки

Вероятности

Коды

Z1 Z1

0,81

1

 

Z2 Z1

0,09

01

 

Z1 Z2

0,09

001

 

Z2 Z2

0,01

000

 

Можно проверить, что при кодировании блоками по три символа среднее число символов на знак уменьшается и оказывается равным около 0,53.

Эффект достигается за счет того, что при укрупнении блоков, группы можно делить на более близкие по значениям суммарных вероятностей подгруппы. Вообще,

lim = ( ) ,

где n - число символов в блоке.

6.4. Методика кодирования Хаффмана

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

Кодируемые знаки, также как при использовании метода Шеннона-Фано, располагают в порядке убывания их вероятностей (таблица 6.5). Далее на каждом этапе две последние позиции списка заменяются одной и ей приписывают вероятность,

141

равную сумме вероятностей заменяемых позиций. После этого производится пересортировка списка по убыванию вероятностей, с сохранением информации о том, какие именно знаки объединялись на каждом этапе. Процесс продолжается до тех пор, пока не останется единственная позиция с вероятностью, равной 1.

Таблица 6.5

Знаки

Pi

Вспомогательные столбцы

 

 

 

1

2

3

4

 

5

6

7

 

 

 

m1

0,22

0,22

0,22

0,26

0,32

 

0,42

0,58

1

 

 

 

 

 

 

 

 

 

 

m2

0,2

0,2

0,2

0,22

0,26

 

0,32

0,42

 

 

 

 

 

 

 

 

 

 

 

m3

0,16

0,16

0,16

0,2

0,22

 

0,26

 

 

 

 

 

 

 

 

 

 

 

 

m4

0,16

0,16

0,16

0,16

0,2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m5

0,1

0,1

0,16

0,16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m6

0,1

0,1

0,1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m7

0,04

0,06

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m8

0,02

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

После этого строится кодовое дерево. Корню дерева ставится в соответствие узел с вероятностью, равной 1. Далее каждому узлу приписываются два потомка с вероятностями, которые участвовали в формировании значения вероятности обрабатываемого узла. Так продолжают до достижения узлов, соответствующих вероятностям исходных знаков.

Процесс кодирования по кодовому дереву осуществляется следующим образом. Одной из ветвей, выходящей из каждого узла, например, с более высокой вероятностью, ставится в соответствие символ 1, а с меньшей - 0. Спуск от корня к нужному знаку дает код этого знака. Правило кодирования в случае равных вероятностей оговаривается особо. Таблицы 6.5 и

142

рисунок 6.3 иллюстрируют применение методики Хаффмана. Жирным шрифтом в таблице 6.5 выделены объединяемые позиции, подчеркиванием - получаемые при объединении позиции.

m1

m2

m3

m4

m5

m6

m7

m8

01

00

111

110

100

1011

10101

10100

Рис. 6.3. Кодовое дерево и кодовые слова

Замечательным свойством кодов, построенных с применением методик Шеннона-Фано или Хаффмана, является их префиксность. Оно заключается в том, что ни одна комбинация кода не является началом другой, более длинной комбинации. Это позволяет при отсутствии ошибок осуществлять однозначное декодирование ряда следующих друг за другом кодовых комбинаций, между которыми отсутствуют разделительные символы.

143

6.5. Недостатки методов эффективного кодирования

1.Различные длины кодовых слов приводят к неравно-

мерным задержкам кодирования. Обычно знаки на вход устройства кодирования поступают через равные промежутки времени. Если им соответствуют комбинации различной длины, то для обеспечения полной загрузки канала при передаче без потерь необходимо предусмотреть буферное устройство, как на передающей, так и на приемной стороне.

2.Низкая помехозащищенность. Сжатие снижает избы-

точность, что соответственно повышает предрасположенность

краспространению ошибок, т.е. один ошибочно принятый бит может привести к тому, что все последующие символы будут декодироваться неверно.

3.Предполагаются априорные знания вероятности букв,

которые на практике не известны, а их оценки часто бывают затруднительны.

4.Сложность технической реализации. Использование буферных устройств, для обеспечения равномерной загрузки канала, при разной длине кодовых комбинаций и организация кодирования блоками для повышения эффективности приводят к усложнению реализации систем эффективного кодирования. Если вдобавок применяются некоторые аппаратные решения, обеспечивающие повышение помехозащищенности, то все это в совокупности может свести на нет основное достоинство систем эффективного кодирования, связанное с тем, что знаки, имеющие большую вероятность, кодируются более короткими кодовыми словами.

144

7. Помехоустойчивое (корректирующее) кодирование

Высокие требования к достоверности и надежности передачи, обработки и хранения информации в системах передачи данных, в вычислительных системах и сетях, в региональных системах управления и различного рода информационных системах требуют такого кодирования информации, которое обеспечивало бы безошибочную ее передачу, а в случае появления ошибок — их обнаружение и исправление.

Коды, обладающие такой способностью, называют помехоустойчивыми или корректирующими. Подавляющее большинство существующих в настоящее время помехоустойчивых кодов обладают требуемыми свойствами благодаря их алгебраической структуре. Поэтому их называют алгебраическими кодами. Хотя существуют и иные коды, корректирующее действие которых основано на оценке вероятности искажения каждого символа кода.

Возможность использования кодирования для уменьшения числа ошибок в канале была теоретически показана К. Шенноном в 1948 году в его работе "Математическая теория связи". В ней было сделано утверждение, что если скорость создания источником сообщений (производительность источника) не превосходит некоторой величины, называемой пропускной способностью канала, то при соответствующем кодировании и декодировании можно свести вероятность ошибок в канале к нулю.

Вскоре, однако, стало ясно, что фактические ограничения на скорость передачи устанавливаются не пропускной способностью канала, а сложностью схем кодирования и декодирования. Поэтому усилия разработчиков и исследователей в последние десятилетия были направлены на поиски эффективных кодов, создание практически реализуемых схем кодирования и декодирования, которые по своим характеристикам приближались бы к предсказанным теоретически.

Простейший код для борьбы с шумом — это контроль четности, он, в частности, широко используется в модемах.

145

Кодирование заключается в добавлении к каждому байту девятого бита таким образом, чтобы дополнить количество единиц в байте до заранее выбранного для кода четного (even) или нечетного (odd) значения. Используя этот код, можно лишь обнаруживать большинство ошибок [4].

В двоичном коде количество элементов в символах удваиваются, причем к каждому элементу «0» приписывается «1», а к каждому элементу «1» приписывается элемент «0». Например, исходный кодовый символ 11010 по этому методу кодируется следующим образом:

 

1

 

1

 

0

 

1

 

1

1

0

1

0

0

1

1

0

0

1

Рис. 7.1. Кодирование двоичным кодом

Полученный корректирующий код позволяет обнаружить одиночную ошибку в каждом разряде путем сложения по mod 2 каждой пары элементов символа корректирующего кода. Если вследствие единичного сбоя в какой-либо паре сумма будет равна 0, то это является сигналом ошибки в данном разряде.

Простейший код, исправляющий ошибки, — это тройное повторение каждого бита. Если с ошибкой произойдет передача одного бита из трех, то ошибка будет исправлена, но если случится двойная или тройная ошибка, то будут получены неправильные данные. Часто коды для исправления ошибок используют совместно с кодами для обнаружения ошибок. При тройном повторении для повышения надежности три бита располагают не подряд, а на фиксированном расстоянии друг от друга. Использование тройного повторения значительно снижает скорость передачи данных.

Если в канале имеется возможность формировать запрос на повторную передачу в случае обнаружения ошибки, такой канал называют каналом с обратной связью (адаптивным каналом).

146

Кодирование с исправлением ошибок представляет собой

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

Первое − использование избыточности. Закодированные последовательности всегда содержат дополнительные, или из-

быточные, символы. Количество символов в кодовой последовательности Y всегда больше, чем необходимо для однозначного представления любого сообщения λi из алфавита.

Второе — свойство усреднения, означающее, что избыточные символы зависят от нескольких информационных сим-

волов, то есть информация, содержащаяся в кодовой последовательности X, перераспределяется также и на избыточные символы.

7.1. Теорема Шеннона о кодировании для канала с помехами

Теоретической основой помехоустойчивого кодирования является следующая теорема (Шеннона):

Применительно к дискретному каналу она гласит:

Теорема. Для дискретного канала без памяти при скоростях кода R, меньших информационной емкости Cинф, всегда

существует код, для которого средняя вероятность ошибки стремится к нулю с ростом длины кодового слова.

В случае же непрерывного канала она формулируется

как

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

Обратная же теорема утверждает:

147

Теорема. При скорости передачи R , большей пропускной способности канала связи C, никакой код не обеспечит произвольно малой вероятности ошибки декодирования, т.е. абсолютно надежной передачи сообщений.

Следует отметить, что если обратная теорема доказывается для произвольной модели канала связи, то прямая только лишь для конкретных типов каналов.

Анализируя теорему, важно отметить, что она устанавливает теоретический предел системы при достоверной передаче сообщений и что помехи в канале не накладывают ограничений на точность и достоверность передачи сообщений, а ограничения накладываются лишь на скорость передачи, при которой может быть достигнута сколь угодно высокая достоверность передачи.

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

7.2. Классификация помехоустойчивых кодов

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

Помехоустойчивое кодирование осуществляется за счет введения в состав передаваемых кодовых слов достаточного большого объема избыточной информации, например, в форме проверочных символов. Операцию введения избыточности для повышения помехоустойчивости называют собственно поме-

хоустойчивым кодированием. По способу кодирования поме-

хоустойчивые коды можно условно разделить на (рис.7.2).

148

Рис. 7.2. Классификация помехоустойчивых кодов

Блочными называются коды, в которых информационный поток символов разбивается на отрезки и каждый из них преобразуется в определённую последовательность (блок) кодовых символов. В блочных кодах кодирование при передаче (формирование проверочных элементов) и декодирование при приёме (обнаружение и исправление ошибок) выполняются в пределах каждой кодовой комбинации (блока) в отдельности по соответствующим алгоритмам.

Непрерывные или рекуррентные коды образуют последо-

вательность символов, не разделяемую на отдельные кодовые комбинации. Кодирование и декодирование непрерывно совершаются над последовательностью элементов без деления их на блоки. Формирование проверочных символов ведётся по рекуррентным (возвратным) правилам, поэтому непрерывные коды часто называют рекуррентными или цепными.

149

В простейшем цепном коде каждый проверочный элемент формируется путём сложения по модулю 2 соседних или отстоящих друг от друга на определённое число позиций информационных элементов. Подобную чередующуюся последовательность разрядов имеет, например, корреляционный манчестерский код [3].

К непрерывным кодам относятся и свёрточные коды, в которых каждый информационный символ, поступающий на вход кодирующего устройства, вызывает появление на его выходе ряда проверочных элементов, образованных суммированием по модулю 2 данного символа и k-1 предыдущих информационных символов. Рекуррентные коды позволяют исправлять групповые ошибки ("пачки") в каналах связи.

Блочные коды делятся на равномерные и неравномерные. В равномерных кодах, в отличие от неравномерных, все кодовые комбинации содержат одинаковое число n -символов (разрядов) с постоянной длительностью х0 импульсов символов кода. Равномерные коды в основном и применяются в системах связи, так как это упрощает технику передачи и приёма.

Классическими примерами неравномерного кода являются код Морзе, широко применяемый в телеграфии, и код Хафмена, применяемый для компрессии информации (факсимильная связь, ЭВМ).

Никаких специальных мер по исправлению и обнаружению ошибок в коде Морзе не предусматривается в связи с большой избыточностью самого передаваемого текста. В этом смысле код Морзе не относится к классу корректирующих кодов.

Почти все блочные корректирующие коды принадлежат к разделимым кодам, в которых кодовые комбинации состоят из двух частей: информационной и проверочной. Их символы всегда занимают одни и те же позиции, т. е. располагаются на определённых местах. Как правило, в таких кодах, все кодовые комбинации которых содержат n символов, первые k символов являются информационными, а за ними располагаются (n , k)

150