ОБНАРУЖЕНИЕ И ИСПРАВЛЕНИЕ ОШИБОК В СООБЩЕНИЯХ.

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

10110 – переданная кодовая комбинация;

10010 – 1-я принятая комбинация;

10100 – 2-я принятая комбинация;

00110 – 3-я принятая комбинация;

10110 - накопленная комбинация . Как видим, несмотря на то, что во всех трёх принятых комбинациях были ошибки накопленная не содержит ошибок1.

Принятое сообщение может также состоять из кода и его инверсии. Код инверсии посылается в канал связи как одно целое. Ошибка на приёмном конце выделяется при сопоставлении кода и его инверсии (подробнее см. тема 7).

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

clip_image002, (55)

где l – число единиц в кодовом слове. Если бы не существовало условие постоянного веса, то число комбинаций кода могло бы быть гораздо большим, а именно 2n. Примером кода с постоянным весом может служить стандартный телеграфный код №3 (см. приложение 4). Комбинации этого кода построены таким образом, что на 7 тактов, в течении которых должна быть принята одна комбинация, всегда приходятся три токовые и четыре без токовые посылки. Увеличение или уменьшение количества токовых посылок говорит о наличии ошибок.

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

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

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

В общем случае для обнаружения r ошибок минимальное кодовое расстояние

clip_image004. (56)

Минимальное кодовое расстояние, необходимое для одновременного обнаружения и исправления ошибок,

clip_image006, (57)

где s – число исправляемых ошибок.

Для кодов, только исправляющих ошибки, clip_image008. (58)

Для того чтобы определить кодовое расстояние между двумя комбинациями двоичного кода, достаточно просуммировать эти комбинации по модулю 2 и посчитать число единиц в полученной комбинации (см. задачу 6.21).

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

Если кодовая комбинация двоичного кода A отстоит от кодовой комбинации B на расстоянии d, то это значит, что в коде A нужно d символов заменить на обратные, чтобы получить код B, но это не означает, что нужно d добавочных символов, чтобы код

обладал данными корректирующими свойствами. В двоичных кодах для обнаружения одиночной ошибки достаточно иметь 1 дополнительный символ независимо от числа информационных разрядов кода, а минимально кодовое расстояние d0=2.

Для обнаружения и исправления одиночной ошибки соотношение между числом информационных разрядов clip_image010и числом корректирующих разрядов clip_image012 должно удовлетворять следующим условиям:

clip_image014, (59)

clip_image016, (60)

при этом подразумевается, что общая длина кодовой комбинации

clip_image018. (61)

Для практических расчетов при определении числа контрольных разрядов кодов с минимальным кодовым расстоянием d0 = 3 удобно пользоваться выражениями

clip_image020, (62)

если известна длина полной кодовой комбинации n, и

clip_image022, (63)

если при расчетах удобней исходить из заданного числа информационных символов clip_image010[1]1.

Для кодов, обнаруживающих трёхкратные ошибки (d0=4),

clip_image025 (64)

или

clip_image027. (65)

Для кодов длиной в n символов, исправляющих одну или две ошибки (d0=5),

clip_image029. (66)

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

clip_image031. (67)

Для кодов, исправляющих 3 ошибки (d0=7),

clip_image033. (68)

Для кодов, исправляющих s ошибок (d0=2s+1),

clip_image035. (69)

Выражение слева известно как нижняя граница Хэмминга [16], а выражение справа – как верхняя граница Варшамова – Гильбета [3]1.

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

clip_image037. (70)

Можно предположить, что значение clip_image012[1]будет приближаться к верхней или нижней границе в зависимости от того, на сколько выражены выражения под знаком логарифма (см. страницу 7) приближается к целой степени двух.

Линейные групповые коды

Линейными называются коды, в которых проверочные символы представляют собой линейные комбинации информационных символов.

Для двоичных кодов в качестве линейной операции используют сложение по модулю 2.

Правила сложения по модулю 2 определяются следующими равенствами:

clip_image040clip_image042clip_image044clip_image046

Последовательность нулей и единиц, принадлежащих данному коду, будем называть кодовым вектором.

Свойства линейных кодов: сумма (разность) кодовых векторов линейного кода даёт вектор, принадлежащий данному коду.

