Кодирование с использованием линейного группового кода, страница 4

           ‘1’ => 0001         ‘5‘ => 0101         ‘9’  =>1001        ‘D’ => 1101

           ‘2’ => 0010         ‘6’ => 0110         ‘A’ => 1010       ‘E’ => 1110

           ‘3’ => 0011         ‘7’ => 0111         ‘B’ => 1011        ‘F’ => 1111

     2. Определим основные параметры кода: количество контрольных бит –m  и длину кодовой комбинации – n по числу информационных бит (k = 4) и количеству исправляемых ошибок (S=1,do=3)

m=[log2 {(k+1)+ [log2(k+1)]}]=[log2 {(4+1)+ [log2(4+1)]}]=3.

      Длина кодовой комбинации равна n = k + m = 4 +3 = 7. При этом получили (7,4) – код.

  3. Определим структуру кодовой комбинации, а так же расположение и значение информационных  и контрольных бит в  кодовой комбинации.

      Номера  контрольных бит определяются  по закону 2i,  где i=1, 2, 3,...  т.е. они равны 1, 2, 4, 8, 16,… а остальные биты являются информационными.

                                   1       2        3     4      5     6       7

k1

k1

a1

k1

a2

a3

a4

     Значения контрольных разрядов (0 или 1) определим при помощи проверок составленных на основании проверочной матрицы H(7,4), столбцы которой представляют запись в двоичной системе всех целых чисел от 1 до  n. Для m = 3 проверочная матрица имеет вид

                                        .                          

    Количество разрядов m - определяет количество проверок.

                    k3 Å a2Å a3Å a4 =0;    k3 = a2Å a3Å a4 =0 Å 1 Å 0  = 1;

                    k2 Å a1Å a3Å a4 = 0;   k2 = a1Å a3Å a4 =1 Å 1 Å 0 = 0;

                    k1Å a1Å a2Å a4 = 0;   k1 = a1Å a2Å a4 =1 Å 0 Å 0  = 1.

    6. Пусть F переданная кодовая комбинация, а F1 принятая, т. е. в третьем бите произошла ошибка

                              F  = 1 0 1 1 0 1 0

                              F1 = 1 0 0 1 0 1 0

    7. Декодирование. Умножаем  вектор столбец принятой кодовой  комбинации на транспонированную проверочную, матрицу определим синдром ошибки

      Синдром  011 показывает, что ошибка произошла в 3-м информационном разряде, который необходимо проинвертировать.

      Отбросив контрольные биты, получим исходное информационное слово 

                                               I = [0101] => 1010 => ‘A’.

Схема кодера и декодера

 


                                 

Рис. 1. Схема кодера -а и декодера –б для простого (7, 4)    кода Хэмминга

     Применение кода Хэмминга. Код Хэмминга используется как при параллельной, так и при последовательной записи.  В ЭВМ код Хэмминга чаще всего используется для обнаружения и исправления ошибок в ОП, памяти с обнаружением и исправлением ошибок ECC Memory (Error Checking and Correcting).

2. Программа реализации  кода Хэмминга

{   Построить код Хэмминга,  используя его матричное представление, для передачи данных, представляющих последовательность десятичных цифр, каждая из которых кодируется 4-х значным  двоичным кодом. Показать процесс обнаружения и исправления одиночной ошибки в передаваемой кодовой комбинации. Составить программу,  реализующую алгоритм кодирования, декодирования и исправления ошибки при передаче данных с использованием кода Хэмминга.}

program chem7_4;           {Программа реализации линейного группового кода}

 uses crt;

 const n=7; k=4; m=3;

       H : array[1..m,1..n] of byte=((0,0,0,1,1,1,1),

                                                     (0,1,1,0,0,1,1),

                                                    (1,0,1,0,1,0,1));

 type vec =array[1..n] of byte;