Укороченные коды

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

Здесь на помощь приходят укороченные коды, построенные на основе циклических кодов. Пусть, например, нами выбран много­член с т = 5. На базе этого многочлена можно построить цикличе­ский (31,26)-код Хэмминга. Рассмотрим подможество слов этого ко­да, содержащее все кодовые слова с тремя нулями в старших разря­дах1 Это подмножество образует укороченный (28,23)-код Хэммин­га. Укороченный код сохраняет все свойства циклического (31,26)- кода, так как в процессе декодирования мы можем дописать к кодо­вым словам три недостающих нуля и рассматривать их как векторы основного (31,26')-кода Хэмминга.

В качестве следующего примера можно привести код Файера, ис­пользуемый в мобильной связи. Этот код является сильным укоро­чением кода Хэмминга. Соответствующий код Хэмминга имеет непо­мерно большую дайну, равную 3014633 и содержит 40 проверочных символов. На его базе строится (224,184)-код Файера, способный об­наруживать все пакеты ошибок длиной до 40 символов, или исправ­лять все пакеты длиной до 12 символов. Этот код может эффективно бороться с замираниями и используется в мобильной связи GSM для защиты канала управляющей информации SACCH (Slow Associated Control Channel).

Таблица 3.9. (6,3)-код.

Вход

Кодовое слово

ООО

000 000

100

110 100

010

011 010

110

101 110

001

111 001

101

001 101

011

100 011

111

010 111

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

Пример: Укороченный (6,3)-код.

Рассмотрим метод кодирования и декодирования кода, получен­ного укорочением (7,4)-кода Хэмминга. Выберем из множества кодо­вых слов базового кода все кодовые слова, начинающиеся с символа «О». Выбрасываемые при укорочении символы полагаются равными нулю и, поэтому, не передаются. Таким образом получаем укорочен­ный (6,3)~код. В левой части таблицы 3.3 приведены кодовые слова (7,4)-кода Хэмминга, у которых старший разряд равен нулю. Выбра­сывая из этих слов лишние нули, получаем кодовые слова укорочен­ного (6,3)-кода (см. табл. 3.9).

Замечание. Построенный (6,3)-код не является циклическим, так как циклический сдвиг кодовых слов не во всех случаях является кодовым словом, однако, его конструкция позволяет использовать свойства циклических кодов при декодировании.

Проверим таблицу 3.9 с помощью алгоритма деления Евклида. Рассмотрим информационный вектор и = (101), многочлен которого и(Х) = 1 + X2. Умножая и(Х) на X3 и используя алгоритм деле­ния Евклида (см. табл. 3..10), получим многочлен остатка от деления Х3и(Х) на g(X) = 1 + X + X3, равный b(X) = X2. Таким образом,

Таблица 3.10. Определение проверочных символов (алго­ритм деления Евклида) для и(Х) 1 1 А1 и д(Х) = 1 +Х + Х3.

clip_image002

многочлен систематического (6,3)-кода равен v{X) = Х3и{Х) + Ь(Х) = Х3[1] + 1] + X2 = Хъ + X3 + X2, (3.91)

что соответствует кодовому вектору v = (001 101) из табл. 3.9.

За основу кодера систематического (6,3)-кода может быть при­нята схема кодирования, приведенная на рис. 3.8. Так как (6,3)-код образуется укорочением (7,4)-кода Хэмминга, схема рис. 3.8 суще­ственно упрощается: из регистров удаляются разряды из и vg и ко­дирование заканчивается уже после третьего такта.

Для практической реализации декодера укороченного кода име­ются три альтернативы:

1. Для декодирования (6,3)-кода можно, в принциие, использо­вать декодер базового (7,4)-кода Хэмминга (см. рис. 3.20). В этом случае, к принятому слову приписывается недостающий ноль и процесс декодирования занимает столько же тактов, сколько требуется для декодера базового кода.

Для декодирования кодов с 2-кратным укорочением необходимо затратить I дополнительных тактов. В случае, когда I велико (как, например, в случае кода Файера) такой метод декодиро­вания неприемлем.

«не знает об укорочении») и следующим за синдромом «111» будет синдром «101». В соответствии с его числовым вектором и производится модификация текущего синдрома на рис. 3.22.

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