Линейные коды образуют алгебраическую группу по отношению к операции сложению по модулю 2. в этом смысле они являются групповыми кодами.

Свойства группового кода: минимальное кодовое расстояние между кодовыми векторами группового кода равно минимальному весу ненулевых кодовых векторов.

Вес кодового вектора (кодовой комбинации) равен числу его ненулевых компонентов (см. задачу 6.42).

Расстояние между двумя кодовыми векторами равно весу вектора, полученного в результате сложения исходных векторов по модулю 2 (см. задачу 6.44). Таким образом, для данного группового кодаclip_image048.

Групповые коды удобно задавать матрицам, размерность которых определяется параметрами кода clip_image010[2]и clip_image012[2]. Число строк в матрице равно clip_image010[3], число столбцов матрицы равно clip_image050:

clip_image052. (71)

Коды, порождаемые этими матрицами, известны как (n;k) – коды, где k = clip_image010[4], а соответствующие им матрицы называются порождающими, производящими, образующими.

Порождающая матрица С может быть представлена двумя матрицами И и П (информационная и проверочная). Число столбцов матрицы П равно nK, число столбцов матрицы И равно nM:

clip_image054. (72)

Теорией и практикой установлено [8,9,13], что в качестве матрицы удобно брать единичную матрицу в канонической формуле:

clip_image056.

При выборе матрицы П исходят из следующих соображений: чем больше единиц в разрядах проверочной матрицы П, тем ближе соответствующий порождаемый код к оптимальному код к оптимальному1, с другой стороны, число единиц матрицы П определяет число сумматоров по модулю 2 в шифраторе и дешифратор, т. е. Чем больше единиц в матрице П, тем сложнее аппаратура. Вес каждой строки матрицы П должен быть не менее clip_image058, гдеWИ – вес соответствующей строки матрицы И. Если матрица И – единичная, то WИ = 1 (удобство выбора в количестве матрицы И единичной матрицы очевидно: при WИ > 1 усложнилась бы как построение кодов, так и их технологическая реализация).

При соблюдении перечисленных условий любую порождающую матрицу группового кода можно привести к следующему виду:

clip_image060clip_image062clip_image064

clip_image066,

называемому левой канонической формой порождающей матрицы.

Для кодов с clip_image068 производящая матрица С имеет вид:

clip_image070clip_image072.

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

Для кодов с clip_image074порождающая матрица не может быть представлена в форме, общей для всех видов с данными clip_image076. Вид матрицы зависит от конкретных требований к порождаемому коду (в качестве примера построения некоторого абстрактного группового кода с clip_image078 может быть предложена задача 6.48). Этим требованиям могут быть либо минимум корректирующих разрядов, либо максимальная простата аппаратуры.

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

Для кодов с clip_image078[1] соотношения n и n0 следующее: (3;1), (7;4), (15;11), (31;26), (63;57) и т. д. (см., например, задачу 6.52).

Плотно упакованные коды, оптимальные с точки зрения минимума избыточных символов, обнаруживающие максимально возможное количество вариантов ошибок кратностью clip_image080, clip_image082 и имеющие clip_image084 и clip_image086, были исследованы Д. Слепяном в работе [10]. Для получения этих кодов матрица П должна иметь

комбинации с максимальным весом. Для этого при построении кодов с clip_image074[1]последовательно используются векторы длиной clip_image089, весом clip_image091, clip_image093, …, clip_image095 (см. задачи 6.50; 6.65). Тем же Слепяном в работе[11] были исследованы неплотно упакованные коды с малой плотностью проверок на четность. Эти коды экономны с точки зрения простоты аппаратуры и содержат минимальное число единиц в корректирующих разрядах порождающей матрицы. При построении кодов с максимально простыми шифраторами и дешифраторами последовательно выбираются векторы весом clip_image097(см. задачи 6.55; 6.65). если число комбинаций, представляющих собой корректирующие разряды кода и удовлетворяют условию clip_image099, больше clip_image010[5], то в первом случае не используют наборы с наименьшим весом, а во втором – с наибольшим.

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

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

clip_image102

clip_image104

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

clip_image106

или clip_image108 (73)

В процессе декодирования осуществляются проверки, идея которых в общем виде может быть представлена следующим образом:

