Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СДЭС_Уч_метод_пос_кодирование2.doc
Скачиваний:
93
Добавлен:
03.12.2018
Размер:
1.89 Mб
Скачать

Часть 2 коды хемминга, голея и рида-маллера

В этой части изучаются важные примеры линейных блоковых кодов. Эти примеры помогут глубже понять принципы исправления ошибок и хорошие алгоритмы декодирования. Коды Хемминга являются, по-видимому, наиболее известным классом блоковых кодов, за исключением, может быть, только кодов Рида-Соломона. Как упоминалось в части 1, коды Хемминга являются оптимальными в том смысле, что они требуют минимальную избыточность при заданной длине блока для исправления одной ошибки. Двоичные коды Голея это единственный нетривиальный пример оптимального кода, исправляющего тройные ошибки (другими примерами оптимальных кодов являются коды-повторения и коды с одной проверкой на четность). Коды Рида-Маллера представляют собой очень элегантную комбинаторную конструкцию с простым декодированием.

2.1. Коды Хемминга

Напомним (формула (1.12)), что любое кодовое слово v линейного (n, k, dmin) кода С удовлетворяет уравнению

(2.1)

Полезная интерпретация этого уравнения состоит в следующем: максимальное число линейно независимых столбцов проверочной матрицы Н кода С равно dmin - 1.

В двоичном случае, для dmin = 3, из (2.1) следует, что сумма любых двух столбцов проверочной матрицы не равна нулевому вектору. Положим, что столбцы Н являются двоичными векторами длины m. Имеется всего 2m - 1 ненулевых различных столбцов. Следовательно, длина двоичного кода, исправляющего одиночную ошибку, удовлетворяет условию

Это неравенство в точности совпадает с границей Хемминга (1.24) для кода длины п, с пк = т проверками и исправлением t = 1 ошибок. Соответственно, код, удовлетворяющий этой границе с равенством, известен как код Хемминга.

Пример 13. Для т=3 мы получаем (7,4,3) код Хемминга с проверочной матрицей

Как уже отмечалось, проверочная матрица кода Хемминга обладает тем свойством, что все ее столбцы различны. Если возникает одиночная ошибка на j-ой позиции, 1≤ j ≤ п, то синдром искаженного принятого слова равен j-ому столбцу матрицы Н. Обозначим е вектор ошибок, добавленный к кодовому слову в процессе его передачи по ДСК, и предположим, что все его компоненты равны нулю за исключением j-ой позиции, еj = 1. Тогда синдром принятого слова равен

(2.2)

где hj- представляет j-ый столбец Н.

2.1.1. Процедуры кодирования и декодирования

Из уравнения (2.2) следует, что, если столбцы проверочной матрицы рассматривать как двоичное представление целых чисел, то значение синдрома равно номеру искаженной (ошибочной) позиции. Эта идея лежит в основе алгоритмов кодирования и декодирования, представленных ниже. Запишем столбцы проверочной матрицы в виде двоичного представления номера (от 1 до n) позиции кодового слова в возрастающем порядке. Обозначим эту матрицу через Н*. Очевидно, что матрице Н* соответствует эквивалентный код Хемминга с точностью до перестановки позиций кодового слова.

Напомним, что проверочная матрица в систематической форме содержит единичную подматрицу In-k размера (п - k)× (п - к) как показано в (1.16). Очевидно, что в матрице Н* столбцы единичной подматрицы In-k (т.е. столбцы веса один) размещаются на позициях с номерами, равными степени 2, т.е. 2z z= 0,1,..., т.

Пример 14. Пусть т = 3. Тогда систематическая (каноническая) проверочная матрица может быть задана в следующем виде

Матрица Н* заданная двоичным представлением целых чисел от 1 до 7 (младший разряд записывается в верхней строке) имеет вид:

где матрица I3 содержится в столбцах 1, 2 и 4.

В общем случае, для (2m - 1, 2т-1-т) кода Хемминга и данного (арифметического) порядка столбцов единичная матрица Iт содержится в столбцах проверочной матрицы с номерами 1, 2,4,..., 2m-1.

Кодирование

Процедура кодирования следует из уравнения (1.18). При вычислении проверочных символов pj для всех 1 ≤ jm проверяются номера столбцов и те столбцы, номера которых не являются степенью 2, сопоставляются информационным позициям слова. Соответствующие информационные символы включаются в процесс вычисления проверок. Такая процедура кодирования в чем-то сложнее обычной процедуры для систематического (канонического) кода Хемминга. Однако, соответствующая ей процедура декодирования очень проста. Для некоторых приложений этот подход может оказаться наиболее привлекательным, так как обычно декодирование должно быть очень быстрым.

Декодирование

Если кодирование выполнялось в соответствии с матрицей Н*, то декодирование оказывается очень простым. Синдром (2.2) равен номеру позиции, в которой произошла ошибка! После вычисления синдрома s , который рассматривается как целое число s, ошибка исправляется по правилу

(2.2)

где выполняется сложение по модулю 2 (т.е. 0+0=0, 1 + 1=0, 0+1=1,1+0=1).

Примечание. Следует заметить, что в расширенном толковании оба варианта кода Хемминга в Примере 14 являются систематическими, так как в обоих случаях известен фиксированный набор позиций кодового слова, на которых значения символов кодового слова всегда совпадают с соответствующими информационными символами. Другими словами, любые перестановки символов кодового слова оставляют код систематическим (в расширенном смысле).

Пример 14 интересен еще и тем, что Н*=РН, т.е. проверочной матрице Н*, полученной перестановкой некоторых позиций, соответствует, как оказывается, линейное преобразование исходной матрицы, где преобразующая матрица имеет вид

Таким образом, проверочная матрица заданного кода может иметь много различных представлений. Если еНТ = 0, то и еНТPT = 0, где Р любая невырожденная 3×3 матрица. Если еНТ =s, то и eHTPT = sPT =s*. Следовательно, для заданного линейного кода можно найти такое линейное преобразование его проверочной матрицы, которое окажется наиболее удобным для реализации, без каких-либо изменений самого кода. Эта возможность будет использована, например, при декодировании циклических кодов БЧХ.

Из примера 14 следует еще одно свойство линейных кодов. Пользуясь линейным преобразованием проверочной матрицы можно «назначить» проверочными любые ( n - k) позиций кодового слова, если только соответствующие им столбцы матрицы являются линейно независимыми. Это означает, что по оставшимся k позициям можно однозначно восстановить все кодовое слово. Такие наборы позиций называются информационными совокупностями. Множество информационных совокупностей используется в процедурах декодирования под общим названием «ловля ошибок».