Такой метод декодирования, в ряде случаев, приводит к доста­точно простой схеме построения декодеров и, поэтому, весьма интересен для практики. В качестве примера в [4] приведена схема декодирования укороченного (272,260)-кода.

3. Этот вариант построения декодера Меггита особенно интере­сен для практики, так как используемые в нем алгоритмы рас­познавания ошибок и коррекции синдрома не зависят от дли­ны укорочения I и строятся с наименьшими затратами. Длина укорочения учитывается путем умножения принятого слова на некоторый многочлен, зависящий от I.

clip_image004

На примере укороченного (6,3)-кода мы покажем, как могла бы выглядеть оптимальная процедура распознавания ошибки в компо­ненте Г5 и коррекции соответствующего синдрома. Как уже отмеча­лось ранее, в нижнем регистре рис. 3.22 производится вычисление синдромов циклических сдвигов вектора ошибки для неукороченно­го (7,4)-кода Хэмминга, поэтому таблицу 3.6 можно использовать и для (6,3)-кода с учетом того, что первым вычисляется синдром для es = (ООО 0010). На последующих тактах в нижнем регистре вычис­ляются синдромы для

clip_image006

и т. д. Наиболее благоприятным с точки зрения затрат на модифи­кацию в схеме рис. 3. 22 является синдром s = (0,0,1). Из таблицы 3.6 следует, что этот синдром соответствует вектору ошибки

clip_image008

т.е. ошибке в компоненте Г2- Таким образом, для реализации опти­мальной процедуры исправления ошибки и коррекции синдрома в схеме рис. 3.22 необходимо предварительно произвести четыре цик­лических сдвига верхнего и нижнего регистров (при этом верхний регистр должен быть модифицирован: в него должны быть добавлен дополнительный разряд Гб и цепь обратной связи (Прим. переводчи­ка)).

На примере укороченного (6,3)-кода может показаться, что эти затраты не слишком велики, однако, для используемого в сети GSM кода Файера миллион и более сдвигов плюс затраты на модифи­кацию регистра оказываются технически неприемлемыми. Ниже мы теоретически покажем, что дополнительные затраты такого рода от­нюдь не. являются необходимыми. После этого мы рассмотрим по­строение схемы оптимального декодера укороченного (6,3)-кода.

Будем искать схему построения декодера укороченного кода, в которой технические затраты на исправление ошибки и коррекцию синдрома были бы минимальными. Так как базовый (п, к)-код яв­ляется циклическим, эта схема должна обнаруживать и исправлять ошибку в младшем разряде кодового слова укороченного (п—1,к — 1)- кода. Многочлен такой ошибки имеет вид

clip_image010

где I - длина укорочения.

Постараемся найти линейную операцию, отображающую е(Х) в некоторый вспомогательный многочлен е'(Х), синдром которого при е(Х) = Хп~1~1 был бы равен

clip_image012

Пусть такая операция отображает многочлен е(Х) = Хп 1 1 в

clip_image014(3.94)

Так как степень многочлена е'(Х) меньше степени д{Х), равенство (3.93) остается справедливым. Заметим, что е'(Х) = Хп~к~1 можно получить из многочлена е(Х) = Х"'1-1, г-кратным циклическим сдвигом, то естьclip_image016

гдеclip_image018

При этом после 1 + 1 первых сдвигов е'(Х) = Х°, а после оставшихся п — к — 1 сдвигов выполняются равенства (3.94) и (3.93). Постара­емся заменить операцию г-кратного циклического сдвига линейной операцией умножения многочленов.

Из соотношения (3.9) следует, что в нашем случае справедливо равенствоclip_image020

где д(Х) - некоторый многочлен, конкретное значение которого не представляет для нас интереса. Согласно теореме 3.2.5, порождаю­щий многочлен д(Х) делит Хп + 1 без остатка, поэтому можно за­писатьclip_image022

Применяя алгоритм деления Евклида, сомножитель Хг можно пред­ставить в видеclip_image024

гдеclip_image026

Подставляя (3.98) и (3.99) в (3.97), имеем clip_image028 clip_image030 Из (3.100) следует

квадратных скобках умножено на д(Х) и, следовательно, это про­изведение не оказывает влияние на синдром в правой части (3.101). Таким образом, мы имеем