clip_image110, j = 1, 2, …, clip_image010[7]. (74) Для каждой конкретной матрицы существует своя, одна-единственная система проверок. Проверки производятся по следующему правилу: в первую проверку вместе с проверочным разрядом p1 входят информационные разряды, которые соответствуют единицам первого столбца проверочной матрицы П; во вторую проверку входит второй проверочный разряд p2 и информационные разряды, соответствующие единицам второго столбца проверочной матрицы, и т. д. Число проверок равно числу проверочных разрядов корректирующего кода clip_image010[8](см. задачу 6.60).

В результате осуществления проверок образуется проверочный векторclip_image112,clip_image114, …, clip_image116, который называют синдромом. Если вес синдрома равен нулю, то принятая комбинация считается безошибочной. Если хотя бы один разряд проверочного вектора содержит единицу, то принятая комбинация содержит ошибку. Исправление ошибки производится по виду синдрома, так как каждому ошибочному разряду соответствует один-единственный проверочный вектор (см. задачи 6.60; 6.62).

Вид синдрома для каждой конкретной матрицы может быть определен при помощи проверочной матрицы Н, которая представляет собой транспонированную матрицу П, дополненную единичной матрицей clip_image118, число столбцов которой равно числу проверочных разрядов кода:clip_image120.

Столбцы такой матрицы представляют собой значение синдрома для разряда, соответствующего номеру столбца матрицы Н (см. задачи 6.60; 6.62).

Процедура исправления ошибок в процессе декодирования групповых кодов сводится к следующему.

Строится кодовая таблица. В первой строке таблицы располагаются все кодовые векторы clip_image122. В первом столбце второй строки размещается вектор clip_image124, вес которого равен 1.

Остальные позиции второй строки заполняются векторами, по лученными в результате суммирования по модулю 2 вектора clip_image124[1] с вектором clip_image127расположенными в соответствующем столбце первой строки. В первом столбце третьей строки записывается вектор clip_image129, вес которого также равен 1, однако, если вектор clip_image124[2]содержит единицу в первом разряде, то clip_image129[1] - во втором. В остальные позиции третьей строки записывают суммы clip_image122[1]и clip_image129[2].

Аналогично поступают до тех пор, пока не будут просуммированы с векторами clip_image122[2]все векторы clip_image134, весом 1, с единицами в каждом из n разрядов. Затем суммируются по модулю 2 векторы clip_image134[1], с весом 2, с последовательным перекрытием всех возможных разрядов. Все вектора clip_image134[2]определяет число исправляемых ошибок. Число векторов clip_image134[3] определяется возможным числом неповторяющихся синдромов и равно clip_image136 (нулевая комбинация говорит об отсутствии ошибки). Условие неповторяемости синдрома позволяет по его виду определить один-единственный соответствующий ему вектор clip_image134[4]. Векторы clip_image134[5] есть векторы ошибок, которые могут быть исправлены данным групповым кодом.

По виду синдрома принятая комбинация может быть отнесена к тому или иному смежному классу, образованному сложением по модулю 2 кодовой комбинацией clip_image122[3] с вектором ошибки clip_image134[6], т. е. к определенной строке кодовой табл. 6.1.

Таблица 6.1.

A

r

clip_image127[1]

clip_image143

clip_image145

clip_image124[3]

clip_image147

clip_image149

clip_image151

clip_image129[3]

clip_image154

clip_image154[1]

clip_image157

clip_image159

clip_image161

clip_image163

clip_image165

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

Векторы clip_image124[4], clip_image129[4], …, clip_image171 не должны быть равны ни одному из векторов clip_image173, clip_image143[1], …, clip_image176 в противном случае в таблице появились бы нулевые векторы.

Тривиальные систематические коды. Код Хэмминга.

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

Тривиальные систематические коды могут строиться, как и групповые, на основе производящей матрицы. Обычно производящая матрица строится при помощи матриц единичной, ранг которой определяется числом информационных разрядов, и добавочной, число столбцов которой определяется числом контрольных разрядов кода. Каждая строка добавочной матрицы должна содержать не менее clip_image178 единиц, а сумма по модулю для любых строк не менее clip_image180 единиц (где clip_image182минимальное кодовое расстояние). Производящая матрица позволяет находить все остальные кодовые комбинации суммированием по модулю для строк производящей матрицы во всех возможных сочетаниях (см. например, задачу 6.74).

