Циклические коды
Циклическими кодаминазывают специальную группу кодов, для построения которых могут быть использованы циклические свойства квадратных матриц, а также коды, которые описываются неприводимыми, образующими (порождающими) многочленами (полиномами). Например, для кодовой комбинации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(x)·xk = (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-м контрольном разряде.
Если ошибка обнаруживается в контрольном разряде, то исправлять ее не следует, поскольку контрольные разряды не содержат для получателя полезной информации.
