Опубликован: 11.04.2007 | Доступ: свободный | Студентов: 5904 / 2148 | Оценка: 4.37 / 4.24 | Длительность: 11:19:00
Лекция 10:

Групповые коды

< Лекция 9 || Лекция 10: 123 || Лекция 11 >

Полиномиальные коды

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

Пусть a=a_0\ldots a_{m-1} - двоичное сообщение. Тогда сопоставим ему многочлен a(x)=a_0+a_1x+\cdots+a_{m-1}x^{m-1}. Все вычисления происходят в поле классов вычетов по модулю 2, т. е. от результата любой арифметической операции берется остаток от его деления на 2.

Например, последовательности 10011 при m=5 соответствует многочлен 1+x^3+x^4.

Зафиксируем некоторый многочлен степени k,

g(x)=g_0+g_1x+\cdots+g_kx^k,\quad g_0\ne0,\quad
g_k\ne0.
Полиномиальный код с кодирующим многочленом g(x) кодирует слово сообщения a(x) многочленом b(x)=a(x)g(x)=b_0+b_1x+\cdots+b_{n-1}x^{n-1} или кодовым словом из коэффициентов этого многочлена b=b_0\ldots b_{n-1}. Условия g_0\ne0 и g_k\ne0 необходимы, потому что в противном случае b_0 и b_{n-1} не будут нести никакой информации, т.к. они всегда будут нулями.

Пример. Рассмотрим кодирующий многочлен g(x)=1+x^2+x^3. Сообщение 01011, отвечающее многочлену a(x)=x+x^3+x^4, будет закодировано коэффициентами многочлена b(x)=g(x)a(x)=x+x^5+x^7, т.е. b=01000101.

Полиномиальный код с кодирующим многочленом g(x) степени k является матричным кодом с кодирующей матрицей G размерности m\times(m+k):

G=\left\lbrack\matrix{
g_0   & g_1  & g_2  & \cdots & g_k     & 0       & 0
 & \cdots & 0\cr
0     & g_0  & g_1  & \cdots & g_{k-1} & g_k     & 0
 & \cdots & 0\cr
0     & 0    & g_0  & \cdots & g_{k-2} & g_{k-1} & g_k
 & \cdots & 0\cr
\cdots&\cdots&\cdots& \cdots &\cdots   & \cdots  &\cdots& \cdots &\cdots\cr
0     &0     &0     & \cdots &\cdots   & \cdots  &\cdots& \cdots
&g_k\cr}
\right\rbrack.
Т е. ненулевые элементы в j -й строке - это последовательность коэффициентов кодирующего многочлена, расположенных с j -го по (j+k) -й столбцах.

Например, (3,6) -код с кодирующим многочленом 1+x+x^3 отвечает матрице

G=\left\lbrack\matrix{1&1&0&1&0&0\cr
                        0&1&1&0&1&0\cr
                        0&0&1&1&0&1\cr}\right\rbrack
или отображению: 000\rightarrow000000 ; 001\rightarrow001101 ; 010\rightarrow011010 ; 011\rightarrow010111 ; 100\rightarrow110100 ; 101\rightarrow111001 ; 110\rightarrow101110 ; 111\rightarrow100011.

Полиномиальные коды являются групповыми.

Это следует из того, что коды, получаемые матричным кодированием, - групповые.

Рассмотрим (m,n) -код с кодирующим многочленом g(x). Строка ошибок e=e_0\ldots e_{n-1} останется необнаруженной в том и только в том случае, если соответствующий ей многочлен e(x)=e_0+e_1x+\cdots+e_{n-1}x^{n-1} делится на g(x).

Действительно, a(x)g(x)+e(x) делится на g(x) тогда и только тогда, когда e(x) делится на g(x). Поэтому любая ошибка, многочлен которой не делится на g(x), будет обнаружена и, соответственно, любая ошибка, многочлен которой делится на g(x), не может быть обнаружена.

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

Коды Хэмминга можно строить как полиномиальные, например, кодирующий многочлен x^3+x^2+1 определяет совершенный (4,7) -код, отличный от рассмотренного ранее.

Вообще же, если кодирующий многочлен g(x), порождающий соответствующий (m,n) -код, не является делителем ни одного из многочленов вида x^j+1 при j<n, то минимальное расстояние между кодовыми словами порожденного им кода не меньше 3.

Пусть d - минимальное расстояние между кодовыми словами, оно равно минимуму среди весов ненулевых кодовых слов. Предположим d=2. Тогда существует a(x) такой, что a(x)g(x)=b(x) и степень b(x) не больше n. Вес b равен 2, поэтому b(x)=x^m+x^l и l<m<n. Следовательно, b(x)=x^l(x^{m-l}+1), что означает, что x^{m-l}+1 должен делиться на g(x), а это невозможно по условию. Если предположить, что d=1, то это приведет к утверждению о том, что x^m должен делиться на g(x), что тоже противоречит условию. Итак, d\ge3.

Кодирующий многочлен x^{11}+x^9+x^7+x^6+x^5+x+1 определяет совершенный (12,23) -код Голея (Golay) с минимальным расстоянием между кодовыми словами 7.

В 1971 году финскими и советскими математиками было доказано320 , что кроме кодов Хэмминга и Голея других совершенных кодов нет.

Наиболее интересными среди полиномиальных кодов являются циклические коды, в которых вместе с любым кодовым словом вида b_0\ldots b_{n-2}b_{n-1} есть кодовое слово b_{n-1}b_0\ldots b_{n-2}.

Упражнение 43 По кодирующему многочлену x^7+x^5+x+1 построить полиномиальные коды для двоичных сообщений 0100, 10001101, 11110.

Упражнение 44 Принадлежат ли коду Голея кодовые слова 10000101011111010011111 и 11000111011110010011111?

< Лекция 9 || Лекция 10: 123 || Лекция 11 >