clip_image032

Обобщая все вышесказанное, можно сделать следующие выводы:

2. Ошибка обнаруживается при ее сдвиге в старший разряд кодо­вого слова укороченного (п — 1,к — /)-кода и исправляется на следующем такте работы декодера;

3. В схеме декодера вычисляется синдром вспомогательного мно­гочлена е'(Х) = e(X)d(X). В этом случае ошибке е(Х) = Хп~1~1 соответствует синдром s'(X) = Хп~к~г, который также корректируется на следующем такте;

4. Многочлен d(X) является остатком от деления Хг на д(Х), где г определяется длиной укорочения I и степенью производящего многочлена д(Х);

5. Так как степень многочлена d(X) всегда меньше степени д(Х), схема умножения е(Х) на d(X) может быть реализовала с по­мощью простых сдвигов.

Пример: Укороченный (6,3)-код.

clip_image034

и вспомогательный многочлен е'(Х) равен

clip_image036

Рассмотрим построение оптимального, с точки зрения затрат, де­кодера'укороченного (6,3)-код. Напомним, что этот код образуется укорочением базового циклического (7,4)-кода Хэмминга с порожда­ющим многочленом д(Х) = 1 + X + X3. В этом случае многочлену ошибки е(Х) = X5 должен соответствовать синдром вспомогатель­ного многочлена s'(X) = X2. Так как X2 является четырехкратным циклическим сдвигом многочлена е(Х) = X5, множитель d(X) опре­деляется как

Таким образом, в схеме рис. 3.23 вектор ошибки через суммато­ры однавременно подается на разряды si и S2 регистра вычисления синдрома. На рис. 3.23 приведен пример вычисления синдрома для е = (0,0,0,0,0,1), то есть синдрома ошибки, находящейся в старшем разряде укороченного (6,3)-кода. Как и следовало ожидать, после шестого такта мы получаем синдром s' = (0,0,1).

clip_image038

Схема исправления однократной ошибки и коррекции синдрома с использованием вспомогательного многочлена е'(Х) приведена на рис. 3.24. По вычисленному синдрому s' = (0,0,1) происходит обна­ружение и исправление ошибки. Одновременно синдром корректи­руется и, тем самым, устраняется влияние ошибки на последующие шаги декодирования.

clip_image040

Таблица 3.11. Вычисление синдрома неискаженного приня­того слова п = (0,1,1,0,1,0).

clip_image042

Таблица 3.12. Вычисление синдрома неискаженного приня­того слова ri = (0,1,1,0,1,1).

clip_image044

Проверим работу декодера на трех примерах. Пусть кодовое сло­во Г} = (0,1,1,0,1,0) (см. табл. 3.9) принято без ошибок. После­довательность состояний регистра синдрома приведена в табл. 3.11. После окончания загрузки слова ri в буфферный регистр, в нижнем регистре также заканчивается вычисление его синдрома. В данном случае синдром оказывается нулевым.

Теперь в старший разряд слова ri внесем одну ошибку и получим вектор гг = (0,1,1,0,1,1). После загрузки слова гг в буфферный регистр, его синдром равен s'2 = (0,0,1) (см. табл. 3.12). Согласно алгоритму декодирования, такой синдром указывает на ошибку в старшем разряде слова Г2-

Таблица 3.13. Вычисление синдрома искаженного принятого слова гз = (0,1,0,0,1,0).

clip_image046

И, наконец, рассмотрим декодирование принятого слова с ошиб­кой в третьей компоненте: гз = (0,1,0,0,1,0). Синдром принятого слова гз равен s^ = (1,0,1) (см. табл. 3.13). Это означает, что в при­нятом слове имеется ошибка, но она произошла не в старшем раз­ряде, поэтому продолжим процедуру вычисления синдромов теперь уже для сдвигов слова Гз (см. табл. 3.14).

Эта процедура продолжается до тех пор, пока ошибочная ком­понента гз не займет место старшего разряда. После этого синдром принимает значение S3 = (0,0,1) и происходит исправление ошиб­ки и коррекция синдрома. Далее декодирование происходит уже с нулевым синдромом, то есть после исправления ошибки в третьей компоненте мы получили слово (6,3)-кода.

Предлагаю ознакомиться с аналогичными статьями: