
- •Лекция №8
- •Введение
- •3.1. Общие понятия из теории кодирования дискретных сообщений
- •3.2. Первичные коды
- •3.3. Помехоустойчивое кодирование
- •Классификация помехоустойчивых кодов
- •Основные характеристики помехоустойчивых кодов
- •Заключение
- •Лекция №9
- •Введение
- •3.4. Простейшие помехоустойчивые коды
- •3.5. Коды Хемминга
- •3.6. Циклические коды
- •3.7. Коды Боуза-Чоудхури-хоквингема
- •Заключение
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 покажет разряд, где произошла ошибка (относительно старшего разряда).