Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
разное / ИТ / Лабораторная 8 / Такая вот теория 2.doc
Скачиваний:
88
Добавлен:
15.06.2014
Размер:
261.12 Кб
Скачать

3. Коды Хэмминга

Кодом Хэмминга называется (n,k)-код, проверочная матрица которого имеет r = n-k строк и 2r-1 столбцов, причем столбцами являются все различные ненулевые последовательности. Пример. Для (7,4)-кода Хэмминга

1

0

1

1

0

0

1

H(7,4)=

1

1

1

0

0

1

0

0

0

1

1

1

1

0

или

1

1

1

0

1

0

0

H(7,4)=

1

1

0

1

0

1

0

1

0

1

1

0

0

1

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

Если столбцы проверочной матрицы представляют упорядоченную запись десятичных чисел, т.е. 1,2,3... в двоичной форме, то вычисленный синдром

Si(1, 0)= Sr-1... S1 S0=vi(1, 0)H(n, k)T;

однозначно указывает на номер позиции искаженного символа. Пример. Для (7,4)-кода Хэмминга проверочная матрица в упорядоченном виде имеет вид

0

0

0

1

1

1

1

H(7,4)=

0

1

1

0

0

1

1

1

0

1

0

1

0

1

Пусть переданное кодовое слово v(1, 0)=1101001, а принятое слово - v'(1, 0)=1101001. Синдром, соответствующий принятому слову будет равен S(1, 0)=v'(1, 0)H(7,4)T=[101].

Вычисленный синдром указывает на ошибку в пятой позиции. Проверочная матрица в упорядоченном виде представляет совокупность проверочных уравнений, в которых проверочные символы занимают позиции с номерами 2i (i=0,1,2...). Для (7,4)-кода Хэмминга проверочными уравнениями будут v1=v3+v5+v7; v2=v3+v6+v7; v4=v5+v6+v7; где v1, v2, v7; - проверочные символы. Элементы синдрома определяются из выражений S0=v1+v3+v5+v7; S1=v2+v3+v6+v7; S2=v4+v5+v6+v7.

Корректирующая способность кода Хэмминга может быть увеличена введением дополнительной проверки на четность. В этом случае проверочная матрица для рассмотренного (7,4)-кода будет иметь вид

0

0

0

1

1

1

1

0

H(8, 4)=

0

1

1

0

0

1

1

0

1

0

1

0

1

0

1

0

1

1

1

1

1

1

1

1

а кодовое расстояние кода d0=4. Проверочные уравнения используются для построения кодера, а синдромные - декодера кода Хэмминга.

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

4.1 Основные понятия

Циклическим кодом называется линейный блоковый (n, k) - код, который характеризуется свойством цикличности, т.е. сдвиг влево на один шаг любого разрешенного кодового слова дает также разрешенное кодовое слово, принадлежащее этому же коду и у которого, множество кодовых слов представляется совокупностью многочленов степени (n-1) и менее, делящихся на некоторый многочлен g(x) степени r=n-k, являющийся сомножителем двучлена xn+1. Многочлен g(x) называется порождающим.

Как следует из определения, в циклическом коде кодовые слова представляются в виде многочленов v(x)=vn-1xn-1+ ... v1x1+v0x0; где n - длина кода; vi - коэффициенты из поля GF(q). Если код построен над полем GF(2), то коэффициенты принимают значения 0, 1 и код называется двоичным.

Пример. Если кодовое слово циклического кода v(1, 0) = 1011101001, то соответствующий ему многочлен v(x)=x9+x7+x6+x5+x3+1.

Например, если код построен над полем GF(q)=GF(23), которое является расширением GF(2) по модулю неприводимого многочлена f(z)=z3+z+1, а элементы этого поля имеют вид, представленный в таблице 3,

Таблица 3

0

000

0

3

011

z+1

0

001

1

4

110

z2+z

1

010

z

5

111

z2+z+1

2

100

z2

6

101

z2+1

то коэффициенты vi(x) принимают значения элементов этого поля и поэтому они сами отображаются в виде многочленов следующего вида v(x)=am-1zm-1+ ... a1z1+a0z0; где m - степень многочлена, по которому получено расширение поля GF(2); ai - коэффициенты, принимающие значение элементов GF(2), т.е. 0 и 1. Такой код называется q-ным. Длина циклического кода называется примитивной и сам код называется примитивным, если его длина n=qm-1 над GF(q). Если длина кода меньше длины примитивного кода, то код называется укороченным или непримитивным. Как следует из определения общее свойство кодовых слов циклического кода - это их делимость без остатка на некоторый многочлен g(x), называемый порождающим. Результатом деления двучлена xn+1 на многочлен g(x) является проверочный многочлен h(x). При декодировании циклических кодов используются многочлен ошибок e(x) и синдромный многочлен S(x). Многочлен ошибок степени не более (n-1) определяется из выражения e(x)=v'(x)+v(x); где v'(x), v(x) - многочлены, отображающие соответственно принятое (с ошибкой) и переданное кодовые слова. Ненулевые коэффициенты в е(x) занимают позиции, которые соответствуют ошибкам.

Пример. v(x)=x6+x4+x3+x+1(1011011);v'(x)=x6+x4+x2+x+1(1010111);e(x)=x3+x2 (0001100);

Синдромный многочлен, используемый при декодировании циклического кода, определяется как остаток от деления принятого кодового слова на порождающий многочлен, т.е. Si(x)=Rg(x)[v'(x)]=Rg(x)[v'(x)+ei(x)]=Rg(x)[ei(x)]. Следовательно, синдромный многочлен зависит непосредственно от многочлена ошибок е(х).Это положение используется при построении таблицы синдромов, применяемой в процессе декодирования. Эта таблица содержит список многочленов ошибок (см. первый столбец стандартного расположения кода в разделе 2.4) и список соответствующих синдромов, определяемых из выражения Si(x)= Rg(x)[ei(x)].

Таблица 4

(x)

S(x)

(x)

S(x)

1

Rg(x)[1]

x+1

Rg(x)[x+1]

x

Rg(x)[x]

x2+1

Rg(x)[x2+1]

x2

Rg(x)[x2]

...

...

...

...

В процессе декодирования по принятому кодовому слову вычисляется синдром, затем в таблице находится соответствующий многочлен е(х), суммирование которого с принятым кодовым словом дает исправленное кодовое слово, т.е. vi(x)=vi'(x)+ei(x).

Перечисленные многочлены v(x); v'(x); g(x); h(x); e(x); S(x) можно складывать, умножать, делить, используя правила алгебры, но с приведением результата по mod 2, а затем по mod xn+1, если степень результата превышает степень (n-1).

Пример. Допустим, что длина кода n=7, то результат приводим по mod(x7+1): (x8+ x5+x4+x2+x+1) mod(x7+1)= x5+x4+x2+1.

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

Соседние файлы в папке Лабораторная 8