
pri_cod2
.pdf
уравнений: |
8 a2+ b |
|
|
|
|
|
|
|
|
2 |
= s1; |
|
|
|
|
|
|
|
< a + b |
|
= s2: |
|
|
|
|
|
|
: |
|
|
2 |
= a |
2 |
2 |
, |
Учитывая, что в поле из 16 элементов верно тождество (a + b) |
|
|
+ b |
|||||
придем к системе |
8 a +2b |
|
|
|
|
|
|
|
|
|
= s1; |
|
|
|
|
|
|
|
< (s1) |
|
= s2: |
|
|
|
|
|
:
Последняя же система или не имеет решений, или имеет более одного решения. Поэтому “упрощенный“ вариант проверочной матрицы H не позволяет обнаруживать и исправлять ошибки.
Задача. Пусть F = GF (pr) конечное поле и задано квадратное уравнение
at2 + bt + c = 0;
где a; b; c 2 F и a 6= 0. Доказать, что при p > 2 корни этого уравнения можно
найти по формуле ¡b § pb2 ¡ 4ac t1;2 = 2a :
Доказать также, что при p = 2 применять эту формулу нельзя. Вычисления с помощью примитивного элемента.
Поясним как проще это сделать. Пусть первые четыре элемента столбцаэто 1,1,0,1. Тогда этот столбец построен по элементу a(x) = x3 +x2 +1 поля F . По таблице 16 определяем, что a(x) = x13. Поэтому
(a(x))3 = (x13)3 = x13¢3 = x39 = x15¢2+9 = (x15)2 ¢ x9 ´ 12 ¢ x9 = x9
Снова по таблице 16 находим x9 = x3+x, что соответствует вектору (1; 0; 1; 0). Поэтому последние элементы столбца таковы: 1, 0, 1, 0.
Векторное представление элементов поля используется в теории кодирования. Пусть вектор a, задаваемый равенством (2), соответствует очередному блоку кодируемых данных. Тогда этому блоку можно сопоставить элемент a(x) конечного поля F = GF (pr), определяемый равенством (2).
===================
1)
41
3. Циклические коды
Пусть p простое число и n ¸ 2 целое число. Обозначим через M(p; n) множество многочленов, степень которых меньше n, с коэффициентами из множества f0; 1; : : : ; p ¡ 1g. Таким образом, M(p; n) состоит из многочленов с целыми коэффициентами вида
u(x) = u0xn¡1 + u1xn¡2 + : : : + un¡2x + un¡1; |
(1) |
где 0 · ui < p при всех i. Несложно проверить, что M(p; n) содержит ровно pn многочленов.
Пусть u(x) и v(x) элементы M(p; n). Тогда можно определить их сумму и произведение следующим образом:
(1)Рассматривая u(x) и v(x) как многочлены с целыми коэффициентами, находим их сумму, а затем каждый коэффициент суммы заменяем его остатком при делении на число p. Полученный многочлен и называем суммой u(x)©v(x) элементов u(x) и v(x).
(2)Рассматривая u(x) и v(x) как многочлены с целыми коэффициентами, находим произведение u(x) ¢ v(x) этих многочленов (по обычным правилам умножения многочленов), затем делим с остатком это произведение на многочлен xn ¡ 1 и в полученном остатке каждый коэффициент заменяем его остатком при делении на число p. Полученный многочлен называем произведением u(x) ¯ v(x) элементов u(x) и v(x).
Ясно, что вычисления с коэффициентами многочленов u(x) и v(x) производятся по модулю p. Множество M(p; n) с описанными операциями сложения и умножения будет кольцом. Напомним, что в алгебре кольцом называют такое множество K, в котором определены операции сложения и умножения, удовлетворяющие следующим свойствам:
(1)Сложение коммутативно и ассоциативно, то есть a + b = b + a и (a + b) + c = a + (b + c) для любых элементов a; b; c 2 K.
(2)Для любых элементов a; b 2 K уравнение a + x = b имеет в K единственное решение.
(3)Умножение дистрибутивно относительно сложения, то есть
(a + b)c = ac + bc для любых a; b; c 2 K.
42
Кольцо всегда содержит нулевой элемент 0, который можно определить как такой (единственный) элемент кольца, для которого c + 0 = c при всех c 2 K.
Приведем примеры некоторых хорошо известных колец:
1)Кольцо Z целых чисел (с обычным сложением и умножением).
2)Кольцо многочленов (от переменной x).
3)Кольцо квадратных матриц фиксированного размера.
Ясно, что каждое поле является в то же время и кольцом. Обратное неверно. Так, в кольце не для каждого отличного от нуля элемента должен сущестовать обратный элемент. Умножение в кольце не обязано быть коммутативным или ассоциативным.
В рассматриваемом кольце M(p; n) есть единичный элемент, которым является многочлен, тождественно равный 1. Однако не каждый элемент обладает обратным. В частности, не имеет обратного элемента любой многочлен u(x) 2 M(p; n), для которого u(1) ´ 0 (mod p). Проверим это. Допустим, что u(x) удовлетворяет выписанному сравнению и имеет обратный элемент v(x) 2 M(p; n). Тогда u(x)¯v(x) = 1, то есть для некоторого многочлена q(x) с целыми коэффициентами справедливо сравнение
u(x) ¢ v(x) ´ (xn ¡ 1) ¢ q(x) + 1 (mod p):
Подставив в это сравнение x = 1, получим 0¢v(1) ´ (1n¡1)¢q(1)+1 (mod p), откуда 0 ´ 1 (mod p), что, очевидно, неверно. Полученное противоречие показывает, что u(x) не имеет обратного элемента.
Множество f0; 1; : : : ; p ¡ 1g можно рассматривать как поле Zp вычетов по модулю p. Можно также определить операцию умножения элемента u(x) кольца M(p; n) на элемент ¸ 2 Zp следующим образом:
При умножении многочлена u(x) на ¸ каждый коэффициент этого многочлена умножается на ¸, а затем заменяется своим остатком при делении на число p.
В этом случае M(p; n) станет векторным пространством над полем Zp. Элементы множества M(p; n) при этом называют векторами, а элементы поля Zp скалярами.
43
Многочлену u(x) = u0xn¡1+u1xn¡2+: : :+un¡2x+un¡1 из кольца M(p; n) поставим в соответствие вектор u = (u0; u1; u2; : : : ; un¡1), составленный из коэффициентов этого многочлена. Вектор u называется векторным представлением элемента u(x) кольца M(p; n). Соответствие u(x) ! u задает взаимно однозначное отображение ' кольца M(p; n) на векторное пространство Vn(Zp), состоящее из всех n-мерных векторов с компонентами из поля Zp (см. выше параграф 4.3). При этом для любых многочленов u(x); v(x) и любого скаляра ¸ 2 Zp верны следующие равенства:
8
< '(u(x) + v(x)) = '(u(x)) + '(v(x));
:'(¸u(x)) = ¸'(u(x)):
Пример 1. Пусть в кольце M(5; 3) заданы элементы u(x) = x2 + 2 и v(x) = 2x2 + 3x + 4. Найдем их сумму и произведение.
1) “Обычная“ сумма многочленов u(x) и v(x) равна
(x2 + 2) + (2x2 + 3x + 4) = 3x2 + 3x + 6:
Заменяя коэффициенты суммы их остатками при делении на 5, придем к многочлену 3x2 + 3x + 1, который и будет суммой u(x) © v(x) заданных элементов кольца M(5; 3).
2) “Обычное“ произведение многочленов u(x) и v(x) равно
u(x) ¢ v(x) = (x2 + 2) ¢ (2x2 + 3x + 4) = 2x4 + 3x3 + 8x2 + 6x + 8:
Делим это произведение с остатком на x3 ¡ 1:
2x4 + 3x3 + 8x2 + 6x + 8 = (x3 ¡ 1)(2x + 3) + (8x2 + 8x + 11)
Заменяя коэффициенты остатка (8x2 + 8x + 11) их остатками при делении на число 5, получим
u(x) ¯ v(x) = 3x2 + 3x + 1:
Полученные результаты в векторной форме можно записать так:
8
< (1; 0; 2) © (2; 3; 4) = (3; 3; 1); : (1; 0; 2) ¯ (2; 3; 4) = (3; 3; 1):
44
Замечание. Остаток при делении многочлена f(x) на xn ¡ 1 проще найти так: надо в многочлене f(x) заменить xn на 1, xn+1 на x, xn+2 на x2 и т.д., а затем привести подобные члены. Замены надо производить до тех пор, пока не получим многочлен, степень которого меньше n. Полученный многочлен и и будет искомым остатком. Так, в примере 1 произведение u(x) ¢ v(x) равно 2x4 + 3x3 + 8x2 + 6x + 8. Заменив в этом многочлене x3 на 1 и x4 на x, получим многочлен 2x + 3 + 8x2 + 6x + 8. После приведения подобных членов придем к многочлену 8x2 + 8x + 11, который и является остатком при делении произведения u(x) ¢ v(x) на x3 ¡ 1.
Пример 2. Найдем в кольце M(2; 4) сумму и произведение элементов u(x) = x2 + x + 1 и v(x) = x3 + x + 1.
1) Вычисляя “обычную“ сумму
u(x) + v(x) = (x2 + x + 1) + (x3 + x + 1) = x3 + x2 + 2x + 2
и заменяя каждый коэффициент этой суммы его остатком при делении на 2, получаем многочлен x3 + x2, который и будет суммой u(x) © v(x) элементов u(x) и v(x) кольца M(2; 4).
2) Находим “обычное“ произведение многочленов
u(x) ¢ v(x) = (x2 + x + 1) ¢ (x3 + x + 1) = x5 + x4 + 2x3 + 2x2 + 2x + 1
и делим это произведение с остатком на многочлен x4 ¡ 1:
x5 + x4 + 2x3 + 2x2 + 2x + 1 = (x4 ¡ 1)(x + 1) + (2x3 + 2x2 + 3x + 2):
Заменяя коэффициенты остатка (2x3 +2x2 +3x+2) их остатками при делении на 2, получим
u(x) ¯ v(x) = x:
В векторной форме полученные результаты можно записать так:
8
< (0; 1; 1; 1) © (1; 0; 1; 1) = (1; 1; 0; 0); : (0; 1; 1; 1) ¯ (1; 0; 1; 1) = (0; 0; 1; 0):
45
3.4Сравнения многочленов по модулю
При построении циклических кодов, а также при кодировании и декодировании сообщений полезно использовать сравнения многочленов по модулю. При этом модулем может быть число, многочлен, а также пара, состоящая из числа и многочлена.
3.4.1Сравнения многочленов по модулю m
Пусть m ¸ 2 целое число. Многочлены f1(x) и f2(x) с целыми коэффициентами называются сравнимыми по модулю m, если их разность является многочленом, все коэффициенты которого делятся на m. Записывается это так: f1(x) ´ f2(x)(mod m). Например, справедливы следующие сравнения
3x3 + 14x2 ¡ 7x + 9 |
´ |
4x6 |
+ 5x3 + x + 1 |
(mod 2); |
3x3 + 14x2 ¡ 7x + 9 |
´ |
8x2 |
+ 2x + 15 |
(mod 3): |
Любой многочлен f1(x) с целыми коэффициентами сравним по модулю m с некоторым (единственным) многочленом f2(x), коэффициенты которого принадлежат множеству f0; 1; : : : ; m¡1g. Для получения f2(x) надо каждый коэффициент многочлена f1(x) заменить его остатком при делении на m. Например, при m = 3 и f1(x) = 3x3 +14x2 ¡7x+9 получаем f2(x) = 2x2 +2x.
3.4.2Сравнения многочленов по модулю многочлена
Пусть f1(x), f2(x) и s(x) многочлены с целыми коэффициентами, причем степень s(x) больше нуля. Говорят, что многочлены f1(x) и f2(x) сравнимыми по модулю многочлена s(x), если их разность делится на многочлен s(x), то есть найдется такой многочлен u(x) с целыми коэффициентами, для которого выполнено равенство f1(x) ¡ f2(x) = s(x)u(x). Записывается этот факт так: f1(x) ´ f2(x) (mod s(x)). Например, из равенства
(2x3 ¡ 5x2 + 11x + 3) ¡ (¡7x2 + 13x + 5) = 2(x + 1)(x2 ¡ 1)
вытекает справедливость сравнения
2x3 ¡ 5x2 + 11x + 3 ´ ¡7x2 + 13x + 5 (mod (x2 ¡ 1)):
46
Любой многочлен f(x) с целыми коэффициентами сравним по модулю s(x) со своим остатком при делении на многочлен s(x), поскольку из равенства f(x) = s(x)q(x) + r(x) следует f(x) ´ r(x) (mod s(x)). При этом r(x)
единственный многочлен, степень которого меньше степени многочлена s(x) и который сравним с f(x) по модулю многочлена s(x). Например, многочлен f(x) = 2x3 ¡ 5x2 + 11x + 3 сравним с многочленом 13x ¡ 2 по модулю s(x) = = x2 ¡ 1, поскольку 13x ¡ 2 остаток при делении f(x) на s(x):
f(x) = s(x) ¢ (2x ¡ 5) + (13x ¡ 2):
3.4.3Сравнения многочленов по модулю числа и многочлена
Пусть m ¸ 2 целое число и s(x) многочлен положительной степени с целыми коэфициентами. Пусть также f1(x) и f2(x) два многочлена с целыми коэффициентами. Говорят, что многочлены f1(x) и f2(x) сравнимыми по паре (модуль m, многочлен s(x)), если остаток при делении их разности на s(x) сравним с нулевым многочленом по модулю m. Записывается это так: f1(x) ´ f2(x)(mod m; s(x)).
Предложение 7 f1(x) ´ f2(x)(mod m; s(x)) тогда и только тогда, когда f1(x) ¡ f2(x) = s(x) ¢ q(x) + r(x) для некоторых многочленов q(x) и r(x) с целыми коэффициентами, причем все коэффиценты r(x) делятся на m.
За q(x) можно принять неполное частное, а за r(x) остаток при делении разности f1(x) ¡ f2(x) на многочлен s(x).
Предложение 8 Пусть m ¸ 2 целое число и s(x) многочлен положитель степени с целыми коэфициентами. Тогда для всякого многочлена f1(x) с целыми коэффициентами существует и единственен такой многочлен f2(x), что выполнены следующие свойства:
a)степень многочлена f2(x) меньше степени многочлена s(x);
b)коэффициенты f2(x) принадлежат множеству f0; 1; : : : ; m ¡ 1g;
c)f1(x) ´ f2(x)(mod m; s(x)).
47
Для получения f2(x) следует разделить с остатком f1(x) на s(x), а затем каждый коэффициент остатка r(x) при этом делении заменить его остатком при делении на число m.
Процедуру получения многочлена f2(x) по многочлену f1(x) называют
приведением многочлена f1(x) по модулям (m; s(x)).
Пример 3. Пусть f1(x) = 2x5+7x4¡5x3+10x+8, m = 4 и s(x) = x3+3x+1. Разделим f1(x) с остатком на s(x):
f1(x) = s(x) ¢ (2x2 + 7x ¡ 11) + (¡23x2 + 36x + 19):
Заменив коэффициенты остатка (¡23x2 +36x+19) из остатками при делении на m = 4, получим многочлен f2(x) = x2 + 3. Таким образом, справедливо сравнение
2x5 + 7x4 ¡ 5x3 + 10x + 8 ´ x2 + 3 (mod (4; x3 + 3x + 1)):
При построении циклических кодов в качестве модуля s(x) выбирают многочлен xn¡1, где n > 1 целое число. В этом случае получить многочлен f2(x) по многочлену f1(x) проще таким образом: в многочлене f1(x) заменить xn на 1, xn+1 на x, xn+2 на x2 и т.д., а затем привести подобные члены (по модулю m).
Пример 4. Пусть f1(x) = 2x7+7x6¡5x5+8x3+10x+8, m = 4 и s(x) = x5¡1. Заменяя в f1(x) x5 на 1, x6 на x и x7 на x2, придем к многочлену 2x2 + 7x ¡
5 + 8x3 + 10x + 8. После приведения подобных членов получаем многочлен 8x3 + 2x2 + 17x + 3. Заменяя в последнем многочлене коэффициенты на их остатки при делении на m = 4, получим f2(x) = 2x2 + x + 3. Справедливо, таким образом, сравнение
2x7 + 7x6 ¡ 5x5 + 8x3 + 10x + 8 ´ 2x2 + x + 3 (mod 4; x5 ¡ 1)
Отметим, что операции сложения и умножения в кольце M(p; n) удобнее определять с использованием сравнений многочленов по модулям. Пусть u(x) и v(x) элементы M(p; n). Тогда их сумму и произведение можно определить следующим образом:
48
(1) Сумма u(x) © v(x) это такой (единственный) элемент w(x) кольца M(p; n), для которого
u(x) + v(x) ´ w(x) (mod p; xn ¡ 1):
(2) Произведение u(x) ¯ v(x) это такой (единственный) элемент w(x) 2 M(p; n), для которого
u(x) ¢ v(x) ´ w(x) (mod p; xn ¡ 1):
В левых частях сравнений указаны сумма и произведение многочленов u(x) и v(x), которые рассматриваются как многочлены с целыми коэффициентами.
3.5Определение циклического кода
Пусть p простое число, n ¸ 2 целое число и g(x) и h(x) такие многочлены с коэффициентами из поля Zp, что
g(x)h(x) ´ xn ¡ 1 (mod p) |
(2) |
Циклический код C(x), построенный по числам p, n и многочленам g(x), h(x), определяется так:
C(x) = fg(x) ¯ '(x) : '(x) 2 M(p; n)g:
Иными словами, многочлен u(x) 2 M(p; n) является кодовым (то есть принадлежит коду C(x)) тогда и только тогда, когда найдется такой многочлен '(c) 2 M(p; n), для которого u(x) = g(x)¯'(x). Последнее равенство можно записать так:
u(x) ´ g(x)'(x)(mod p; xn ¡ 1): |
(3) |
Многочен g(x) называется порождающим многочленом циклического кода, а h(x) его проверочным многочленом. Пусть r = deg g(x) и k = deg h(x) степени многоченов g(x) и h(x) соответственно. Тогда кодовые слова кода C(x) будет состоять из n разрядов, из которых k будут информационными, а r проверочными. При этом n = r + k.
Пусть u(x) 2 M(p; n). Рассматривая u(x) и g(x) как многочлены с целыми коэффициентами, разделим с остатком u(x) на g(x). Пусть r(x)
49
полученный при этом остаток. Из сравнения (3) и определения кода C(x) вытекает
Предложение 9 u(x) 2 C(x) тогда и только тогда, когда все коэффициенты остатка r(x) делятся на p.
Из определения кода C(x) вытекают также следующие свойства:
Предложение 10 Пусть C(x) циклический код. Тогда:
(а) Если u1(x) 2 C(x) и u2(x) 2 C(x), то u1(x) + u2(x) 2 C(x);
(б) Если u(x) 2 C(x) и ¸ 2 Zp, то ¸u(x) 2 C(x);
(в) Если u(x) 2 C(x), то x ¢ u(x) 2 C(x).
Из (а) и (б) вытекает, что код C(x) образует векторное подпространство пространства M(p; n), то есть является линейным кодом.
Пусть ' : M(p; n) ! Vn(Zp) рассмотренное выше отображение, которое многочлену u(x) = u0xn¡1 + u1xn¡2 + : : : + un¡2x + un¡1 из кольца M(p; n) ставит в соответствие вектор u = (u0; u1; u2; : : : ; un¡1), u = '(u(x)). Положим
C = f'(u(x)) : u(x) 2 C(x)g:
Множество C является векторным представлением циклического кода C(x). Векторы u 2 C называют кодовыми векторами.
Из пунктов (а) и (б) предложения 4 вытекает, что код C линеен. Из пункта (в) того же предложения следует, что он удовлетворяет условию цикличности:
Если (u0; u1; u2; : : : ; un¡1) 2 C, то (u1; u2; : : : ; un¡1; u0; ) 2 C:
Иными словами, при циклическом сдвиге компонент кодового вектора на одну позицию влево получаем кодовый вектор.
Из условия цикличности несложно вывести
Предложение 11 Пусть u кодовый вектор циклического кода. Тогда при циклическом сдвиге компонент вектора u на любое число позиций (влево или вправо) получается кодовый вектор.
50