Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

pri_cod2

.pdf
Скачиваний:
6
Добавлен:
27.05.2015
Размер:
585.25 Кб
Скачать

Пусть u(x) 2 M(p; n). Предложение 3 позволяет выяснить является ли u(x) кодовым многочленом. Однако удобнее использовать следующий критерий:

Предложение 12 Пусть u(x) 2 M(p; n). Тогда u(x) 2 C(x) тогда и только тогда, когда верно сравнение

u(x)h(x) ´ 0 (mod p; xn ¡ 1):

Доказательство. Пусть u(x) 2 C(x). Тогда найдется многочлен '(x), для которого выполнено сравнение (3). Умножая обе части этого сравнения на h(x), получим

u(x)h(x) ´ (g(x)'(x)) h(x) = (g(x)h(x)) '(x) ´ ´ (xn ¡ 1) ¢ '(x) ´ 0 ¢ '(x) ´ 0 (mod p; xn ¡ 1):

Пусть теперь u(x)h(x) ´ 0 (mod p; xn ¡ 1). Тогда найдется многочлен Ã(x) с коэффициентами из Zp, для которого u(x)h(x) ´ (xn ¡ 1) ¢ Ã(x) (mod p). Так как xn ¡ 1 ´ g(x)h(x) (mod p), после сокращения на h(x) получаем u(x) ´ g(x) ¢ Ã(x) (mod p), откуда u(x) 2 C(x).

Пример 5. Пусть p = 2, n = 3, g(x) = x + 1 и h(x) = x2 + x + 1. Тогда g(x)h(x) = x3 + 2x2 + 2x + 1 ´ x3 ¡ 1 (mod 2). Поэтому g(x) и h(x)

можно принять соответственно за порождающий и проверочный многочлен циклического кода, который обозначим C(x). Пусть u(x) 2 C(x). Тогда u(x) можно записать в виде u(x) = ax2 + bx + c, где a; b; c 2 Z2 = f0; 1g. По предложению 5

u(x) 2 C(x) () (ax2 + bx + c)(x2 + x + 1) ´ 0(mod 2; x3 ¡ 1):

Раскрывая скобки и заменяя x3 на 1 и x4 на x, получим:

u(x) 2 C(x) () a + b + c ´ 0 (mod 2):

Теперь легко заключить, что C(x) = f0; x + 1; x2 + x; x2 + 1g. В векторном представлении C = f000; 011; 110; 101g.

Отметим, что справедливо

51

Предложение 13 Если вместе с каждым кодовым словом линейный код содержит слово, полученное циклическим сдвигом, то код циклический.

3.6Кодирование и декодирование

Пусть задан циклический код C(x), построенный по простому числу p, целому числу n ¸ 2 и многочленам g(x) и h(x), удовлетворяющих сравнению (2). Тогда n является длиной кодовых слов, а степень r = deg g(x) порождающего многочлена g(x) числом информационных разрядов в кодовом слове. Пусть кодируемое сообщение является последовательностью, составленной из элементов поля Zp = f0; 1; : : : ; p ¡1g. Эту последовательность разбивают (слева направо) на блоки длины k. Последний блок может быть неполным (и в этом случае его дополняют нулями до полного блока).

Пусть a = (a0; a1; : : : ; a1) очередной блок длины k кодируемого сообщения. Этому блоку сопоставляют многочен a(x) = a0x1 + a1x2+ + : : : + a2x + a1. Далее возможны два основных способа построения кодового многочлена u(x), соответствующего блоку a.

Способ 1. u(x) вычисляют по формуле

u(x) = a(x) ¢ g(x) (mod p):

(4)

Способ 2. u(x) вычисляют по формуле

u(x) = a(x)xr ¡ r(x);

(5)

где r(x) остаток при делении многочлена a(x)xr на g(x) (действия с коэффициентами производят по модулю p). При втором способе кодирования первые k коэффициентов многочлена u(x) информационные, остальные r проверочные. При первом же способе любой разряд является отчасти информационным и отчасти проверочным (в отношении k : r).

Коэффициенты многочлена u(x) и передают по каналу связи. Если при передаче не было ошибок, то a(x) можно найти по многочлену u(x) следующим образом:

52

ug((xx)).

При первом способе кодирования a(x) =

При втором способе кодирования коэффициенты многочлена a(x)это первые k коэффициентов многочлена u(x).

Пример 6. Пусть p = 2, g(x) = x3 + x + 1 и h(x) = x4 + x2 + x + 1. Из равенства g(x)h(x) = x7 +2x5 +2x4 +2x3 +2x2 +2x+1 следует g(x)h(x) ´

´ x7 ¡1 (mod 2), поэтому g(x) можно принять за порождающий многочлен циклического кода, а h(x) за его проверочный многочлен. Число информационных символов k = deg h(x) = 4, число проверочных символов r = deg g(x) = 3, длина кодовых слов n = k + r = 7.

Пусть C(x) соответствующий (бинарный) циклический код и заданы сообщения a1 = (0; 0; 0; 0), a2 = (0; 0; 0; 1) и a2 = (1; 0; 1; 0). Тогда при первом способе кодирования (по формуле (4)) этим сообщениям будут поставлены в соответствие слова 000 0000, 000 1011 и 100 1110, а при втором (по формуле (5)) соответственно слова 000 0000, 000 1011 и 101 0011 (Проверьте это!).

3.7Поиск и исправление ошибок

Пусть по каналу связи передавался многочлен u(x), а на выходе канала получен многочлен v(x) = u(x) + e(x), где e(x) многочлен ошибок.

Для поиска e(x) вычисляют синдром w(x) = h(x)v(x) (mod p; xn ¡ 1) многочлена v(x). Так как u(x) = g(x) '(x) для некоторого многочлена '(x) и g(x) h(x) = xn ¡ 1, получаем

w(x) = h(x)(u(x) + e(x)) = h(x)u(x) + h(x)e(x) = = (xn ¡ 1)'(x) + h(x)e(x) = h(x)e(x) (mod p; xn ¡ 1);

где '(x) некоторый (неизвестный нам) многочлен. Обычно считают, что '(x) нулевой многочлен (иначе должно произойти много ошибок). В этом случае за e(x) принимают дробь wh((xx)), хотя на самом деле

e(x) =

w(x)

¡

(xn ¡ 1)'(x)

=

w(x)

¡

g(x)'(x):

h(x)

h(x)

h(x)

 

 

 

 

 

 

53

 

 

 

 

w(x) h(x)

Пример 7. Рассмотрим бинарный циклический код из примера 6. Пусть требуется закодировать сообщение a = (1; 1; 1; 0). Этому сообщению соответствует многочлен a(x) = x3 + x2 + x, который кодируется многочленом u(x) = a(x) g(x) = x6 + x2 + x (mod 2) (по первому способу кодирования).

Предположим, что при передаче по каналу связи произошли две ошибки изменилиcь коэффициент при x2 и свободный член, то есть многочлен ошибок e(x) равен x2 + 1. Тогда на выходе из канала связи будет получен многочлен v(x) = u(x) + e(x) = x6 + x + 1. При поиске ошибок вычисляем произведение

v(x) h(x) = x10 + x9 + x8 + x6 + x5 + x2 + x + 1 (mod 2):

По модулю многочлена x7¡1 верно x7 = 1, поэтому синдром w(x) многочлена v(x) это многочлен

w(x) = v(x) h(x) ´ x6 + x5 + x3 + 1 (mod 2; x7 ¡ 1):

Вычислив частное wh((xx)), получим многочлен x2 + 1, который совпадает с многочленом ошибок e(x). Теперь легко найти u(x) = v(x) ¡ e(x).

Замечание. Пусть дл кода из примера 7 многочлен ошибок равен x6. Проделав аналогичные выкладки, получим w(x) = x6 + x3 + x2 + x, откуда = x2 + x. Поэтому многочлен ошибок будет найден неверно. Это связано с тем, что многочлен '(x) в данном случае отличен от нулевого. Таким образом, рассмотренные методы исправления ошибок могут приводить к неверным результатам. Для гарантированного исправления ошибок надо использовать специальные коды. Ниже будут рассмотренные некоторые из таких кодов.

3.8Порождающая и проверочная матрицы

Пусть p простое число. Рассмотрим типичный случай пусть порождающий многочлен g(x) p-ичного циклического кода C(x) ½ M(p; 7) имеет вид

g(x) = g0x4 + g1x3 + g2x2 + g3x + g4;

54

а его проверочный многочлен

h(x) = h0x3 + h1x2 + h2x + h3:

Таким образом, r = 4 и k = 3. Следовательно, длина кодовых слов n = k + r = 7. Кодируемые сообщения имеют вид a = (a0; a1; a2). Указанному сообщению соответствует многочлен a(x) = a0x2 +a1x+a2. Код C(x) состоит из кодовых многочленов вида a(x)g(x). Так как степень a(x) не больше 2, легко проверить, что многочлены g(x), xg(x) и x2g(x) образуют базис подпространства C(x) векторного пространства M(p; 7). Поэтому за порождающую матрицу кода C(x) можно принять

0B g0

G = B 0

B @ 0

g1

g2

g3

g4

0

0

1

 

g0

g1

g2

g3

g4

0

C

:

0 g0

g1

g2

g3

g4

C

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

A

 

Пусть u(x) = u0x6 +u1x5 +u2x4 +u3x3 +u4x2 +u5x+u6 произвольный многочлен из кольца M(2; 7). Тогда

u(x) 2 C(x) () h(x) u(x) ´ 0 (mod 2; x7 ¡ 1):

Следовательно, если u(x) 2 C, то все коэффициенты произведения h(x) u(x) равны нулю по модулю многочлена x7 ¡ 1. В частности, равны нулю коэффициенты при x6, x5, x4 и x3, то есть выполнены равенства

8

> h u

> 3 0

>

>

>

> h u

< 3 1

> h u

> 3 2

>

>

>

> h u

: 3 3

+h2u1

+h2u2

+h2u3

+h2u4

+h1u2

+h1u3

+h1u4

+h1u5

+h0u3

+h0u4

+h0u5

+h0u6

=

0;

 

=

0;

(6)

=

0;

 

=

0:

 

В матричном виде это можно записать так: Hut = 0, где

0 h3 h2

h1

h0

0 0

0

1

 

H = B

0

h3

h2

h1

h0

0

0

C

:

B

0

0

h3

h2

h1

h0

0

C

 

B

 

 

 

 

 

 

 

C

 

B

0

0

0 h3

h2

h1

h0

C

 

B

C

 

B

 

 

 

 

 

 

 

C

 

@

 

 

 

 

 

 

 

A

 

Пусть C0 пространство решений системы (6) однородных линейных уравнений. Так как число неизвестных равно 7, а ранг матрицы системы

55

равен 4, заключаем, что размерность пространства C0 равна 7 ¡ 4 = 3. Пусть C ½ V7(Zp) векторное представление циклического кода C(x). Тогда размерность C равна степени проверочного многочлена h(x), то есть 3. Поэтому размерности C и C0 равны. По построению C ½ C0. Поэтому C = C0. Следовательно, H можно принять за проверочную матрицу кода C.

Пример 8. Рассмотрим произведение многочленов g(x) = x2 + 3x + 1 и h(x) = x3 + 2x2 + 3x + 4:

g(x)h(x) = x5 + 5x4 + 10x3 + 15x2 + 15x + 4:

Это произведение сравнимо с многочленом x5 ¡ 1 по модулю 5, поэтому g(x) можно принять за порождающий многочлен пятеричного циклического кода, а h(x) за его проверочный многочлен. Число информационных символов k = deg h(x) = 3, число проверочных символов r = deg g(x) = 2, длина кодовых слов n = k + r = 5. Порождающая и проверочная матрицы этого кода таковы:

 

0

1

3

1

0

0

1

 

 

0

4

3

2

1

0

1

 

G =

B

0

1

3

1

0

C

;

H =

0

4

3

2

1

:

 

B

0

0

1

3

1

C

 

 

@

 

 

 

 

 

A

 

 

B

 

 

 

 

 

C

 

 

 

 

 

 

 

 

 

 

 

@

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

3.9Один из алгоритмов поиска ошибок

Весом w(u(x)) многочлена u(x) называют число его отличных от нуля коэффициентов. Например, многочлены 2x3 ¡5x+7 и x11 ¡1 имеют, соответственно, веса 3 и 2. Вес многочлена равен нулю тогда и только тогда, когда этот многочлен нулевой.

Пусть C(x) циклический код. Его кодовым расстоянием d(C(x)) называют минимум весов ненулевых кодовых многочленов:

d(C(x)) = minfw(u(x)) : u(x) 2 C(x); u(x) ненулевой многочленg:

Кодовое расстояние циклического кода часто называют также минимальным расстоянием.

56

Пусть C(x) циклический код с порождающим многочленом g(x) и длиной n кодовых слов. Пусть по каналу связи передавался многочлен u(x) и на него наложился многочлен ошибок e(x). Тогда на выходе будет получен многочлен v(x) = u(x) + e(x).

Предложение 14 Пусть d(C(x)) ¸ 2t + 1 и вес многочлена ошибок e(x) не больше t. Пусть при некотором i ¸ 0 вес остатка r(x) при делении xiv(x) на g(x) не больше t. Тогда e(x) ´ xn¡ir(x) (mod xn ¡ 1).

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

v(x) = u(x) + e(x) ´ 0 + e(x) = e(x) (mod g(x))

и

r(x) ´ xiv(x) (mod g(x)):

Пусть e0(x) остаток при делении xn¡ir(x) на xn ¡ 1. Тогда e0(x) ´ xn¡ir(x) (mod xn ¡ 1):

Так как многочлен xn ¡ 1 делится на g(x), из последнего сравнения получаем

e0(x) ´ xn¡ir(x) (mod g(x)):

Положим f(x) = xi[e(x) ¡ e0(x)]. По модулю многочлена g(x) имеем:

f(x) = xie(x) ¡ xie0(x) ´ xiv(x) ¡ xixn¡ir(x) ´ r(x) ¡ r(x) = 0:

Поэтому f(x) кодовый многочлен. Но тогда и xn¡if(x) = e(x) ¡ e0(x) является кодовым многочленом. При этом его вес не больше суммы весов e(x) и e0(x), то есть не больше 2t. Так как d(C(x)) ¸ 2t + 1, получаем, что e(x)¡e0(x) нулевой многочлен. Теперь заключение предложения очевидно.

3.10Циклический код, исправляющий 1 или 2 ошибки

Пусть C(x) бинарный циклический код с порождающим многочленом g(x) = x8 + x7 + x6 + x4 + 1 и проверочным многочленом h(x) = x7 + x6+ +x4 + 1. Тогда число информационных символов k = deg h(x) = 7, число

57

проверочных символов r = deg g(x) = 8, длина кодовых слов n = k + r = 15. Можно показать, что кодовое расстояние d(C(x)) = 5, поэтому код может исправлять до 2 ошибок.

Пусть кодируемое сообщение a = (1; 0; 1; 1; 0; 1; 0). Этому сообщению сопоставляется многочлен a(x) = x6 + x4 + x3 + x. Применяя первый способ кодирования, вычисляем многочлен

u(x) = g(x) a(x) = x14 + x13 + x10 + x6 + x5 + x4 + x3 + x:

Пусть многочлен ошибок e(x) = x10+x2. Тогда получателю придет многочлен

v(x) = u(x) + e(x) = x14 + x13 + x6 + x5 + x4 + x3 + x2 + x:

Разделив с остатком v(x) на g(x), получим остаток r(x) = x7 + x6 + x5 + x. Теперь подбираем i, удовлетворяющее посылке предложения 8:

i

xir(x)

xir(x) (mod g(x))

 

 

 

0

x7 + x6 + x5 + x

x7 + x6 + x5 + x

1

x8 + x7 + x6 + x2

x4 + x2 + 1

2

x9 + x8 + x7 + x3

x5 + x3 + x

3

x10 + x9 + x8 + x4

x6 + x4 + x2

4

x11 + x10 + x9 + x5

x7 + x5 + x3

5

x12 + x11 + x10 + x6

x7 + 1

При i = 5 получили многочлен r0(x) = x7 + 1 веса, не большего 2. Остается вычислить

e0(x) = xn¡ir0(x) = x15¡5(x7 + 1) = x17 + x10 ´ x10 + x2 (mod x15 ¡ 1);

что совпадает с многочленом ошибок.

При построении таблицы полезно использовать тот факт, что по модулю многочлена g(x) и (одновременно) по модулю 2 справедливо тождество x8 = x7 + x6 + x4 + 1.

58

3.11Геометрические алгоритмы поиска ошибок

Рассмотрим бинарный циклический код C(x) с длиной кодовых слов n, числом информационных разрядов k и порождающим многочленом g(x). Пусть по каналу связи передавался кодовый многочлен u(x), а на выходе из канала получен многочлен v(x) = u(x) + e(x), где e(x) многочлен ошибок. В [КТТИ, стр. 152] формулируется (без доказательства) следующее предложение:

Предложение 15 Пусть вес t многочлена ошибок e(x) удовлетворяет неравенству t < nk и d(C(x)) ¸ 2t + 1. Тогда все t ошибок можно обнаружить и исправить.

Доказательство. Рассмотрим типичный случай t = 3. В этом случае e(x) можно записать в виде e(x) = xk1 + xk2 + xk3, где 0 · k1 < k2 < k3 < n.

Учитывая предложение 8, достаточно убедиться, что существует такое i, 0 · i < n, для которого вес остатка r(x) при делении xiv(x) на g(x) не больше t. Проверим это.

Так как u(x) кодовый многочлен, найдется многочлен '(x) с коэффициентами из Z2 = f0; 1g, для которого u(x) = g(x)'(x). Поэтому v(x) = = u(x) + e(x) ´ 0 + e(x) = e(x) (mod g(x)), и, следовательно, многочлен r(x) равен остатку при делении xie(x) на g(x).

Рассмотрим правильный n-угольник M. Перенумеруем его вершины числами 0, 1, 2, : : :, n ¡ 1 (в том порядке, в котором вершины встречаются при обходе границы n-угольника M против часовой стрелки). Пусть T треугольник, вершины которого являются вершинами n-угольника M и имеют номера k1, k2 и k3. Вершины n-угольника M, не являющиеся вершинами треугольника, будем называть свободными. Пусть также P1 множество вершин n-угольника M с номерами 0, 1, 2, : : :, n ¡ k ¡ 1, а P2 множество остальных вершин n-угольника M.

Умножение e(x) на x соответствует вращению треугольника T на угол ® = 2n¼ (против часовой стрелки) вокруг центра O n-угольника M. Поэтому

59

треугольник Ti, соответствующий многочлену xie(x), получается из треугольника T путем вращения на угол i ¢ ®.

Так как k число информационных разрядов кода C(x), справедливо равенство deg g(x) = n ¡ k. Если при каком-то i все вершины треугольника Ti попадают во множество P1, то степень многочлена xie(x) меньше n ¡ k, поэтому его остаток при делении на g(x) совпадает с xie(x) и, следовательно, имеет вес, равный t = 3. Поэтому достаточно убедиться, что треугольник T можно повернуть на такой угол i ¢ ® вокруг точки O, что ни одна вершина треугольника полученного в результате вращения треугольника Ti не попадет во множество P2. Проверим это.

Ясно, что число вершин во множестве P2 равно k. Поэтому достаточно убедиться в том, что между какими-то вершинами треугольника T находится не менее k вершин n-угольника M. Проверим это.

Вершины треугольника T разбивают границу n-угольника M на три ломаных L1, L2 и L3. Пусть на этих ломаных располагается ¾1, ¾2 и ¾3 свободных вершин n-угольника соответственно. Общее число свободных вершин n-угольника M равно 3, поэтому ¾1 +¾2 +¾3 = 3. Из неравенства

t < nk при t = 3 получаем n > 3k. Допустим, что ¾j · k ¡ 1 при j = 1; 2; 3. Тогда n = ¾1 + ¾2 + ¾3 + 3 · 3(k ¡ 1) + 3 = 3k. Противоречие с неравенством

n > 3k показывает, что ¾j ¸ k при некотором j. Теперь остается повернуть треугольник T на такой угол ® ¢i, что все вершины из множества P2 попадут на образ той ломаной Lj, на которой располагается ¾j свободных вершин n угольника. Предложение доказано.

Предложение 9 применимо только к кодам с низкой скоростью передачи (напомним, что скорость передачи R равна отношению nk ) Например, при t = 3 информационные разряды должны составлять менее трети общего числа рарядов кодового слова. Однако использованный при доказательстве предложения метод позволяет строить коды с высокой корректирующей способностью и большой скоростью передачи. Рассмотрим один из таких кодов. Этот код позволяет обнаруживать и исправлять до 3 ошибок в кодовом слове.

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]