
Циклические коды
Код называется циклическим, если из того, что кодовое слово
U={ un-1, … , u1, u0}Mразр
принадлежит множеству разрешенных слов следует, что слово
={
un-2,
… , u0,
un-1,}Mразр,
,
полученное сдвигом cлова
U
влево по кругу тоже принадлежит множеству
разрешенных слов.
Циклический код является частным случаем полиномиальных кодов, в которых кодовое слово U={u0, u1, … ,un-1} представляется в виде полинома от фиктивной переменной x с коэффициентами, равными числам кода. Если код построен над полем GF(2)={0,1}, то коэффициенты многочлена - числа 0 или 1:
.
Замечание. Степени фиктивной переменной x используются только для обозначения места соответствующей компоненты кодового вектора в регистре сдвига и никакой иной смысловой нагрузки не несут.
Например для кодового слова U=[1010101] значности n=7 полином имеет вид
.
Над полиномами определены все арифметические операции по обычным правилам, в том числе и умножение в столбик и деление углом. При этом сложение и вычитание коэффициентов выполняется как суммирование по модулю два. Если степень результата превышает (n-1), то результат приводится по модулю полинома (хn+1).
Замечание. Результатом приведения одного полинома по модулю другого полинома является полином, являющийся остатком от деления первого на второй (модуль).
Циклическая перестановка соответствует умножению u(x) на x. В нашем случае:
,
п
x7+
x5+
x3+
x
x7+1 x7+1
. x5+
x3+
x+1=u`(x)
u` (x) =x5+ x3+ x+1 и u`=[0101011],
что соответствует сдвигу битов кодового слова влево по кругу на один разряд.
Таким образом, умножение на любой полином соответствует определенной последовательности циклических сдвигов кода и да дает полином, также соответствующий разрешенному кодовому слову. То есть множество разрешенных слов образует группу и циклический код является групповым.
Если не приводить полином, то при умножении полинома степени k на полином степени m степени полиномов складываются, и полином-результат имеет степень n=k+m. Исходное кодовое слово длины k при этом приобретает m новых разрядов, которые могут играть роль проверочных символов.
Циклический код это также блочный (n, k)-код, с длиной блока n, содержащий k информационных символов и m = n – k проверочных символов.
Операция кодирования для циклического кода состоит в умножении любого полинома p(x) степени k-1, соответствующего информационному подблоку на один и тот же полином g(x) степени (n-k), называемый образующим или порождающим или кодирующим полиномом (многочленом).
При этом число разрешенных кодовых слов остается прежним 2k, а общее число возможных кодовых слов становится равным 2n.
При декодировании выполняется деление на тот же образующий полином. При этом разрешенные кодовые слова делятся без остатка, а появление ненулевого остатка – это признак ошибки.
Ненулевой
остаток от деления s(x)
называется синдромным
многочленом.
Пусть вместо кодового слова U
получено
слово
,
которому соответствует многочлен
.
При этом вектор ошибки
e,
содержащий единицы в ошибочных позициях
может быть получен как e=
U
.
Синдромный многочлен, определяемый как остаток от деления на порождающий многочлен g(x) зависит только от вектора ошибок:
,
так как
.
Этот факт используется при построении таблицы синдромов, применяемой при декодировании. Для всех возможных значений вектора ошибки e(x) вычисляются синдромы s(x) и записываются в таблицу. В процессе декодирования по синдрому s(x) находится соответствующий вектор ошибки e(x) и восстанавливается переданное слово как
u(x)
=+ e(x).
Ошибка останется необнаруженной в том и только в том случае, если многочлен, соответствующий вектору ошибки делится на g(x) без остатка, то есть если вектор ошибки совпадет с разрешенным кодовым словом.
Таким образом, процесс декодирования циклических кодов (как и всех линейных блочных кодов) можно разбить на три этапа:
Вычисление синдрома
Определение ошибочных компонент принятого слова (вектора ошибки)
Исправление ошибки или выдача сообщения о наличии неисправимой ошибки