Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
165
Добавлен:
22.05.2015
Размер:
150.02 Кб
Скачать

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

Коды Хемминга (dmin=3, dmin=4) – коды, в которых проверочные разряды формируются в результате линейного преобразования информационных разрядов. Пусть имеется разрешенная КК а1 аk b1 br. Проверочные элементы – есть результат линейного преобразования информационных:

bi = i1a1 + i2a2 + … + ikak ,

где ijчисла 0 или 1 (i = 1, 2, … , r; j = 1, 2, … , k).

Обнаружение и исправление ошибок кодами Хемминга сводится к последовательному анализу «синдрома». Под «синдромом» понимают совокупность элементов суммирования по модулю 2 принятых проверочных элементов и вычисленных проверочных элементов из принятых информационных, которые вычисляются по тому же правилу что и на передающей стороне

.

В случае, если в канале связи ошибок не произошло, все разряды синдрома представлены нулями, т. е. с1 с2 … сr  0 0 … 0, в противном случае синдром не равен 0. Если dmin=3, то код может обнаруживать две ошибки и исправлять одну.

Пусть имеет место (n,k)-код (9,5), в котором r=4 и «синдром» имеет вид 1000. В Таблице 3.1 показано, что если «синдром» в двоичном коде содержит числа 1,2,4,8, то ошибки произошли в проверочных элементах. Появление в «синдроме» других чисел (представленных в двоичном коде) соответствует ошибкам в информационных элементах.

Таблица 3.1

Варианты «синдромов»

C1

C2

C3

C4

Разряды содержащие ошибку

1

0

0

0

1

b1

2

0

0

1

0

b2

3

0

0

1

1

a1

4

0

1

0

0

b3

5

0

1

0

1

a2

6

0

1

1

0

a3

7

0

1

1

1

a4

8

1

0

0

0

b4

9

1

0

0

1

a5

Пример. Пусть принята комбинация 11001 1111 (в третьем разряде произошла ошибка). Тогда b1=1, b2=0, b3=0, b4=1. В результате получим

3.6. Циклические коды

Существенным недостатком кодов Хемминга является необходимость выбора исход­ных разрешенных кодовых комбинаций, проверки условий формирования разрешенных КК, запоминание коэффициентов для формирования проверочных символов и синдромов для исправления ошибок.

Решением более простых процедур кодирования и декодирования являются циклические коды, основное свойство которых - циклический сдвиг кодовой комбинации приводит к новой разрешенной кодовой комбинации.

Пример. xi={ao,a1,...,an-1} - разрешенная КК, xj={an-1,ao,a1,...,an-2} - также разрешенная КК.

Циклические коды являются частным случаем полиномиальных кодов, принцип которых заключается в сопоставлении каждой КК сигнала некоторого многочлена. При построении циклических кодов КК представляют в виде многочленов от одной переменной:

G(x)=an-1 xn-1 + an-2 xn-2 + ... + a1x + a0 ,

где ai - коэффициенты 0 или 1.

Пример. Кодовую комбинацию 1100101 можно записать как

G(x) =1x6+1x5+ 0x4+ 0x3 + 1x2 +0x1 +1x0 ,

или же, опуская члены суммы с коэффициентами 0, перепишем как

G(x) = x6 + x5 + x2 + 1 .

Суммирование по модулю два дает такие же результаты как и вычитание. Поэтому как при умножении полинома на полином, так и при их делении используется основная логическая операция суммирования по модулю два.

Пример. В результате суммирования по модулю двух полиномов G1(x)=x6+x5+x2+1 и G2(x)=x5+x3 получим G(x)=x6+x3+x2+1.

Для рассмотрения принципа построения циклических кодов введем следующие обозначения: G(x) - полином степени k-1, отображающий кодовую комбинацию первичного кода; P(x) - образующий (порождающий) полином степени r=n-k и F(x) - полином степени n-1, отражающий кодовую комбинацию (кодовое слово) циклического кода.

В качестве разрешенных кодовых комбинаций циклического кода принимаются такие комбинации, которые делятся без остатка на заранее выбранный образующий полином P(x), выбираемый из таблицы порождающих полиномов. Построение циклического кода сводится к определению полинома F(x) для известных G(x) и P(x) при условии, что F(x) делится без остатка на P(x).

Существует два способа получения циклического кодового слова.

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

2. Представляем информационную часть кодовой комбинации длиной k в виде полинома G(x). Далее:

а) умножаем G(x) на одночлен xr и получаем G(x)xr, т.е. производим сдвиг k-разрядной кодовой комбинации на r разрядов;

б) делим многочлен Q(x)xr на полином P(x) степень которого равна r;

в) полученный остаток R(x) (очевидно его наивысшая степень равна r-1) складываем по модулю два с Q(x)xr и получим, таким образом, разрешенную кодовую комбинацию: F(x) = Q(x)xr + R(x).

Пример. Закодируем циклическим кодом длиной n=10 КК 1110001.

Решение

1). r=n-k=10-7=3. Из таблицы образующих полиномов выберем P(x) степени 3.

P(x) = x3 +x2+1

2). Исходной кодовой комбинации соответствует полином

G(x) =x6 +x5 + x4 + 1.

3). Умножим полином сообщение на x3

Q(x) =x9 +x8 + x7 + x3.

4). Полученное произведение разделим на образующий полином P(x)

x9 + x8 + x7 + x3 x3 + x2 +1

x9 + x8 + x6

------------------- x6 + x4 +x

x7 + x6 +x3

x7 + x6 + x4

------------------

x4 + x3

x4 + x3 +x

----------------

R(x) = x

Ответ: Полином, отображающий комбинацию циклического кода, будет иметь вид

F(x)=Q(x)xr + R(x) = x9+x8+x7+x3+x .

Ему соответствует передаваемая в канал КК циклического кода: 1110001 010.

А. Обнаружение ошибок при циклическом кодировании

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

Б. Исправление ошибок

Остаток от деления свидетельствует о наличии ошибки. Для исправления ошибок (обнаружение места ошибки) необходимо обеспечить условие, при котором количество различных ненулевых остатков равно числу комбинаций из n по t (t- количество ошибок исправляемых кодом). Это означает, например, что с n=15 при t=2 следует иметь С215 =105 остатков, что обеспечивается при r = 7 (27-1=127). Следовательно необходимо выбрать образующий полином с r=7 и код (15,7).

Исправление ошибки рассмотрим на конкретном примере.

Пример. Дан (11,7)-код с Р(0,1)=1001. (Р(0,1) есть образующий полином Р(х), выраженный в кодовой последовательностью 1 и 0-й). Пусть передается разрешенная комбинация

F(0,1) = 10110111100

Предположим, ошибка произошла в старшем разряде, т.е.

F*(0,1) = 00110111100

Для определения одной ошибки введем многочлен ошибки степени n.

E = 10000000000 (т.е. х10)

Разделим принимаемую кодовую комбинацию на образующий полином. То же проделаем с многочленом ошибки (т.е. поделим на образующий полином). Совпадение остатков покажет, что многочлен ошибки выбран правильно и ошибка именно в старшем разряде.

В случае, если ошибка произошла в середине принимаемого кода, остатки R1 и R2 не совпадут. При этом к принимаемой кодовой комбинации F*(0,1) необходимо справа дописать 0 и получить R1 (т.е. сдвинуть последовательность влево). Такой сдвиг осуществлять до тех пор, пока R1 и R2 не будут одинаковыми. Число сдвигов плюс 1 покажет разряд, где произошла ошибка (относительно старшего разряда).

Соседние файлы в папке ЛЕКЦИИ +ПЗ ИкСиС-2013