Описание циклических кодов и их построение удобно проводить с помощью многочленов (или полиномов). Запись комбинации в виде полинома понадобилась для того, чтобы отобразить формализованным способом операцию циклического сдвига исходной кодовой комбинации. Так, n-элементную кодовую комбинацию можно описать полиномом (n − 1) степени, в виде:
An−1(x) = an−1 xn−1 + an−2 xn−2 + … + a1 x + a0,
где ai = {0, 1}, причем ai = 0 соответствуют нулевым элементам комбинации, ai = 1 — ненулевым.
Запишем полиномы для конкретных 4-элементных комбинаций:
1101 ⇔ A1(x) = x3 + x2 + 1
1010 ⇔ A2(x) = x3 + x
Операции сложения и вычитания выполняются по модулю 2. Они являются эквивалентными и ассоциативными:
· G1(x) + G2(x) ⇒ G3(x)
· G1(x) − G2(x) ⇒ G3(x)
· G2(x) + G1(x) ⇒ G3(x)
Примеры
· G1(x) = x5 + x3 + x
· G2(x) = x4 + x3 + 1
· G3(x) = G1(x) ⊕ G2(x) = x5 + x4 + x + 1
Операция деления является обычным делением многочленов, только вместо вычитания используется сложение по модулю 2:
· G1(x) = x6 + x4 + x3
· G2(x) = x3 + x2 + 1
x6 + x4 + x3 | x3 + x2 + 1 +------------x6 + x5 + x3 | x3 + x2------------ x5 + x4 x5 + x4 + x2 ------------ x2Циклический сдвиг кодовой комбинации
|
|
Циклический сдвиг кодовой комбинации — перемещение ее элементов справа налево без нарушения порядка их следования, так что крайний левый элемент занимает место крайнего правого.
Основные свойства и само название циклических кодов связаны с тем, что все разрешенные комбинации бит в передаваемом сообщении (кодовые слова) могут быть получены путем операции циклического сдвига некоторого исходного кодового слова.
Допустим, задана исходная кодовая комбинация и соответствующий ей полином:
a(x) = anxn−1 + an−1xn−2 + … + a2x + a1
Умножим a(x) на x:
a(x) · x = anxn + an−1xn−1 + … + a2x2 + a1x
Так как максимальная степень x в кодовой комбинации длиной n не превышает (n − 1), то из правой части полученного выражения для получения исходного полинома необходимо вычесть an(xn − 1). Вычитание an(xn − 1) называется взятием остатка по модулю (xn − 1).
Сдвиг исходной комбинации на i тактов можно представить следующим образом: a(x) · xi − an(xn − 1), то есть умножением a(x) на xi и взятием остатка по модулю (xn − 1). Взятие остатка необходимо при получении многочлена степени, большей или равной n.