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

Кодирование информации

.pdf
Скачиваний:
43
Добавлен:
20.04.2015
Размер:
958.2 Кб
Скачать

содержащих нечетное число единиц, так как из всех четных многочленов легко выделить двучлен (X+1), т. е. четные многочлены состоят минимум из двух сомножителей и не могут служить однозначным критерием при определении ошибочной комбинации.

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

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

И(X)= X3 +X2 +11101.

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

К(X)= X3 +X+11011.

Затем умножаем И(X) на одночлен той же степени, что и образующий многочлен. От умножения многочлена на одночлен степени n степень каждого члена многочлена повысится на n, что эквивалентно приписыванию n нулей со стороны младших разрядов многочлена. Так как степень выбранного неприводимого многочлена равна трем, то исходная информационная комбинация умножается на одночлен третьей степени

И(X)Xn =(X3 + X2 +1)X3 =X6 + X5 + X3 =1101000.

Осуществляется эта процедура для того, чтобы впоследствии вместо этих нулей можно было записать корректирующие разряды. Значение корректирующих разрядов находят в результате деления И(X)Xn на К(X):

28

 

 

 

 

 

 

 

 

 

 

В результате деления

И(Х)X3

= X3 + X 2

+ X+1 +

 

 

1

 

в общем виде

K(X)

 

X3

+ X+1

 

 

 

 

 

 

 

 

 

И(X)Xn

 

R(X)

 

 

 

 

 

 

 

 

 

= Q(X)

+

 

 

,

 

 

 

(2.13)

 

K(X)

 

K(X)

 

 

 

где Q(X) – частное, а R(X) – остаток от деления И(X) на K(X).

Так как в двоичной арифметике 1 1=0, а значит и –1=1, то можно при сложении двоичных чисел переносить слагаемые из одной части равенства в другую без изменения знака (если это удобно), поэтому равенство вида а b=0 можно записать и как а=b, и как а–b=0. Все три равенства в данном случае означают, что либо и а и b равны 0, либо и а и b равны 1, т. е. имеют одинаковую четность.

На основании изложенного выражение (2.13) можно записать как

F(X)= И(X)Xn =Q(X)K(X)+ R(X)

(2.14)

после переноса R(X) в левую часть равенства (2.14)

 

F(X)=Q(X)K(X)= И(X)Xn + R(X),

(2.15)

что для нашего примера даст

F(X)=(X3 + X2 + X+1)(X3 + X+1)=(X3 + X2 +1)X3 +1,

или

F(X)=1111 1011 =1101000 +001 =1101001.

Многочлен 1101001 и есть искомая комбинация, где 1101 – информационная часть, а 001 – контрольные символы. Заметим, что искомую комбинацию мы получили бы как в результате умножения одной из комбинаций четырехзначного двоичного кода на все сочетания (в данном случае 1111) на образующий многочлен, так и умножением заданной комбинации на одночлен, имеющий ту же степень, что и выбранный образующий многочлен (в нашем случае таким образом была получена комбинация 1101000) с последующим добавлением к полученному

29

произведению остатка от деления этого произведения на образующий многочлен (остаток имел вид 001).

Шифраторы циклических кодов, в том или ином виде, построены по принципу умножения двоичных многочленов, так как даже если кодовые комбинации получаются в результате сложения соседних комбинаций по модулю 2, то это, как мы увидим ниже, эквивалентно умножению первой комбинации на двучлен X+1.

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

000101 0 X5 + 0 X4 + 0 X3 +1 X2 + 0

X1 +1 X0

= X2 +1;

001010 0 X5 + 0 X4 +1 X3 + 0 X2

+1

X1 + 0 X0

= X3

+ X;

010100 0 X5 +1 X4 + 0 X3 + 0 X2

+ 0 X1 + 0 X0

= X4

+ X2 ;

101000 1 X5 + 0 X4 +1 X3 + 0 X2 + 0 X1 + 0 X0

= X5 + X3 .

Циклический сдвиг кодовой комбинации аналогичен умножению

соответствующего многочлена на X:

 

 

 

 

 

 

 

(X2 +1) X = X3

+X

