Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Корректирующие коды.doc
Скачиваний:
68
Добавлен:
18.04.2015
Размер:
208.9 Кб
Скачать

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

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

A(X) = 1×x5 + 0×x4 + 1×x3 + 1×x2 + 0×x1 + 1 = x5 + x3 + x2 + 1

Циклические коды относятся к блочным (m, n)кодам, в которых контрольныеkи информационныеnразряды расположены на строго определенных местах. Общее количество разрядов:m = n + k.

Рассмотрим алгебру циклических кодов. Допустим, необходимо перемножить три многочлена (x3+x2+1)·(x3+x+1)·(x+1). Действия производятся также как в обычной алгебре, только сложение проводится по модулю2. Операция умножения может быть произведена или в виде многочленов или в виде двоичных кодов.

или

Результат x7+1

При делении операция вычитания заменяется операцией сложения по модулю 2. Например, необходимо разделить многочлен седьмой степени на многочлен третей степени(x7+x5+x4+x+1) / ( x3+x2+1). Операция деления может быть произведена или в виде многочленов или в виде двоичных кодов.

Циклический код получают следующим образом: заданный полином h(х)сначала умножается на одночленхm-n, затем делится на образующий полиномg(х). В результате получим

или

F(x) = Q(x) · g(x) = xm-nh(x) + R(X)

Таким образом, кодовую комбинацию циклического кода можно построить умножением кодовой комбинации h(х), являющейся заданной, на одночленхm-nдобавлением к этому произведению остатка от деленияR(х). При декодировании, принятую кодовую комбинацию необходимо разделить наg(x). Наличие ненулевого остатка указывает на ошибку в одном из разрядов.

Образующий полином g(х)является сомножителем при разложении двучленахm+1. Сомножителями разложения двучлена являются неприводимые полиномы.

Образующий полином выбирают следующим образом. По заданной кодовой комбинации определяют число контрольных символов из соотношения k = log2(т + 1)или по эмпирической формуле

k = log2((n + 1) + log2(n + 1))

Соотношение значений m, n, kможно определить по таблице.

Таблица 1 -- Зависимость между m, n и k.

m

3

  5

6

 7

9...15

  17...31

33...63

65...127

n

1

2

3

4

5...11

12...26

27...57

28...120

k

2

3

3

3

4

5

6

7

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

Таблица 2 -- Образующие полиномы g(x)циклических кодов

Максимальная

степень

Образующие полиномы g(x)

3

4

5

6

Пример.

Требуется преобразовать кодовую комбинацию 1101 в кодовую комбинацию циклического кода. Полиномиальное представление исходной кодовой комбинации имеет видh(х) = х3 + х2 + 1. По эмпирической формуле определяем число контрольных символовk = 3. Из таблицы 2 выбираем полиномg(х) = х3 + х + 1, т.е.1011. (В случае, когдаk = 3образующие полиномы имеют одинаковую длину, поэтому можно выбрать любой. Разница будет заключаться в полученных таблицах соответствия).

Решение:

Умножим h(х) на хk.

h(xxk = (x3 + x2 + 1)·x3 = x6 + x5 + x3 ® 11010000

Разделим полученное произведение на образующий полином g(х)

При делении необходимо учитывать, что вычитание производится по модулю 2. Остаток от деления (в данном случае 001) суммируем с h(х)·хk. В результате получим кодовую комбинацию циклического кода:

F(x) = (x3 + x2 + 1)·(x3 + x + 1) = (x3 + x2 + 1)·x3 + 1 ® 1101001 

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

Исходная кодовая комбинация является одной из кодовых комбинаций четырехразрядного кода. Код такой разрядности можно использовать для кодирования M = 16сообщений. Это значит, что если необходимо подвергнуть преобразованию в циклический код все кодовые комбинации соответствующие сообщениям, то каждую из них необходимо подвергнуть тем же преобразованиям, каким подвергалась кодовая комбинацияh(x) = 1101. Однако, выполнять дополнительные15расчетов (а в общем случае2m-n-1расчет) нет необходимости. Это можно сделать проще, путем составления образующей (производящей) матрицы.

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

Матрица контрольных разрядов получается из остатков от деления единицы с нулями на образующий полином g(x). Рассмотрим составление производящей матрицы для кода с четырьмя информационными разрядами и тремя контрольными.

1

0

0

0

0

0

0

1

0

1

1

0

1

1

0

1-й остаток

011

1

1

0

0

2-й остаток

110

1

0

1

1

1

1

1

0

3-й остаток

111

1

0

1

1

1

0

1

4-й остаток

101

В результате производящая матрица будет иметь следующий вид:

Строки матрицы это 4комбинации циклического кода, т.е. столько, сколько информационных разрядов, а так как в 4-разрядном двоичном коде всегоM = 24 = 16кодовых комбинаций, то остальные11ненулевых комбинаций находятся суммированием по модулю2всевозможных сочетаний строк образующей матрицы, например

134 = 1101001;24 = 1010011 и т.д.

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

Для обнаружения и исправления ошибок принятая кодовая комбинация делится на образующий полином g(х). Если остатокR(х) = 0, значит, комбинация принята без ошибок. Наличие остатка свидетельствует о том, что комбинация принята искаженной. Перед использованием кода необходимо составить таблицу кодов-опознавателей местоположения ошибок. Для этого в любую кодовую комбинацию циклического кода последовательно вводятся ошибки в каждый из разрядов. Искажённые кодовые комбинации делятся на образующий полиномg(х). Полученные остатки от деления являются кодами-опознавателями местоположения ошибок.

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

Таблица 3 -- Коды-опознаватели местоположения ошибок циклического кода (7,4)

Ошибочный символ

Код опознавателя ошибки

при

110

011

111

101

100

010

001

Код опознавателя ошибки

при

101

111

110

011

100

010

001

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

Пример

Пусть принята кодовая комбинация 1100001. Необходимо проверить ее правильность. При этом известно, что при составлении кода использовался производящий полином . А также известна таблица кодов-опознавателей.

1100001

1011

1110

1011

1010

1011

011 -ошибка в четвертом информационном разряде.

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

1101011

1011

1100

1011

1111

1011

1001

1011

010 -ошибка во 2-м контрольном разряде.

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