
- •Белорусский государственный университет информатики
- •Теоретическая часть Линейные коды.
- •Метрики Хэмминга и Ли.
- •Описание линейных кодов при помощи матриц.
- •Эквивалентность линейных кодов.
- •Декодирование линейных кодов.
- •Синдромное декодирование.
- •Коды Хэмминга.
- •Коды Рида-Маллера.
- •Коды, получаемые с помощью матриц Адамара.
- •Треугольный код
- •Практическая часть
- •Заключение
- •Приложение Листинг программы
Эквивалентность линейных кодов.
Если V – пространство строк матрицы G, то код V’ эквивалентен коду V тогда и только тогда, когда V’ – пространство строк матрицы G’, полученной из матрицы G перестановкой столбцов.
Любая порождающая матрица G комбинаторно-эквивалентна (если одна матрица может быть получена из другой путем комбинации элементарных операций над строками и перестановок столбцов, то эти две матрицы называются комбинаторно-эквивалентыми) некоторой матрице G’, имеющей ступенчатую каноническую форму.
Матрица G’ может быть получена из матрицы G следующим образом: начиная с первой строки с каждой из k строк матрицы G произведем следующие операции:
В i-ой строке найдется по меньшей мере один ненулевой элемент, поскольку строки линейно независимы. Предположим, что первый отличный от нуля элемент находится в j-ом столбце. Разделим каждый элемент i-ой строки на aij. В результате новый элемент матрицы aij’ станет равен единице.
К каждой l-ой строке (l!=i) прибавим i строку, умноженную на (-alj). В результате в j-ом столбце i-ая строка будет содержать единицу, а все остальные строки - нули.
После того, как эти операции будут проделаны над каждой строкой матрицы, получится матрица G’, содержащая k столбцов, каждый из которых содержит единицу и k-1 нулей, причем единица появится обязательно в каждой строке.
Поскольку G’ может быть получена из G с помощью операций над строками, то они порождают один и тот же код. Далее перестановкой столбцов можно сгруппировать слева k столбцов, содержащих единицы в качестве первых ненулевых элементов, в результате чего получается матрица G’’ следующего вида:
Пусть v=(a1,a2,…,ak) – произвольный набор длины k. Рассмотрим вектор u, являющийся линейной комбинацией строк матрицы G’’ с элементом ai в качестве i-го коэффициента: u=vG’’=(a1,a2,…,ak,c1,c2,…,cn-k), где
.
Таким образом, первые k компонент кодового вектора могут быть произвольно выбранными информационными символами, а каждая из последних n-k компонент является линейной комбинацией первых k компонент. Благодаря этому кодирование значительно упрощается. Код такого типа называется систематическим; первые k компонент называются информационными символами, а последние n-k компонент называются избыточными или проверочными символами. Каждый линейный код эквивалентен систематическому коду.
Между матрицами G и H существует связь, которая может быть сформирована следующей теоремой.
Теорема 2. Если V – пространство строк матрицы G=[IkP], где Ik – единичная матрица размерности k x k, а P – матрица размерности k x (n-k), то V является нулевым пространством матрицы H=[-PTIn-k], где In-k – единичная матрица размерности (n-k) x (n-k).
Декодирование линейных кодов.
Пусть V – линейный (n,k)-код, h – нулевой вектор и h2,h3,…,hqk – остальные кодовые векторы. Тогда таблица декодирования можно составить следующим образом. Кодовые векторы располагаются в виде строки с нулевым вектором слева. Затем один из наборов, не содержащийся в этой строке и имеющий разрядность n, например q1 помещается под вектором. Далее строка заполняется так, чтобы под каждым кодовым вектором hi помещался вектор g1+hi. Аналогично в первый столбец очередной строки помещается вектор g2 и строка заполняется таким же способом. Процесс продолжается до тех пор, пока каждый возможный набор длины n не появится где-нибудь в таблице. Данная таблица называется стандартным расположением и совпадает с таблицей смежных классов.
Теорема 3. Если стандартное расположение используется как таблица декодирования для блокового кода, то по полученному вектору v будет правильно декодирован переданный вектор u тогда и только тогда, когда набор ошибок v-u является образующим смежного класса.
Доказательство: Если v-u=gi, где gi – образующий i-го смежного класса, то вектор v=gi+u должен находиться в стандартом расположении в i-м смежном классе под кодовым словом u и поэтому будет правильно декодирован. Если же вектор v-u не является образующим смежного класса, то вектор v должен находиться в некотором классе j с образующим gj. Тогда вектор v расположен в j-й строке, но не под вектором u, потому что v!=gj+u.
Другим важным случаем декодирования линейных кодов является синдромное декодирование.