Код Хэмминга является типичным примером систематического кода. Однако при его построении к матрицам обычно не прибегают. Для вычисления основных параметров кода задается либо количество информационных символов, либо количество информационных символов, либо количество информационных комбинаций clip_image184. При помощи (59) и (60) вычисляются clip_image186и clip_image012[3]. Соотношения между n, clip_image186[1], и clip_image012[4]для Хэмминга предоставлены в табл. 1 приложения 8. Зная основные параметры корректирующего кода, определяют, какие позиции сигналов будут рабочими, а какие контрольными. Как показала практика, номера контрольных символов удобно выбирать по закону clip_image191, где clip_image1930, 1, 2 и т. д. - натуральный ряд чисел. Номера контрольных символов в этом случае будут соответственно: 1, 2, 4, 8, 16, 32 и т.д.

Затем определяется значения контрольных коэффициентов (0 или 1), руководствуясь следующим правилом: сумма единиц на контрольных позициях должна быть четной. Если эта сумма четна, то значение контрольного коэффициента - 0, в противно случае - 1.

Проверочные позиции выбираются следующим образом: составляется таблица для ряда натуральных чисел в двоичном коде. Число строк таблицы:

clip_image195.

Первой строке соответствует проверочный коэффициент clip_image197, второй clip_image199 и т. д., как показано в табл. 2 приложения 8. Затем выявляют проверочные позиции, выписывая коэффициенты по следующему принципу: в первую проверку входят коэффициенты, которые содержат в младшем разряде 1, т. е. clip_image197[1], clip_image202, clip_image204, clip_image206, clip_image208, clip_image210 и т. д.; во вторую - коэффициенты, содержащие 1 во втором разряде, т. е. clip_image212, clip_image202[1], clip_image215, clip_image206[1], clip_image218, clip_image210[1] и т. д.; в третью проверку - коэффициенты, которые содержат 1 в третьем разряде, и т. д. Номера проверочных коэффициентов соответствует номерам проверочных позиций, что позволяет составить общую таблицу проверок (табл. 3, приложение 8). Старшинство разрядов считается слева направо, а при проверке сверху вниз. Порядок проверок показывает также и порядок следования разрядов в получения разрядов в полученном двоичном коде.

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

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

Циклические коды.

Циклические коды [4, 6, 7, 9, 12, 13] названы так потому, что в них часть комбинаций кода либо все комбинации могут быть получены путем циклического сдвига одной или нескольких комбинацикода. Циклический сдвиг осуществляется справа налево, причем крайний левый символ каждый раз переносится в конец комбинации. Циклические коды, практически1, все относятся к систематическим кодам, в них контрольные и информационные разряды расположены на строго определенных местах. Кроме того, циклические коды относятся к числу блочных кодов. Каждый блок (одна буква является частным случаем блока) кодируется самостоятельно.

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

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

Предположим, требуется закодировать одну из комбинаций четырехзначного двоичного кода. Предположим также, что эта комбинация clip_image221. Пока не обосновывая свой выбор, берем из таблицы неприводимых многочленов (табл. 2, приложение 9) в качестве образующего многочлен clip_image223. Затем умножим clip_image225на одночлен той же степени, что и образующий многочлен. От умножения многочлена на одночлен степени n степень каждого члена многочлена повысится на n, что эквивалентно приписыванию n нулей со стороны младших разрядов многочлена. Так как степень выбранного неприводимого многочлена равна трем, то исходная информационная комбинация умножается на одночлен третьей степени:

clip_image227

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

Значение корректирующих разрядов находят по результату от деления clip_image229на clip_image231:

clip_image233

clip_image235

clip_image237

clip_image239

clip_image241

clip_image243

clip_image245

clip_image247

clip_image249

clip_image251

или

1101000

1011

1011

1111+clip_image253

1100

1011

1110

1011

1010

1011

001

Таким образом,

clip_image255,

или в общем виде

clip_image257, (75)

где clip_image259частное, а clip_image261остаток от деления clip_image229[1] на clip_image231[1].

