Циклические коды, основные свойства и способы построения
Циклические коды получили довольно широкое применение благодаря их эффективности при обнаружении и исправлении ошибок. Схемы кодирующих и декодирующих устройств для этих кодов достаточно просты и строятся на основе регистров сдвига.
Название кодов произошло от их свойства, заключающегося в том, что каждая кодовая комбинация может быть получена путем циклической перестановки символов комбинации, принадлежащей к этому же коду. Это значит, что если, например, комбинация a0 a1 a2 ...am-1 является разрешенной комбинацией циклического кода, то комбинация am-1 a0 a1 a2 ...am-2 также принадлежит этому коду.
Циклические коды удобно рассматривать, представляя комбинацию двоичного кода в виде полинома от фиктивной переменной х:
![]()
где ai – цифры данной системы счисления (в двоичной системе 0 и 1). Так, например, двоичное семиразрядное число 1010101 может быть записано в виде полинома
![]()
Наибольшая степень х в слагаемой с ненулевым коэффициентом называется степенью полинома.
Представление кодовых комбинаций в форме (2.16) позволяет свести действия над комбинациями к действию над многочленами. При этом сложение двоичных многочленов сводится к сложению по модулю два коэффициентов при равных степенях переменной х; умножение производится по обычному правилу перемножения степенных функций, однако полученные при этом коэффициенты при равных степенях переменной х складываются по модулю два; деление осуществляется по правилам деления степенных функций, при этом операции вычитания заменяются операциями суммирования по модулю два.
Представление кодовых комбинаций в формах (2.16) и (2.17) удобно еще и тем, что упомянутая ранее циклическая перестановка есть результат простого умножения данного полинома на х. Действительно, если одна из кодовых комбинаций выражается полиномом
![]()
то новая комбинация за счет циклического сдвига будет
Однако в последнем члене необходимо заменить хm на 1. Следовательно, новая комбинация будет
![]()
Например, циклический сдвиг кодовой комбинации 1010101 может быть получен путем умножения полинома (2.17) на х
Заменив х7 на 1, получим полином
![]()
соответствующий кодовой комбинации 0101011.
Согласно определению циклического кода для построения производящей матрицы Mm,k достаточно выбрать только одну исходную m-разрядную комбинацию V1(х). Циклическим сдвигом можно получить (m – 1) различных комбинаций, из которых любые k комбинаций могут быть взяты в качестве исходных. Суммируя строки производящей матрицы во всех возможных комбинациях, можно получить остальные кодовые комбинации. Можно показать, что кодовые комбинации, получаемые из некоторой комбинации V1(х) циклическим сдвигом, удовлетворяют условиям, предъявляемым к совокупности исходных комбинаций.
Циклический сдвиг комбинации с единицей в старшем m-м разряде равносилен умножению соответствующего многочлена на х с одновременным вычитанием из результата многочлена (хm – 1) или (хm + 1), так как операции осуществляются по модулю два. Следовательно, если в качестве исходного взять некоторый полином Р(х), то процесс получения базовых полиномов можно представить в следующем виде:

где C2, С3, ..., Сm – коэффициенты, принимающие значение 1 при
Р(х) × х i ³ (хm – 1) и значение 0 при Р(х) × х i < (хm – 1).
При таком способе построения базовых полиномов полином Р(х) называют образующим.
Если принять условие, что полином Р(х) является делителем двучлена
(хm + 1), то базовые комбинации, а вместе с ними и все разрешенные комбинации кода, приобретают свойство делимости на Р(х). Из этого следует, что принадлежность кодовой комбинации к группе разрешенных можно легко проверить делением ее полинома на образующий полином Р(х). Если остаток от деления равен нулю, то комбинация является разрешенной.
Это свойство циклического кода используется для обнаружения или исправления ошибок. Действительно, если под воздействием помех разрешенная кодовая комбинация трансформируется в запрещенную, то ошибка может быть обнаружена по наличию остатка при делении комбинации на образующий полином Р (х), т.е. образующий полином Р(х) должен быть делителем двучлена (хm + 1). Выбор Р(х) однозначно определяет циклический код и его корректирующие свойства.
Циклический (m,k)-код может быть получен путем умножения простого k-значного кода, выраженного в виде полинома степени (k – 1), на некоторый образующий полином Р(х) степени (m – k).
Возможна и другая процедура получения циклического кода. Для этого кодовая комбинация простого k-значного кода G(х) умножается на одночлен хm-k, а затем делится на образующий полином Р(х) степени (m – k). В результате умножения G(х) на хm-k степень каждого одночлена, входящего в G(х), повысится на (m – k). При делении произведения хm-kG(х) на образующий полином Р(х) получится частное Q(х) такой же степени, как и G(х).
Результат умножения и деления можно представить в следующем виде:
хm-kG(х) / Р(х) = Q(х) + R(x) / P(х), (2.19)
где R(х) – остаток от деления хm-kG(х) на Р(х).
Так как частное Q(х) имеет такую же степень, как и кодовая комбинация G(х), то Q(х) также является комбинацией простого k-значного кода.
Умножая обе части равенства (2.19) на Р(х) и произведя перестановки, получим
F(х) = Q(х) Р(х) = хm-kG(х) + R(х). (2.20)
В правой части (2.20) знак минус перед R(х) заменен знаком плюс, так как вычитание по модулю два сводится к сложению.
Таким образом, кодовая комбинация циклического (m,k)-кода может быть получена двумя способами:
1) путем умножения простой кодовой комбинации степени (k – 1) на одночлен хm-k и добавления к этому произведению остатка, полученного от деления полученного произведения на образующий полином Р(х) степени
(m – k);
2) путем умножения простой кодовой комбинации степени (k – 1) на образующий полином Р(х) степени (m – k).
При первом способе кодирования первые k символов полученной кодовой комбинации совпадают с соответствующими символами исходной простой кодовой комбинации.
При втором способе в полученной кодовой комбинации информационные символы не всегда совпадают с символами исходной простой комбинации. Такой способ легко реализуем, но вследствие того, что в полученных кодовых комбинациях не содержатся информационные символы в явном виде, усложняется процесс декодирования.
В связи с вышеизложенным на практике обычно используется первый способ получения циклического кода.