001010

;

 

 

(X3 +X) X = X4

+X2

010100

;

 

 

(X4 +X2 ) X = X5

+X3

101000.

 

 

Если степень многочлена достигает разрядности кода, то происходит «перенос» в нулевую степень при X, и цикл повторяется. В шифраторах циклических кодов эта операция осуществляется путем соединения выхода ячейки старшего разряда со входом ячейки нулевого разряда.

Сложение по модулю 2 любых двух соседних комбинаций циклического кода эквивалентно операции умножения многочлена, соответствующего комбинации первого слагаемого, на многочлен X+1, если приведение подобных членов осуществляется по модулю 2:

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

30

Принцип формирования опознавателей ошибок в циклических кодах

Однако мало построить циклический код. Надо уметь выделить из него возможные ошибочные разряды, т. е. ввести некоторые опознаватели ошибок, которые выделяли бы ошибочный блок из всех других. Так как циклические коды – блочные, то каждый блок должен иметь свой опознаватель. И тут решающую роль играют свойства образующего многочлена К(X). Методика построения циклического кода такова, что образующий многочлен принимает участие в образовании каждой кодовой комбинации, поэтому любой многочлен циклического кода делится на образующий без остатка. Но без остатка делятся только те многочлены, которые принадлежат данному коду, т. е. образующий многочлен позволяет выбрать разрешенные комбинации из всех возможных. Если же при делении циклического кода на образующий многочлен будет получен остаток, то это значит, что в коде произошла ошибка или эта комбинация какого-то другого кода (запрещенная комбинация), что для декодирующего устройства не имеет принципиальной разницы. По остатку и обнаруживается наличие запрещенной комбинации, т. е. обнаруживается ошибка. Остатки от деления многочленов являются опознавателями ошибок циклических кодов.

Остатки от деления единицы с нулями на образующий многочлен используют для построения циклических кодов – возможность этого видна из выражения (2.15).

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

Пример 2.8. Получить остатки от деления единицы на образующий многочлен 1011.

Решение:

31

Остатки от деления:

 

 

1)

011

4) 101

7) 100

2)

110

5) 001

8) 011

3)

111

6) 010

9) 110

Начиная с восьмого, остатки будут повторяться.

Построение циклических кодов с использованием образующих матриц

Остатки от деления используют для построения образующих матриц, которые, благодаря наглядности и удобству получения производных комбинаций, получили широкое распространение для построения циклических кодов. Построение образующей матрицы сводится к составлению единичной транспонированной и дополнительной матрицы, элементы которой представляют собой остатки от деления единицы с нулями на образующий многочлен К(X). Элементы дополнительной матрицы приписываются справа от единичной транспонированной матрицы.

Однако не все остатки от деления единицы с нулями на образующий многочлен могут быть использованы в качестве элементов дополнительной матрицы, а лишь те из них, вес которых W d0 1, где d0 – минимальное

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

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

Пример 2.9. Используя метод образующих матриц, построить циклический код, исправляющий одинарные ошибки при передаче комбинаций четырехзначного двоичного кода на все сочетания (кроме нулевой комбинации).

Решение:

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

d0=3, следовательно, число разрядов дополнительной матрицы должно быть nк=3, а каждый остаток должен содержать три разряда.

2.Из приложения выбираем многочлен, степень которого больше или

равна 3, число ненулевых членов также должно быть больше или равно 3. Выбираем многочлен Х3+ Х2+ 1.

3.Число строк, столбцов транспонированной матрицы равно nи=4, так как исходный код четырехразрядный.

4.Число единиц в каждом остатке (вес остатка) от деления единицы с

нулями на образующий многочлен должно быть W d0 13 12.

32

5. Соблюдая условия 1 и 4, находим остатки от деления единицы с нулями на образующей многочлен:

Остатки от деления:

1)101

2)111

3)011

4)110

6. Строим образующую матрицу:

 

0

0

0

1

1

0

1

С7,4 =

0

0

1

0

1

1

1

 

0

1

0

0

0

1

1

 

1

0

0

0

1

1

0

Четыре строки матрицы образуют кодовые комбинации циклического кода:

X 1

=

0

0

0

1

1

0

1

X 2

=

0

0

1

0

1

1

1

X 3

=

0

1

0

0

0

1

1

X 4

=

1

0

0

0

1

1

0

7. Путем суммирования по модулю 2 всевозможных сочетаний строк образующей матрицы находим остальные комбинации искомого кода (первые четыре комбинации – строки образующей матрицы):

33

Описанный выше метод построения образующих матриц не являетcя единственным.

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

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

Пример 2.10. При помощи образующей матрицы, полученной в результате умножения единичной матрицы на образующий многочлен X3+X+1, построить циклический код, исправляющий одиночную ошибку в любом из четырех информационных разрядов.

Решение:

1.Так как в искомом коде nи = 4, то единичная матрица содержит 4 строки.

2.Строим образующую матрицу:

0001 x 1011 =

0001011

(X1 )

 

 

0

0

0

1

0

1

1

 

 

 

 

0010 x 1011 = 0010110

(X2 )

С7,4

=

0

0

1

0

1

1

0

 

0100 x 1011 = 0101100

(X3 )

0

1

0

1

1

0

0

 

1000 x 1011 =

1011000 (X4 )

 

 

1

0

1

1

0

0

0

 

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

3. Находим остальные комбинации кода путем суммирования по модулю 2 строк образующей матрицы, используя п. 7 (стр. 33):

Х5= 0011101

Х6= 0100111

Х7= 1010011

Х8= 0111010

Х9= 1001110

Х10=1110100

Х11=0110001

Х12=1100010

Х13=1000101

Х14=1111111

Х15=1101001

 

34

Сгруппируем полученные коды

 

 

1) 0001011

6) 1100010

11)

1101001

2) 0010110

7) 1000101

12)

1010011

3) 0101100

8) 0011101

13)

0100111

4) 1011000

9) 0111010

14)

1001110

5) 0110001

10) 1110100

15)

1111111.

Построение циклических кодов непосредственным умножением информации на образующий многочлен

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

Пример 2.11. Методом умножения по модулю 2 образующего многочлена на многочлены четырехзначного двоичного кода на все сочетания построить циклический код.

Решение:

1)

0 0 0 1 0 1 1

2)

0 0 1 0 1 1 0

3)

0 0 1 1 1 0 1

4)

0 1 0 1 1 0 0

5)

0 1 0 0 1 1 1

6)

0 1 1 1 0 1 0

7)

0 1 1 0 0 0 1

8)

1 0 1 1 0 0 0

9)

1 0 1 0 0 1 1

10) 1 0 0 1 1 1 0

11) 1 0 0 0 1 0 1

12) 1 1 1 0 1 0 0

13) 1 1 1 1 1 1 1

14) 1 1 0 0 0 1 0

15) 1 1 0 1 0 0 1

Сгруппировав 14 из 15 полученных комбинаций в колонки I и II, легко

заметить циклический сдвиг комбинации:

 

 

1) 0 0 1 1 1 0 1

6)

0 1 0 0 1 1 1

11)

1 0 1 1 0 0 0

2) 0 1 1 1 0 1 0

7)

1 0 0 1 1 1 0

12)

0 1 1 0 0 0 1

3) 1 1 1 0 1 0 0

8)

0 0 0 1 0 1 1

13)

1 1 0 0 0 1 0

4) 1 1 0 1 0 0 1

9)

0 0 1 0 1 1 0

14)

1 0 0 0 1 0 1

5) 1 0 1 0 0 1 1

10) 0 1 0 1 1 0 0

15)

1 1 1 1 1 1 1

Как видим, кодовые комбинации 1...15 ничем не отличаются от кодовых комбинаций, полученных в примере 2.10.

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

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

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

35

остатке не будет равно числу ошибок, которое еще способен исправить данный код. При этом, естественно, число единиц может быть равно числу ошибок S, исправляемых данным кодом (код исправляет три ошибки и в искаженной комбинации три ошибки), или меньше S (код исправляет три ошибки, а в принятой комбинации – одна ошибка).