Так как в двоичной арифметике clip_image263, а значит, clip_image265, то можно при сложении двоичных чисел переносить слагаемые из одной части равенства в другую без изменения знака (если это удобно), поэтому равенство вида clip_image267 можно записать и как clip_image269, и как clip_image271. Все три равенства данном случае означают, что либо a и b равны 0, либо a и b равны 1, т. е. имеют одинаковую четность.

Таким образом, выражение (75) можно записать как

clip_image273, (76)

что в случае нашего примера даст

clip_image275

или

clip_image2771 1 1 1 clip_image279 1 0 1 1 = 1 1 0 1 0 0 0 + 0 0 1 =

=1 1 0 1 0 0 1

Многочлен 1101001 и есть искомая комбинация, где 1101 – информационная часть, а 001 – контрольные символы. Заметим, что искомую комбинацию мы получили бы и как в результате умножения одной из комбинаций полного четырехзначного двоичного кода (в двоичном случае 1111) на образующий многочлен, так и умножением заданной комбинации на одночлен, имеющий ту же степень, что и выбранный образующий многочлен (в нашем случае таким образом была получена комбинация 1101000) с последующим добавлением к полученному произведению остатка от деления этого произведения на образующий многочлен (в нашем примере остаток имел вид 001).

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

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

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

000101clip_image283;

001010clip_image285;

010100clip_image287;

101000clip_image289.

Циклический сдвиг кодовой комбинации аналогичен умножению соответствующего многочлена на x:

clip_image291;

clip_image293;

clip_image295.Если степень многочлена достигает разрядности кода, то происходит «перенос» в нулевую степень при x. В шифраторах циклических кодов эта операция осуществляется путем соединения выхода ячейки старшего разряда со входом ячейки нулевого разряда.

Сложение по модулю 2 любых двух соседних комбинаций циклического кода эквивалентного операции умножения многочлена соответствующего комбинации первого слагаемого на многочлен clip_image281[1], если приведение подобных членов осуществляется по модулю 2:

0 0 0 1 0 1

clip_image297

clip_image299 0 0 0 1 0 1

clip_image301

clip_image279[1]

0 0 1 0 1 0

clip_image281[2]

0 0 1 1 1 1

clip_image297[1]

clip_image305

clip_image299[1] 0 0 1 0 1 0

clip_image307

clip_image299[2] 0 0 1 1 1 1

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

Однако мало построить циклический код. Надо уметь выделить из него возможные ошибочные разряды, т. е. ввести некоторые опознаватели ошибок, которые выделяли бы ошибочный блок из всех других. Так, как циклические коды – блочные, то каждый блок должен иметь свой опознаватель. И тут решающую роль играют свойства образующего многочлена clip_image231[2]. Методика построения циклического кода такова, что образующий многочлен принимает участие в образовании каждой кодовой комбинации, поэтому любой многочлен циклического кода делится на образующий без остатка. Но без остатка делятся только те многочлены, которые принадлежат данному коду, т. е. образующий многочлен позволяет выбрать разрешенные комбинации из всех возможных. Если же при делении циклического кода на образующий многочлен будет получен остаток, то значит либо в коде произошла ошибка, либо это комбинация какого-то другого кода (запрещенная комбинация), что для декодирующего устройства не имеет принципиальной разницы. По остатку и обнаруживается наличие запрещенной комбинации, т. е. обнаруживается ошибка. Остатки от деления многочленов являются опознавателями ошибок циклического кодов.

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

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

1 0 0 0 0 0 0 0 0 0 0

1 0 1 1

1 0 1 1

1 1 1 1 1 + clip_image310

0 1 1 0 0

1 0 1 1

Остатки

1 1 1 0

0 1 1

1 0 1 1

1 1 0

1 0 1 0

1 1 1

1 0 1 1

1 0 1

1 0 0 0

0 0 1

1 0 1 1

0 1 0

1 1

1 0 0

0 1 1

1 1 0

и т. д.,

начиная с восьмого, остатки будут повторятся.

Остатки от деления используют для построения образующих матриц, которые, благодоря вой наглядности и удобству получения производных комбинаций, получили широкое распространение для построения циклических кодов. Построение образующей матицы сводится к составлению единичной транспонированной и дополнительной матрицы, элементы которой представляют собой остатки от деления единицы с нулями на образующий многочлен clip_image231[3]1. Напомним, что единичная транспонированная матрица представляет собой квадратную матрицу, все элементы которой – нули, кроме элементов, расположенных по диагонали справа на лево сверху вниз (в нетранспонированной матрице диагональ с единичными элементами расположена слева на права сверху вниз). Элементы дополнительной матрицы приписываются справа от единичной транспонированной матрицы.

Однако не все остатки от деления единицы с нулями на образующий многочлен могут быть использованы в качестве элементов дополнительной матрицы. Использоваться могут лишь те остатки вес которых clip_image312, где clip_image076[1] минимальное кодовое расстояние длина остатков должна быть не менее количества контрольных разрядов, а число остатков должно равняться числу информационных разрядов.

Строки образующие матрицы представляют собой первые комбинации искомого кода. Остальные комбинации кода получаются в результате суммирования по модулю 2 всевозможных сочетаний строк образующей матрицы (см. задачу 6.108)1.

Описанный выше метод построения образующих матриц не является единственным. Образующая матрица может быть построена в результате непосредственного умножения элементов единичной матрицы на образующий многочлен. Это часто бывает удобнее чем нахождение остатков от деления. Полученные коды ничем не отличаются от кодов, построенных по образующим матрицам, а которых дополнительная матрица состоит из остатков от деления единицы с нулями на образующий многочлен ( см. задачи 6.103; 6.108; 6.110).

Образующая матрица может быть построена таким путем циклического сдвига комбинации, полученной в результате умножения строки единичной матрицы ранга clip_image010[9]на образующий многочлен (см. задачу 6.126).

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

Для получения комбинаций циклического кода в этом случае достаточно произвести циклический сдвиг строки образующей матрицы и комбинации, являющейся ее зеркальным отображением (см. задача 6.112). При построении кодов с clip_image315 число комбинаций, получаемых суммированием по модулю 2 всевозможных сочетаний строк образующей матрицы, равно числу комбинаций, получаемых в результате циклического сдвига строки образующей матрицы и зеркальной ей комбинации (см. задачи 6.103; 6.112). Однако этот способ используется для получения кодов с малым числом информационных разрядов. Уже при clip_image317число комбинаций, получаемых в результате циклического сдвига, будет меньше, чем число комбинаций, получаемых в результате суммирования всевозможных сочетаний строк образующей матрицы (см., например, задачи 6.123 и 6.128).

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

clip_image319, (77)

где clip_image321число информационных разрядов кода2.

Число ненулевых комбинаций, получаемых в результате циклического сдвига любой строки образующей матрицы и зеркальной ей комбинации,

clip_image323, (78)

где n – длина кодовой комбинации.

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

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

Идея исправления ошибок базируется на том, что ошибочная комбинация после определенного числа циклических сдвигов «подгоняется»под остаток таким образом, что в сумме с остатком она дает исправленную комбинацию. Остаток при этом представляет собой не что иное, как разницу между искаженными и правильными символами, единицы в остатке стоят как раз на местах искаженных разрядов в подогнанной циклическими сдвигами комбинации. Подгоняют искаженную комбинацию до тех пор, пока число единиц в остатке не будет равно числу ошибок в коде. При этом, естественно, число единиц может быть либо равно числу ошибок s; исправляемых данным кодом (код исправляют 3 ошибки и в искаженной комбинации 3 ошибки), либо меньше s (код исправляет 3 ошибки, а в принятой комбинации – 1 ошибка).

Место ошибки в кодовой комбинации не имеет значения. Если clip_image327, то после определенного количества сдвигов все ошибки окажутся в зоне «разового» действия образующего многочлена, т. е. достаточно получить один остаток, вес которого clip_image329, и этого уже будет достаточно для исправления искажаемой комбинации. В смысле коды БЧХ (о них мы будем говорить ниже) могут исправлять пачки ошибок, лишь бы длина пачки не превышала s.

Подробно процесс исправления ошибок рассматривается ниже на примере построения конкретных кодов.

Построение и декодирование конкретных циклических кодов.

I. Коды исправляющие одиночную ошибку, clip_image078[2].

1. Расчет соотношения между контрольными и информационными символами кода производятся на основании выражений (59) - (69).

Если задано число информационных разрядов clip_image010[10], то число контрольных разрядов clip_image012[5] находим из выражения

clip_image333.

Общее число символов кода

clip_image018[1].

Если задана длина кода n, то число контрольных разрядов

