Главная > Помехоустойчивое кодирование > Кодирование с исправлением ошибок в системах цифровой связи
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

1. КОДИРОВАНИЕ. ОСНОВНЫЕ ПОНЯТИЯ

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

Польза кодирования доказана работой Шеннона [4]. В 1948 г. он установил, что если скорость создания сообщений источником не превосходит некоторой величины, называемой пропускной способностью канала, то при подходящих кодировании и декодировании можно вести передачу по каналу с шумом со сколь угодно малой вероятностью ошибки. Фактически в работе Шеннона утверждается, что мощность сигнала, шум в канале и полоса частот ограничивают лишь скорость передачи, а не ее точность.

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

1.1. Основные принципы

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

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

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

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

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

Рис. 1.1. Вероятность того, что доля ошибочных символов в блоке длиной превышает при вероятности

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

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

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

Пример. Рассмотрим код, состоящий из четырех кодовых слов и Каждое кодовое слово используется для представления одного из четырех возможных сообщений. Поскольку код включает лишь небольшую долю всех 32 возможных последовательностей из пяти символов, мы можем выбрать кодовые слова таким образом, чтобы каждые два из них отличались друг от друга не менее чем в трех позициях. Таким образом, кодовое расстояние равно трем и код может исправлять одиночную ошибку в любой позиции. Чтобы провести процедуру декодирования при этом коде, каждой из 28 недопустимых последовательностей нужно поставить в соответствие ближайшую к ней допустимую последовательность. Этот процесс ведет к созданию таблицы декодирования, которая строится следующим образом. Вначале под каждым кодовым словом выписываем все возможные последовательности, отличающиеся от него в одной позиции. В результате получаем часть табл. 1.1, заключенную между штриховыми линиями. Заметим, что после построения этой части осталось восемь последовательностей. Каждая из этих последовательностей отличается от каждого кодового слова не менее чем в двух позициях. Однако в отличие от других последовательностей эти восемь последовательностей нельзя однозначно разместить в таблице. Например, последовательностью можно поместить либо в первый, либо в четвертый столбец. При использовании этой таблицы в процессе декодирования нужно найти столбец, в котором содержится принятая последовательность, и в качестве выходной последовательности декодера взять кодовое слово, находящееся в верхней строке этого столбца.

Таблица 1.1. (см. скан) Таблица декодирования для кода с четырьмя словами

Причина, по которой таблица декодирования должна строиться именно таким образом, очень проста. Вероятность появления фиксированной комбинации из ошибок равна Заметим что при

Таким образом, появление фиксированной одиночной ошибки более вероятно, чем фиксированной комбинации двух ошибок, и т. д. Это значит, что декодер, который декодирует каждую принятую последовательность в ближайшее к ней по расстоянию Хемминга кодовое слово, выбирает в действительности то кодовое слово, вероятность передачи которого максимальна (в предположении, что все кодовые слова равновероятны). Декодер, реализующий это правило декодирования, является декодером максимального правдоподобия, и в указанных предположениях он минимизирует вероятность появления ошибки декодирования принятой последовательности. В этом смысле такой декодер является оптимальным. Это понятие очень важно, поскольку декодеры максимального правдоподобия часто используются для коротких кодов. Кроме того, параметры декодера максимального правдоподобия могут служить эталоном, с которым сравниваются параметры других, неоптимальных декодеров. Если декодирование ведется с помощью таблицы декодирования, то элементы таблицы можно расположить так, чтобы получить декодирование по максимуму правдоподобия. К сожалению, объем таблицы растет экспоненциально с ростом длины блока, так что использование таблицы декодирования для длинных кодов нецелесообразно. Однако таблица декодирования часто оказывается полезной для выяснения важных свойств блоковых кодов.

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

где биномиальный коэффициент.

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

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

Это неравеаство называется границей Хемминга или границей сферической упаковки. Равенство в (1.3) достигается только для так называемых совершенных кодов. Эти коды исправляют все наборы из или менее ошибок и не исправляют никаких других наборов. Число известных совершенных кодов очень невелико, так что равенство в (1.3) достигается в очень редких случаях.

Процесс кодирования состоит в том, что наборы информационных символов отображаются в кодовые последовательности, состоящие из символов. Любое такое отображение будем называть -кодом, хотя обычно такое название применяется только к линейным кодам (которые обсуждаются позже). Поскольку число последовательностей длиной равно 2, неравенство (1.3) можно переписать следующим образом:

Мера эффективности кода определяется отношением

и называется скоростью кода. Доля избыточно передаваемых символов равна

Отображение, возникающее при кодировании, можно задавать таблицей кодирования. Например, рассмотренный выше код с четырьмя кодовыми словами задается табл. 1.2. Часть кодовой последовательности, заключенная между штриховыми линиями, совпадает с входной последовательностью. Поэтому каждой кодовой последовательности, легко однозначно сопоставить входную последовательность. Не все блоковые коды обладают этим свойством. Те, которые им обладают, называются систематическими кодами. Понятие избыточных символов для систематических кодов становится абсолютно ясным, и избыточными символами в табл. 1.2 являются символы на позициях 1, 4 и 5. Коды, не обладающие указанным свойством, называются несистематическими.

Таблица 1.2. (см. скан) Таблица поискг при декодировании

Существует много хороших конструктивных методов кодирования, позволяющих исправлять кратные ошибки и приводящих к заметному уменьшению частоты появления ошибочных символов. Эти коды легко строятся и с помощью современных полупроводниковых устройств относительно просто декодируются. Например, существует блоковый код длиной 40, содержащий 50% избыточных символов и позволяющий исправлять четыре случайные ошибки. На рис. 1.1 показано, что при этот код имеет вероятность ошибки блока, меньшую Если, этого недостаточно, разработчик увеличивает избыточность, чтобы исправлять большее число ошибок, или переходит к кодам с большей длиной

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

Прежде чем идти дальше, сделаем небольшое отступление, которое не имеет большого практического значения, но привлекает внимание специалистов по теории кодирования в течение многих лет. Форма кривых, изображенных на рис. 1.1, позволяет предположить, что если имеется схема, исправляющая фиксированную долю ошибочных символов в блоке (в нашем случае незначительно превышает 0,01), то, выбирая длину блока достаточно большой, можно сделать долю ошибок сколь угодно малой. К сожалению, это оказывается очень трудной задачей. Большинство конструктивных процедур может обеспечить постоянное отношение лишь при возрастающей доле избыточных символов (другими словами, при Таким образом, потеря эффективности возникает из-за того, что доля полезных сообщений становится очень малой при большой длине блока. Частично эта задача была решена Юстесеном в 1972 г. [5]. Юстесен показал, что можно построить класс асимптотически хороших (в указанном здесь смысле) кодов и указать для них процедуру декодирования. Однако, насколько известно авторам, эти коды не применялись ни в одной из существующих систем связи.

<< Предыдущий параграф Следующий параграф >>
Оглавление