- •Помехоустойчивое кодирование
- •1. Помехоустойчивые коды и их основные параметры
- •1.1 Принцип построения помехоустойчивых кодов
- •1.2 Основные параметры помехоустойчивых кодов
- •1.3 Граничные соотношения между параметрами помехоустойчивых кодов
- •2. Линейные блоковые коды
- •2.1 Способы задания линейных кодов
- •2.2 Основные свойства линейных кодов
- •2.3 Стандартное расположение группового кода
- •3. Коды Хэмминга
- •4. Циклические коды
- •4.1 Основные понятия
- •4.2 Матричное задание кодов
- •4.3 Коды бчх
- •4.4 Способы кодирования и схемная реализация кодирующих устройств
- •4.5 Способы декодирования с обнаружением ошибок и схемная реализация декодирующих устройств
- •4.6 Способы декодирования с исправлением ошибок и схемная реализация декодирующих устройств
- •4.7 Коды Рида-Соломона (рс)
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.
При построении и декодировании циклических кодов в результате деления многочленов обычно необходимо иметь не частное, а остаток от деления. Поэтому рекомендуется более простой способ деления, используя не многочлены, а только его коэффициенты.