clip_image336.

Соотношение числа контрольных и информационных символов для кодов с clip_image078[3] приведены в табл. 3 приложения 9.

2. Выбор образующего многочлена производится по таблицам неприводимых двоичных многочленов.

Образующий многочлен clip_image231[4] следует выбирать как можно более коротким, но степень его должна быть не меньше числа контрольных разрядов clip_image012[6], а число ненулевых членов – не меньше минимального кодового расстояния clip_image076[2].

Выбор параметров единичной транспонированной матрицы происходит из условия, что число столбцов (строк) матрицы определяется числом информационных разрядов, т. е. ранг единичной матрицы равен clip_image010[11].

3. Определение элементов дополнительной матрицы производится по остаткам от деления последней строки транспонированной матрицы (единицы с нулями) на образующий многочлен. Полученные остатки должны удовлетворять следующим требованиям:

а) число разрядов каждого остатка должно быть равно числу контрольных символов clip_image012[7], следовательно, число разрядов дополнительной матрицы должно быть равно степени образующего многочлена;

б) число остатков должно быть не меньше числа строк единичной транспонированной матрицы, т. е. должно быть равно числу информационных разрядов clip_image010[12];

в) число единиц каждого остатка, т. е . его вес должно быть не менее величены clip_image341, где clip_image182[1] минимальное кодовое расстояние, не меньше числа обнаруженных ошибок;

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

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

5. Комбинациями искомого кода являются строки образующий матрицы и все возможные суммы по модулю 2 различных сочетаний строк образующей матрицы (см. задачу 6.108).

Как видно из решения задач 6.103 и 6.108, коды, получены при использовании неприводимых многочленов clip_image344 и clip_image235[1], подобны друг другу и обладают равноценными корректирующими способностями. Сами же многочлены 1101 и 1011 называют обратными, или двойственными, многочленам. Если данный многочлен неприводимый, то неприводимый будет и двойственный ему многочлен.

6. Обнаружение и исправление ошибок производится по остатку от деления принятой комбинации clip_image347 на образующий многочлен clip_image231[5]. Если принятая комбинация делится на образующий многочлен без остатка, то код принят без ошибочно. Остаток от деления свидетельствует о наличии ошибки, но не указывает, какой именно. Для того чтобы найти ошибочный разряд и исправить его в циклических кодах, осуществляют следующие операции:

а) принятую комбинацию делят на образующий многочлен;

б) подсчитывают количество единиц в остатке (вес остатка). Если clip_image329[1], где s – допустимое число исправляемых данным кодом ошибок, то принятую комбинацию складывают по модулю 2 с полученным остатком. Сумма даст исправленную комбинацию. Если clip_image349, то

в) производят циклический сдвиг принятой комбинация clip_image347[1] влево на один разряд. Комбинацию, полученную в результате этого повторного деления clip_image329[2], то делимое суммируют с остатком, затем

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

д) повторяют операцию пункта в) до тех пор, пока не будет clip_image329[3]. В этом случае комбинацию, полученную в результате последнего циклического сдвига, суммируют с остатка от деления этой комбинации на образующий многочлен, а затем

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

комбинации относительно принятой комбинации. В результате получим исправленную комбинацию (см. задачи 6.113 – 6.116)1.

II. Коды обнаруживающие трехкратные ошибки. clip_image351.

1. Выбор числа корректирующих разрядов производится из соотношения

clip_image353,

или

clip_image355.

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

clip_image357,

Поэтому степень образующего многочлена не может быть меньше четырех; многочлен третьей степени, имеющий число ненулевых членов больше или равное трем, позволяет обнаруживать все двойные ошибки (см. задачи 6.121; 6.122), многочлен первой степени (х+1) обнаруживает любое количество нечетных ошибок (см. задачи 6.119; 6.120), следовательно, многочлен четвертой степени, получаемый в результате умножения этих многочленов, обладает их корректирующими свойствами: может обнаруживать две ошибки а также одну и три, т. е. все трехкратные ошибки (см. задачу 6.117).

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

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

