Дискретная математика:
логика, группы, графы, фракталы
Акимов О.Е.
2.4. Алгебраические системы на базе групп
Порождающая и проверочная матрицы
Откуда же берутся порождающие матрицы G? Порождающая матрица получается путем последовательного сдвига соответствующего порождающего многочлена g(x) по разрядам вправо. Последовательному сдвигу вправо отвечает умножение g(x) на xi:
G = = .
Порождающая матрица G имеет размерность (k – 1) · m, поскольку для сдвига берутся степени xi в пределах 0 < i < k – 1, а степень порождающего многочлена g(x) равна m. Мы знаем, что каждому порождающему многочлену соответствует проверочный многочлен h(x), который удобно записать в порядке убывания степеней:
g(x) = g0 + g1x + g2x2 + ... +
gmxm,
h(x) = hkxk + hk–1 xk–1 + ... + h0,
причем xn + 1 = g(x)h(x), где, напомним,
n — общее число символов, k — число информационных, а m — число проверочных символов в кодовом слове. Если существует порождающая матрица G, то должна существовать и соответствующая ей проверочная матрица
H. Действительно, такую матрицу можно получить путем последовательного сдвига проверочного многочлена h(x) влево:
H = = .
Предположим, у нас есть конкретный порождающий многочлен g(x) = 1 + x2 + x3. Проверочный многочлен h(x) находится простым делением многочлена x7 + 1 на заданный многочлен g(x); в результате имеем: h(x)= = x4 + x3 + x2 + 1. В соответствии с вышеприведенными определениями, находим конкретный вид порождающей G и проверочной H матриц:
G = , H = ,
GH* = (HG*)* = 0.
Последнее равенство говорит о том, что матрицы G и H ортогональны относительно друг друга (звездочка означает операцию транспонирования матрицы).
Рассмотренные G и H матрицы называются ленточными, потому что нули и единицы вдоль обеих диагоналей этих матриц образуют своеобразные ленты. Но любая ленточная матрица может быть сведена к систематическому виду:
G' = (Ek · k | Gm · k), H' = (Hk · m | Em · m),
где Ek · k и Em · m — единичные матрицы.
Существует, по крайней мере, два способа сведения ленточных матриц к систематическому виду. Первый наиболее надежный способ состоит в нахождении ряда остаточных многочленов. Если ri(x) остаточный многочлен от деления xi на порождающий многочлен g(x), то сумма элементов ri (x) + xi дает строки систематической матрицы G. Аналогичным способом находятся строки проверочной матрицы H. Второй способ заключается в том, чтобы найти соответствующие линейные комбинации строк или столбцов исходных матриц ленточного типа. Найдем G и H для предыдущего случая:
Эти две систематические матрицы можно было бы получить путем сложения векторов-столбцов исходных ленточных матриц (напоминаем, счет столбцов для G матрицы начинается с нуля, а для H матрицы — с шести).
G' : 0' = 1 + 2, 1' = 1 + 5, 2' = 3, 3' = 0, 4' = 1, 5' = 4 + 1, 6' = 6;
H' : 0' = 5, 1' = 3, 2' = 4, 3' = 2, 4' = 6, 5' = 1, 6' = 0.
Теперь поясним, как составить проверочные соотношения и определить коды ошибок si по известной проверочной матрице. С этой целью выпишем три равенства, отвечающих строкам матрицы H' :
s1 = h6 + h3 + h2 + h1 = 0,
s2 = h5 + h2 + h1 + h0 = 0,
s3 = h4 + h3 + h2 + h0 = 0.
При ошибке в символе h0 суммы s2 и s3 изменятся на 1, а при ошибке в h1 не будут равны нулю суммы s1 и s2. Таким образом, можно составить все коды ошибок для всех символов (табл. 2.87).
Таблица 2.87
При одновременном появлении ошибок в двух символах, например в h5 и h6, коды ошибок будут складываться; в данном случае он становится таким же, как и при одиночной ошибке в символе h1. Поэтому, характеризуя код с точки зрения помехозащищенности, мы должны сказать, что он обнаруживает и исправляет любые одиночные ошибки, а также обнаруживает, но не исправляет двойные ошибки.