Место ошибки в кодовой комбинации не имеет значения. Достаточно получить один остаток, вес которого W S, и этого достаточно для исправления искаженной комбинации. В этом смысле циклические коды могут исправлять пачки ошибок, лишь бы длина пачки не превышала S.

Процедура исправления ошибок рассматривается на примере построения кодов, исправляющих одиночную ошибку, d0=3.

Построение и декодирование конкретных циклических кодов сводится к следующим стандартным процедурам.

1. Расчет соотношения между контрольными и информационными символами кода.

Если задано число информационных разрядов nи, то число контрольных

разрядов nк находится из выражения

 

n к = [log 2 {(n и +1)+ [log 2 (n и +1)]}],

(2.16)

общее число символов кода

 

n = nи + nк .

 

Если задана длина кода n, то число контрольных разрядов

 

n к =[log 2 (n+1)].

(2.17)

Соотношение числа контрольных и информационных символов для кодов

сd0=3 приведены в табл. 1 Приложения.

2.Выбор образующего многочлена производится по таблицам неприводимых двоичных многочленов Приложения.

Образующий многочлен К(X) следует выбирать как можно более коротким, но, с одной стороны, степень его должна быть не меньше числа контрольных разрядов, с другой – число ненулевых членов К(X) должно быть не меньше минимального кодового расстояния d0.

3.Выбор параметров единичной транспонированной матрицы происходит из условия, что число столбцов (строк) матрицы определяется числом информационных разрядов, т. е. ранг единичной матрицы равен nи.

4.Определение элементов дополнительной матрицы производится по остаткам от деления последней строки транспонированной матрицы (единицы с нулями) на образующий многочлен. Полученные остатки должны удовлетворять следующим требованиям:

а) число разрядов каждого остатка должно быть равно числу контрольных

символов nk, следовательно, число разрядов дополнительной матрицы должно быть равно степени образующего многочлена;

б) число остатков должно быть не меньше числа строк единичной транспонированной матрицы, т. е. должно быть равно числу информационных разрядов nи;

36

в) число единиц каждого остатка, т. е. его вес, должно быть не менее величины W=d0–1, d0 – минимальное кодовое расстояние, т. е. не меньше числа обнаруживаемых ошибок;

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

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

6.Комбинациями искомого кода являются строки образующей матрицы и всевозможные суммы по модулю 2 различных сочетаний строк образующей матрицы.

Коды, полученные при использовании неприводимых многочленов вида X3+X2+1 и X3+X+1, подобны друг другу и обладают равноценными корректирующими способностями. Сами же многочлены 1101 и 1011 называют обратными, или двойственными, многочленами. Если данный многочлен неприводимый, то неприводимым будет и двойственный ему многочлен.

7.Обнаружение и исправление ошибок происходит по остаткам от деления принятой комбинации F(X) на образующий многочлен К(X). Если принятая комбинация делится на образующий многочлен без остатка, то код принят безошибочно. Остаток от деления свидетельствует об ошибке, но не указывает, какой именно. Чтобы найти ошибочный разряд и исправить его в циклических кодах, принято осуществлять следующие процедуры:

а) принятая комбинация делится на образующий многочлен;

б) подсчитывается количество единиц в остатке (вес остатка). Если W S, где S – допустимое число исправляемых данным кодом ошибок, то принятая комбинация складывается по модулю 2 с полученным остатком. Сумма даст исправленную комбинацию. Если W>S, то

в) делим полученную в результате циклического сдвига комбинацию на образующий многочлен K(X). Если в остатке W S , то складываем делимое с остатком. Затем производим циклический сдвиг вправо комбинации, полученной в результате суммирования последнего делимого с остатком. Полученная комбинация уже не содержит ошибок. Если после первого циклического сдвига и последующего деления остаток получается таким, что его вес W>S, то

г) повторяется процедура в) до тех пор, пока не будет W S . В этом случае комбинация, полученная в результате последнего циклического сдвига, суммируется с остатком от деления этой комбинации на образующий многочлен, а затем

д) производится циклический сдвиг вправо на столько разрядов, на сколько была сдвинута суммируемая с последним остатком комбинация относительно принятой. В результате получим исправленную комбинацию.

37