5. Обнаружение ошибок производится по остаткам от деления принятой комбинации clip_image359на образующий многочлен clip_image361. Если остатка нет, то контрольные разряды отбрасываются и информационная часть кода используется по назначению. Если в результате деления получается остаток, то комбинация бракуется. Заметим, что такие коды могут обнаруживать 75% любого количества ошибок, так как кроме двойной ошибки обнаруживаются все нечетные ошибки, но гарантированное количество ошибок, которое код никогда не пропустит, равно 3.П р и м е р. Исходная кодовая комбинация – 0101111000, принятая – 0001011001 (т. е. произошел тройной сбой). Показать процесс обнаружения ошибки если известно, что комбинации кода были образованы при помощи многочлена 101111.

Р е ш е н и е.

0 0 0 1 0 1 1 0 0 1

1 0 1 1 1 1

1 0 1 1 1 1

0 0 0 0 1 1 1

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

III. Циклические коды, исправляющие две и большее количество ошибок, clip_image363.

Методика построения циклических кодов с clip_image363[1] отличается от методики построения циклических кодов clip_image365только в выборе образующего многочлена. В литературе эти коды известны как коды БЧХ (первые буквы фамилий Боуз, Чоудхури, Хоквинхем – авторов методики построения циклических кодов с clip_image363[2]).

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

Для исправления числа ошибок clip_image367 еще недостаточно условие, что бы между комбинациями кода минимальное кодовое расстояние clip_image369, необходимо также чтобы длина кода n удовлетворяла условию

clip_image371, (79)

при этом n всегда будет нечетным числом. Величина h определяет выбор числа контрольных символов clip_image373 и связанна с clip_image373[1]и s следующим соотношением:

clip_image375. (80)

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

clip_image377, (81)

где С является одним из сомножителей на которое разлагается число n.

Соотношение между n, С и h могут быть сведены в следующую таблицу:

п/п

h

clip_image371[1]

C

1

3

7

1

2

4

15

5; 3

3

5

31

1

4

6

63

7; 3; 3

5

7

127

1

6

8

255

17; 5; 3

7

9

511

7; 3; 7

8

10

1023

31; 11; 3

9

11

2047

89; 23

10

12

4095

3; 3; 5; 7; 13

Например, при h=10 длина кодовой комбинации может быть равна и 1023 (C=1) и 341 (С=3), и 33 (С=31), и 31 (С=33), понятно, что n не может быть меньшеclip_image380. Величина С влияет выбор порядковых номеров минимальных многочленов, так как индексы первоначально выбранных многочленов умножаются С. сказанное выше хорошо усваивается на конкретном примере (см. задачу 6.132).

Построение образующего многочлена clip_image361[1] производится при помощи так называемых минимальных многочленов clip_image383, которые являются простыми неприводимыми многочленами (см. табл. 2, приложение 9). Образующий многочлен представляет собой произведение нечетных минимальных многочленов и является их наименьшим общим кратным (НОК). Максимальный порядок clip_image385определяет номер последнего из выбираемых табличных минимальных многочленов

clip_image387, (82)

Порядок многочлена используется при определении числа сомножителей clip_image361[2]. Например, если s=6, то clip_image389. Так как для построения clip_image361[3] используются только нечетные многочлены, то ими будут: clip_image391; clip_image393; clip_image395; clip_image397;clip_image399; clip_image401, старший из них имеет порядок clip_image385[1]. Как видим число сомножителей clip_image361[4] равно 6, т. е. числу исправляемых ошибок. Таким образом, число минимальных многочленов, участвующих в построении образующего многочлена,

clip_image403 , (83)

а старшая степень

clip_image405 (84)

(l указывает колонку в таблице минимальных многочленов, из которой обычно выбирается многочлен для построения clip_image361[5]).

Степень образующего многочлена полученного в результате перемножения выбранных минимальных многочленов,

clip_image407. (85)

В общем виде

clip_image409, (86)

Декодирование кодов БЧХ производится по той же методике, что и декодирование циклических кодов с clip_image365[1]. Однако в связи с тем, что практически все коды БЧХ представлены комбинациями с nclip_image41215, могут возникнуть весьма сложные варианты, когда для обнаружения и исправления ошибок необходимо производить большое число циклических сдвигов. В этом случае для облегчения можно комбинацию полученную после k-кратного сдвига и суммирования с остатком, сдвигать не вправо, а влево на n – k циклических сдвигов. Это целесообразно делать только при clip_image414 (см. задачу 6.134).

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