Простейшие помехоустойчивые коды

 

Введение в коды избыточности можно осуществлять по различным правилам. Одним и наиболее часто используемым правилом является правило проверки на четность числа единиц в кодовой комбинации (разрешенной). Комбинации этого кода образуются путем добавления к m информационным элементам (битам в случае двоичного кода) одного проверочного (m+1) бита, так чтобы полное число единиц в кодовой комбинации было четным.

Если А = {a1, …, am} единичные элементы первичного кода, а В – проверочный элемент, то для обеспечения четного числа единиц необходимо, чтобы

b = a1 Å a2 Å … Å am,

или

a1 Å a2 Å … Å am Å b = 0,

где Å – сумма по модулю два.

Например для m=4 код с проверкой на четность будет иметь вид:

 

А1 а2 а3 а4 b

 

Такой код имеет d0=2 и значит, он не может исправить ни одной ошибки. Такой код может обнаружить одну ошибку.

К простейшим помехоустойчивым линейным блочным кодам относится также код Хэмминга, позволяющий исправить одну ошибку и имеющий d0=3. Этот код строится следующим образом (для примера рассмотрим код (7,4)). К 4-м информационным битам а1а2а3а4 добавляем три проверочных бита b1b2b3, задавая их равенствами вида:

a1 Å a2 Å a3 = b1,

a2 Å a3 Å a4 = b2,

a1 Å a2 Å a4 = b3.

(при формировании этих правил каждый информационный элемент аi (i=1,2,3,4) должен участвовать как минимум в (r-1) проверках на четность из общего их числа r).

Если будут выполняться эти правила, то это будет свидетельствовать об отсутствии ошибки. Невыполнение первого и третьего равенства свидетельствует об ошибочном приёме а1, первого и второго - об ошибке а3,первого, второго и третьего - об ошибке а2, второго и третьего - об ошибке а4. Представленное выше правило формирования проверочных элементов b1b2b3 кода Хэмминга позволяет путём проверки на чётность каждой кодовой комбинации определить порядковый номер искажённого элемента. Результат проверки на чётность удобно представить r=3 разрядным проверочным двоичным числом, называемым синдромом ошибки (S1,S2,S3):

s1 = a1 Å a2 Å a3 Å b1,

s2 = a2 Å a3 Å a4 Å b2,

s3 = a1 Å a2 Å a4 Å b3.

Имеется всего восемь возможных синдромов ошибки: один – для случая отсутствия ошибки s=(0,0,0) и семь для каждой из ошибок (по числу позиций кода n=7). Каждая из ошибок имеет свой единственный синдром. По этому синдрому можно обнаружить ошибку и указать ее позицию: s1s2s3: 000, 001, 010, 011, 100, 101, 110, 111.

Пример:

Первичный код а = (а1а2а3а4) = 0001, тогда

b1 = a1 Å a2 Å a3 = 0,

b2 = a2 Å a3 Å a4 = 1,

b3 = a1 Å a2 Å a4 = 1.

 

Отсюда код Хэмминга

а1а2а3а4b1b2b3 = 0001011.

 

Этот код передается по каналу и происходит искажение одного (пусть а2 символа).

.

Вычисляем синдром s= s1s2s3.

,

,

.

Синдромом 111 можно закодировать ошибку а2. Нетрудно видеть, что если код Хэмминга принят правильно, то синдром s=000, т.е. отсутствуют ошибки.

Если бы ошибка была в а4, то синдром s=011. Схемная реализация кодеров и декодеров линейного блочного кода Хэмминга показана на рисунке 1.22.

 

Рис.1.22.

 

Основной задачей при построении линейных блочных кодов как и любых других помехоустойчивых кодов является разработка правил формирования проверочных элементов. Напомним, что эти правила заключаются в том, чтобы в результате проверок на четность числа единиц в передаваемой кодовой комбинации можно было указать позиции (номера) искаженных элементов.

Последовательность кодовых комбинаций первичного m разрядного кода сообщения можно записать в виде матрицы

.

Чтобы не записывать все кодовые комбинации этой матрицы можно записать единичную матрицу размером m´m.

а все кодовые комбинации матрицы А получить путем поэлементного сложения по модулю 2 строк единичной матрицы I во всех возможных сочетаниях. Общее число таких сложений

.

Вообще Np = 2m и уменьшение на единицу связано с отсутствием комбинации 000…0.

Для задания избыточного кода необходимо построить образующую матрицу Mn,m, левая часть которой есть единичная матрица Im первичного кода, а правая Rr,m – матрица проверочных элементов. Размерность такой матрицы n´m.

.

 

Теперь на основе образующей матрицы М можно построить проверочную матрицу Н размерностью n´r, левая часть которой это транспонированная матрица проверочных элементов, а правая – единичная матрица

.

Единицы в строках матрицы Н будут стоять на позициях элементов, участвующих в проверке на четность при формировании соответствующих bi (i = 1, 2, …, r). Таким образом, если задана образующая матрица М, то построив по ней проверочную матрицу, можно найти правила формирования проверочных групп элементов. Такой матричных подход удобен при построении линейных блочных кодов с большим числом разрядов m и r.