pri_cod2
.pdfПример 9. [КТИИ, стр. 154]). Пусть C(x) бинарный циклический код, проверочный и порождающий многочлены которого задаются так:
g(x) = x11 + x9 + x7 + x6 + x5 + x + 1;
h(x) = x12 + x10 + x7 + x4 + x3 + x2 + x + 1:
Длина кодовых слов этого кода n = 23, число информационных символов k = deg h(x) = 12 и число проверочных символов r = deg g(x) = 11. Кодовое расстояние d(C(x)) = 7 [ктти, с. 165].
Пусть при передаче по каналу связи на кодовое слово наложился вектор ошибок e(x) веса 3. Далее используем обозначения предложения 9. В нашем случае n = 23, поэтому ¾1 + ¾2 + ¾3 = 23 ¡ 3 = 20. Кроме того, множество P2 состоит из 12 вершин 23-угольника M с номерами 11, 12, : : :, 22. Не теряя общности, считаем, что ¾1 · ¾2 · ¾3. Далее возможны два случая.
Случай 1. ¾3 ¸ 12. В этом случае повторяем заключительные рассуждения при доказательстве предложения 9.
Случай 2. ¾3 · 11. В этом случае ¾1 + ¾2 ¸ 20 ¡11 = 9, откуда ¾2 ¸ 5, поскольку ¾1 · ¾2. Кроме того, ¾3 ¸ 7 иначе ¾1 + ¾2 + ¾3 · 3 ¢ 6 = 18 < 20. Следовательно, можно выбрать такую вершину A треугольника T , что с стороны от A имеется не менее 7 свободных вершин, а с другой стороны не менее 5 вершин. Поэтому при j = 16 или j = 17 выполнено следующее свойство:
Если повернуть треугольник T вокруг точки O на угол вида ® ¢ i так, чтобы вершина A попала в вершину с номером j, то ни одна из двух других его вершин не попадет во множество P2.
Учитывая сказанное, получаем такой алгоритм поиска трех ошибок:
61
1) При i = 0; 1; : : : ; 22 найти остаток r(x) при делении xiv(x) на g(x). Если при некотором i вес r(x) окажется не больше 3, то найти вектор ошибок e(x) = x23¡ir(x) (mod x23 ¡ 1). Конец.
2)При j = 16 и при i = 0; 1; : : : ; 22 найти остаток r(x) при делении xi(v(x) ¡ xj) на g(x). Если при некотором i вес многочлена r(x) окажется не больше 2, то найти вектор ошибок e(x) = x23¡i(r(x) + xj) (mod x23 ¡ 1). Конец.
3)При j = 17 проделать те же действия, какие были проделаны в предыдущем пункте при j = 16. Конец.
Аналогично (но проще) строится алгоритм поиска двух ошибок. В этом случае многочлену ошибок соответствует хорда F многоугольника M. Пусть с одной стороны этой хорды лежит ¾1 свободных вершин, а с другой стороны¾2 свободных вершин. Ясно, что ¾1 + ¾2 = 23 ¡2 = 21. Не теряя общности, считаем, что ¾1 · ¾2. Далее возможны два случая.
Случай 1. ¾2 ¸ 12. В этом случае хорду F можно повернуть так, чтобы ни один ее конец не попал во множество P2.
Случай 2. ¾2 · 11. В этом случае ¾2 = 11 и ¾1 = 10. Поэтому хорду F можно повернуть так, чтобы один ее конец попал в вершину с номером 16, а второй не попал во множество P2.
Теперь легко построить алгоритм поиска двух ошибок.
Алгоритм поиска одной ошибки строится аналогично и выглядит существенно проще.
3.12БЧХ-коды
Циклические коды специального вида были разработаны Р.К. Боузом, Д.К. Чоудхури и А. Хоквингемом [ктти, стр. 163]. Они носят название БЧХкодов.
Пусть p простое число, m ¸ 2 целое число и GF (pm) конечное поле, состоящее из pm элементов. Известно [ктти, стр. 96], что любое конечное поле F содержит так называемый примитивный элемент ®, который удовлетворяет следующему условию:
62
Для любого ненулевого элемента ¯ поля F найдется целое i ¸ 0, для которого ¯ = ®i.
БЧХ-код это такой циклический код C(x), порождающий многочлен g(x) которого при некотором ± ¸ 2 удовлетворяет следующему условию:
g(®) = g(®2) = ¢ ¢ ¢ = g(®±) = 0: |
(7) |
В этом случае код C(x) является (по определению) БЧХ-кодом с конструктивным кодовым расстоянием ± + 1. Последнее означает, что кодовое расстояние d(C(x)) не может быть меньше числа ± + 1 (но может быть больше этого числа).
Считаем, что ± < 2m иначе g(x) = xn ¡ 1 и код состоит только из одного (нулевого) кодового слова. Поэтому элементы ®, ®2, : : :, ®±, различны.
Предложение 16 Пусть выполнены условия (7). Тогда d(C(x)) ¸ ± + 1.
Доказательство. Рассмотрим типичный случай ± = 3. Пусть n длина кодовых слов кода C(x). Пусть u(x) многочлен степени n ¡ 1 с коэффициентами из Zp: u(x) = u0xn¡1 + u1xn¡2 + ¢ ¢ ¢ + un¡1. Тогда
u(x) 2 C(x) () u(x) = g(x)'(x) для некоторого многочлена '(x):
Поэтому из (7) вытекает, что если u(x) 2 C(x), то выполнены равенства
u(®) = u(®2) = u(®3) = 0:
В матричном виде эти равенства записывается так:
0 |
®n¡1 |
®n¡2 ®n¡3 |
: : : ® |
1 |
0 |
u0 |
|||||||||
®2n¡2 |
®2n¡4 |
®2n¡6 |
: : : ®2 |
1 |
1 B |
u1 |
|||||||||
B |
® |
3n |
¡ |
3 |
® |
3n |
¡ |
6 |
® |
3n 9 |
: : : ® |
3 |
1 |
C B |
¢ ¢ ¢ |
B |
|
|
|
|
¡ |
|
C B |
||||||||
B |
|
|
|
|
|
|
|
|
|
|
|
|
|
C B |
|
@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
A B un 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ |
¡ |
1 |
= |
0 |
0 |
1 |
: |
(8) |
C |
0 |
|||||
C |
|
B |
0 |
C |
|
|
C |
|
B |
C |
|
|
|
C |
|
B |
|
C |
|
|
C |
|
@ |
|
A |
|
|
C |
|
|
|
|
|
|
A |
|
|
|
|
|
|
Допустим, что вес многочлена u(x) не больше 3. Мы должны убедиться, что u(x) нулевой многочлен. Проверим это. Положим I = fi : ui =6 0g. Тогда jIj · 3. Допустим, что jIj = 3. Тогда I = fi1; i2; i3g, где 0 · i1 < i2 < i3 < n.
63
Из (8) получаем
0 |
2n¡2i1 2 |
2n 2i2 2 |
2n 2i3 2 |
1 0 |
u |
i1 |
1 |
0 |
0 |
1 |
|
|
|
®n i1¡1 |
®n¡i2¡1 |
®n¡i3¡1 |
|
|
|
|
|
|
|
||
B |
®3n¡3i1¡3 |
®3n¡3i2¡3 |
®3n¡3i3¡3 |
C B ui2 |
C |
= B |
0 |
C |
: |
|||
B |
® ¡ ¡ |
® ¡ ¡ |
® ¡ ¡ |
C B ui |
3 |
C |
B |
0 |
C |
|
||
B |
|
|
|
C B |
|
|
C |
B |
|
C |
|
|
@ |
|
|
|
A @ |
|
|
|
A |
@ |
|
A |
|
Сократим первую строку матрицы, стоящей слева, на ®n¡i3¡1, вторую на ®2n¡2i3¡2 и третью на ®3n¡3i3¡3. Тогда получим
0 |
2i3 |
¡2i1 |
2i3 |
¡2i2 |
1 |
1 0 |
u |
i1 |
1 |
0 0 1 |
|
|||
|
®i3 |
i1 |
®i3 |
i2 |
|
|
|
|
|
|
|
|
|
|
B |
®3i3 |
¡3i1 |
®3i3 |
¡3i2 |
1 |
C B ui2 |
C |
= B |
0 |
C |
: |
|||
B |
® |
¡ |
® |
¡ |
1 |
C B ui |
3 |
C |
B |
0 |
C |
|
||
B |
|
|
|
|
|
C B |
|
|
C |
B |
|
C |
|
|
@ |
|
|
|
|
|
A @ |
|
|
|
A |
@ |
|
A |
|
Определитель матрицы, стоящей слева, отличен от нуля (он является определителем Вандермонда, причем ®, ®2 и ®3 различны). Следовательно,
ui1 = 0, ui2 = 0 и ui3 = 0. Противоречие с выбором i1, i2, i3 показывает, что u(x) нулевой многочлен. Случаи jIj = 2 и jIj = 1 рассматриваются
аналогично (они проще рассмотренного).
3.13Циклический код, исправляющий 3 ошибки
Рассмотренный в предыдущем разделе метод позволяет строить циклические коды с заранее заданным кодовым расстоянием, что позволяет обнаруживать и исправлять заранее определенное число ошибок. Однако этот метод не дает эффективного алгоритма поиска ошибок. Опишем алгоритм В. Питерсона, позволяющий обнаруживать и исправлять до 3 ошибок [КТТИ, стр. 173]. Этот метод легко модифицировать так, чтобы он обнаруживал и большее число ошибок.
Пусть ® примитивный элемент поля GF (pm) и g(x) многочлен с коэффициентами из Zp, корнями которого являются элементы ®, ®2, : : :, ®6. Методы построения таких многочленов рассмотрены, например в [ктти, стр. 104 – 109].
Пусть C(x) циклический код с порождающим многочленом g(x). Пусть u(x) кодовый многочлен. Тогда u(x) = g(x)'(x) для некоторого многочлена с коэффициентами из Zp. Поэтому любой корень ¯ 2 GF (pm)
64
многочлена g(x) является корнем u(x). Следовательно, выбор g(x) гарантирует справедливость такого свойства:
®; ®2; : : : ; ®6 корни многочлена u(x): |
(9) |
Пусть многочлен u(x) отправлен по каналу связи, а на выходе получен многочлен v(x) = u(x) + e(x), где e(x) многочлен (вектор) ошибок. Пусть число ошибок не превосходит 3. Тогда e(x) имеет вид
e(x) = e1xk1 + e2xk2 + e3xk3;
где ei 2 Zp при i = 1; 2; 3.
Поиск (и исправление) ошибок производится в два этапа.
Этап 1. Поиск позиций k1, k2, k3, в которых произошли ошибки (числа k1, k2, k3 называют локаторами ошибок).
Положим
Sj = e(®j) = e1(®k1)j + e2(®k2)j + e3(®k3)j:
При j = 1; 2; : : : ; 6 величины Sj можно найти по вектору v(x), поскольку по свойству (9) v(®j) = u(®j) + e(®j) = 0 + e(®j). Положим xi = ®ki при i = 1; 2; 3. Тогда
Sj = e(®j) = e1x1j + e2x2j + e3x3j : |
(10) |
Найдем уравнение третьей степени, корнями которого являются x1, x2, x3. Пусть это уравнение имееет вид t3 + At2 + Bt + C = 0, где A, B и C неизвестные нам коэффициенты. Тогда выполнены равенства
8 |
3 |
2 |
|
|
x13 |
+ Ax12 + Bx1 |
+ C = 0; |
> x2 + Ax2 + Bx2 + C = 0; |
|||
> |
|
|
|
> |
|
|
|
< |
3 |
2 |
+ C = 0: |
> x3 |
+ Ax3 + Bx3 |
||
> |
|
|
|
> |
|
|
|
: |
|
|
|
Умножая первое из этих равенств на e1xj1, второе на e2xj2, а третье на e3xj3, и складывая полученные равенства, придем к равенствам
S3+j + AS2+j + BS1+j + CSj = 0 при j = 1; 2; 3:
65
Давая j значения 1, 2 и 3, получим систему линейных уравнений
8 |
S4 + AS3 + BS2 + CS1 = 0; |
> |
S5 + AS4 + BS3 + CS2 = 0; |
> |
|
> |
|
< |
|
> |
S6 + AS5 + BS4 + CS3 = 0: |
> |
|
> |
|
: |
|
Решая эту систему, найдем A, B и C. Если определитель ¢ системы отличен от нуля, то полезно применить метод Крамера. Если же ¢ = 0, то или число ошибок меньше 3 или больше 3. Если число ошибок меньше 3, то e(x) ищем в виде e(x) = e1xk1 + e2xk2 (для двух ошибок) или в виде e(x) = e1xk1 (для одной ошибки). Метод поиска аналогичен описанному.
Перебирая элементы поля GF (2m), найдем |
корни x1, x2, x3 уравнения |
t3 +At2 +Bt+C = 0. Решая теперь при i = 1; 2; 3 |
уравнения xi = ®ki, найдем |
номера k1, k2, k3 позиций, в которых произошли ошибки.
Этап 2. Поиск e1, e2, e3. Полагая в (10) j = 1; 2; 3, придем к системе уравнений относительно неизвестных e1, e2, e3:
|
e x1 + e2x2 + e3x3 = S1; |
||||
> e1x1 + e2x2 + e3x3 |
= S2; |
||||
> |
1 |
2 |
2 |
2 |
|
8 |
|
||||
> |
|
|
|
|
|
< |
|
3 |
3 |
3 |
= S3: |
> e1x1 |
+ e2x2 |
+ e3x3 |
|||
> |
|
|
|
|
|
> |
|
|
|
|
|
: |
|
|
|
|
|
Отметим, что при p = 2 этап 2 не нужен, поскольку в этом случае ei может принимать только значения 0 или 1.
4Коды Адамара
Одно из основных назначений кодов заключается в исправлении ошибок. При этом желательно использовать коды, которые при заданной длине кодовых слов и заданном кодовом расстоянии имеют наибольшее число кодовых слов. Линейные коды этому свойству часто не удовлетворяют. Так, бинарный линейный код с кодовыми словами длины 11 и кодовым расстоянием ¸ 5 (то есть исправляющий две ошибки) содержит самое большее 16 кодовых слов. В то же время имется нелинейный код с той же длиной кодовых слов и кодовым расстоянием ¸ 5, содержащий 24 кодовых слова (см. ниже пример
.....). Поэтому выигрыш (в скорости передачи) составляет 50%.
66
Определение 1. (n; M; d)-кодом называется код, котоый состоит из M кодовых слов длины n каждое и имеет кодовое расстояние d.
Из определения вытекает, что линейный бинарный (n; k)-код является (n; 2k; d)-кодом, где d кодовое расстояние этого кода.
4.1Матрицы Адамара
Матрица Адамара порядка n это такая кввадратная матрица H порядка n, состоящая из чисел 1 и ¡1, для которой
HHt = nE; |
(1) |
где E единичная матрица порядка n.
Равенство (1) эквивалентно следующему свойству
(10) Скалярное произведение различных строк матрицы H равно 0, а скалярный квадрат любой строки равен n.
Пусть H матрица Адамара. Тогда справедливы следующие свойства:
а) при умножении строки матрицы H на ¡1 получается матрица Адамара.
б) при перестановке строк матрицы H получается матрица Адамара.
в) Ht = nH¡1.
г) HtH = nE, поэтому Ht матрица Адамара.
д) свойства а) и б) останутся верными, если термин “строка“ заменить термином “столбец“.
е) любые две строки матрицы H различаются ровно в n=2 компонентах.
Последнее свойство вытекает из (10), поскольку скалярное произведение двух различных строк с номерами i и k равно Pnj=1 aijakj, а произведение aijakj равно 1, если эти элементы равны и равно ¡1, если они различны.
Из свойства а) вытекает, что любую матрицу Адамара можно привести к нормализованной матрице Адамара, в которой все элементы первой строки и первого столбца равны 1.
Примеры матриц Адамара:
67
|
0 1 |
1 1 |
|
0 |
1 |
1 |
|
1 |
|
1 |
1 |
1 ; |
; |
B |
1 |
¡1 |
|
1 |
¡1 |
C |
|||
³ ´ |
1 |
1 |
|
B |
1 |
1 |
|
1 |
|
1 |
C |
|
@ |
¡ A |
|
B |
|
|
¡ |
|
¡ |
|
C |
|
|
B |
1 |
1 |
1 |
1 |
C |
||||
|
|
|
|
B |
|
|
C |
||||
|
|
|
|
B |
|
¡ |
¡ |
|
|
|
C |
|
|
|
|
@ |
|
|
|
|
A |
Предложение 17 Пусть H – матрица Адамара порядка n > 2. Тогда n делится на 4
Доказательство. Преобразуем матрицу H к нормализованному виду. Тогда первые три столбца будут содержать только строки следущего вида:
Строка |
Число строк |
1; 1; 1) |
i |
|
|
1; 1; ¡1) |
j |
1; ¡1; 1) |
k |
1; ¡1; ¡1) |
l |
Вычисляя скалярыный квадрат первого столбца, а также скалярные произведения различных столбцов, придем к равенствам:
8 i + j + k + l |
= n; |
||||||
> i + j |
|
k |
|
l |
= |
0; |
|
> |
|
¡ |
|
¡ |
|
|
|
> |
|
|
|
|
|
||
> |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
> i |
j + k |
¡ |
l |
= |
0; |
||
< |
|
|
|
|
= |
0: |
|
> i ¡ j |
|
k + l |
|||||
> |
¡ |
¡ |
|
|
|
|
|
> |
|
|
|
|
|
||
> |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
: |
|
|
|
|
|
|
|
Из этих равенств следует i = j = k = l, откуда n = i + j + k + l = 4i, поэтому n кратно четырем.
Предложение 18 Пусть H матрица Адамара порядка n > 2. Тогда
0
@ H H H ¡H
матрица Адамара порядка 2n.
1
A
Предложение 19 Пусть Hn матрица Адамара порядка n и Hm матрица Адамара порядка m. Тогда существует Hmn матрица Адамара порядка mn.
68
Доказательсто. Пусть Hn = (aij). Тогда (aijHm) искомая матрица. Предполагается, что существуют матрицы Адамара всех порядков, кратных
4. Наименьший порядок, для которого матрица Адамара не построена, равен 268 (на 1977 год).
Замечание. Имеются и другие методы построения матриц Адамаранапример, метод Пейли [Мак-Вильямс, стр 53, КТИИ, стр 112.]
4.2Построение кодов Адамара
Пусть Hn нормализованная матрица Адамара порядка n. Заменив в ней элементы 1 на 0, а ¡1 на 1, получим двоичную матрицу Адамара An. Любые две строки матрицы An совпадают в n=2 позициях и различаются также в n=2 позициях. Поэтому расстояние Хэмминга между этими строками равно n=2.
Матрица An позволяет построить три кода Адамара.
(1)(n ¡ 1; n; n=2)-код An, который состоит из строк матрицы An, из которой удален первый столбец (состоящий из одних нулей).
(2)(n ¡ 1; 2n; (n=2) ¡ 1)-код Bn, состоящий из векторов кода An, а также их дополнений до вектора (1; 1; : : : ; 1).
(3)(n; 2n; n=2)-код Cn, состоящий из строк матрицы An, а также их дополнений до вектора (1; 1; : : : ; 1).
Пример 10. Пусть n = 12. Код A12 состоит из 12 кодовых слов длины 11. Кодовое расстояние равно 6. Поэтому код может исправлять до 2 ошибок включительно.
Код B12 состоит из 24 кодовых слов длины 11. Кодовое расстояние равно 5. Код может исправлять до 2 ошибок.
Код C12 состоит из 24 кодовых слов длины 12. Кодовое расстояние равно 6. Код может исправлять до 2 ошибок.
Пример 11. Пусть требуется построить код C, исправляющий до 3 ошибок. Тогда его кодовое расстояние d(C) должно быть не менее 2 ¢ 3 + 1 = 7. Если использовать коды Адамара, то (n=2) ¸ 7, откуда n ¸ 14. Так как матрицы
69
Адамара существуют только при n = 1; 2, а также при n = 4k, наименьшее n равно 16.
Сформулированным выше условиям удовлетворяет код A16, состоящий из 16 кодовых слов длины 15, а также коды B16 и C16, состоящие из 32 кодовых слов длины 15 и 16 соответственно.
4.3Другие применения матриц Адамара
1. Максимальные определители. Пусть Hn матрица Адамара порядка n. Тогда
jHHtj = jnEj = nnjEj = nn;
n
откуда jHnj = §n2 .
В то же время справелива теорема Адамара:
Пусть A = (aij) квадратная матрица порядка n и ¡1 · aij · 1. Тогда
n
откуда jAj по абсолютной величине не превосходит числа n2 .
2. Весовые планы [4, стр. 60-61]. Пусть имеется n предметов и необходимо за n взвешиваний определить их веса. При взвешиваниях возможны случайные ошибки, имеющие дисперсию ¾2. Рассмотрим типичный случай n = 4. Пусть a, b, c, d веса предметов.
Весовой план 1. Каждый предмет взвешивается отдельно. Тогда ошибки будут иметь дисперсию ¾2.
Весовой план 2. Проведя 4 взвешивания, находим величины y1, y2, y3, y4, удовлетворяющие равенствам
|
|
|
8 a + b + c + d = y1 + "1 |
|
||||
|
|
|
> a b + c d = y2 + "2 |
|
||||
|
|
|
> |
¡ |
|
¡ |
|
; |
|
|
|
> |
|
|
|||
|
|
|
> |
|
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
> a + b c |
¡ |
d = y3 + "3 |
|
||
|
|
|
< |
|
|
|
|
|
|
|
|
> a b ¡ c + d = y4 + "4 |
|
||||
|
|
|
> |
¡ ¡ |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
> |
|
|
|
|
|
где |
y |
i показания |
весов, а " |
|
ошибки взвешивания, i = 1; 2; 3; 4. |
|||
|
: |
|
i |
|
|
|
Тогда a = (y1 + y2 + y3 + y4)=4 + ("1 + "2 + "3 + "4)=4, поэтому оценка a~ = (y1 + y2 + y3 + y4)=4 величины a имеет дисперсию 4 ¢ (¾2=16) = ¾2=4. Аналогичный результат получается для b, c и d. При построении весового плана использована матрица Адамара H4.
70