Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава22.DOC
Скачиваний:
67
Добавлен:
14.04.2019
Размер:
372.22 Кб
Скачать

Десятичные коды с обнаружением однократных ошибок

В общем случае в исходное десятичное число (слово) вводится один или несколько дополнительных контрольных разрядов так, чтобы сумма всех цифр числа была кратна q, то есть:

где Ai — цифра i-го разряда числа, μi — весовой коэффициент i-го разряда числа.

В простейшем случае при q = 10 добавляется всего один контрольный разряд, обнаруживаются все однократные ошибки и большинство ошибок более высоких кратностей.

Например, исходное число 90 723 092 001, сумма цифр числа равна 33. Чтобы сумма цифр кодового слова была кратна 10, следует добавить в конце числа цифру 7 — новое число 907 230 920 017. Эта кодовое слово будет разрешенным, поскольку сумма цифр у него кратна q = 10. Любая однократная ошибка (искажение одной цифры) переведет это кодовое слово в категорию запрещенных — сумма цифр не будет кратна 10.

Повысить обнаруживающую способность кода для ошибок второй и больших кратностей (в частности, для обнаружения ошибок типа перестановок соседних цифр) можно, использовав при q = 10 следующую оптимальную последовательность весовых коэффициентов: μi = 1, 7, 9, 3, 1, 7 и т д. (в качестве μi нельзя брать значения четные или кратные 5, поскольку q = 10 = 2 · 5, q — составное число). Этого же можно достигнуть и при любых значениях μi, взяв в качестве модуля простое число, например q = 11, но в последнем случае придется добавить два контрольных разряда (кстати, при двух контрольных разрядах оптимальное значение q = 97).

Десятичные коды с автоматическим исправлением однократных ошибок

В качестве примера возьмем двоичный код Хэмминга, модифицированный одним из авторов книги на позиционную систему счисления с произвольным основанием [4, 6].

В исходное m-разрядное кодовое слово вводится дополнительно k контрольных разрядов так, что их номера j равны целой степени числа 2: j = 1, 2, 4, 8, 16, …2k – 1.

Обозначим через i номера разрядов в образованном кодовом слове, тогда номера контрольных разрядов будут i = j. Значение символа Аj в j-м контрольном разряде выбирается из условия кратности q = 10 контрольной суммы Ej, соответствующей этому разряду:

где n = m + k,

(μi = 0 при четном значении ближайшего большего целого частного i/j, и μi = 1 при нечетном значении ближайшего большего целого частного i/j).

примечаНИЕ

Мнемоническое правило — контрольный разряд с номером i проверяет последовательно группу из i разрядов через i разрядов, начиная с себя самого.

Рассмотрим пример помехозащищенного кодирования. Запишем разрядную сетку (курсив) избыточного слова:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

6

2

9

8

0

7

2

5

3

0

9

2

0

0

1

Подчеркнутые разряды считаем проверочными, а в остальные разряды записывается исходное слово — 90 723 092 001 для кодирования. Контрольная цифра в j-м контрольном разряде (А1, А2, А4, А8) рассчитывается так:

E1 = A1 + A3 + A5 + А7 + А9 + А11 +А13 + А15 = 0 mod 10.

Для нашего числа:

1 + 9 + 0 + 2 + 3 + 9 + 0 + 1 = 0 mod 10, А1 = 6;

Е2 = A2 + A3 + A6 + А7 + А10 + А11 + А14 + А15 = 0 mod 10, А2 = 2;

Е4 = A4 + A5 + A6 + А7 + А12 + А13 + А14 + А15 = 0 mod 10, А4 = 8;

Е8 = A8 + A9 + A10 + А11 + А12 + А13 + А14 + А15 = 0 mod 10, А8 = 5.

Сформированное таким образом разрешенное избыточное кодовое слово позволяет не только обнаружить, но и автоматически исправить любую однократную ошибку. Такая ошибка переведет кодовое слово в категорию запрещенных потому, что хотя бы одна частная контрольная сумма Ei по модулю 10 будет отлична от 0. Это определяет правило обнаружения ошибки: если проверка кодового слова после его информационного преобразования, производимая путем подсчета частных сумм Е1, Е2, Е4, Е8, ... , Es даст хотя бы одну Еi, не равную нулю по модулю 10, значит, при преобразовании была допущена ошибка.

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

  1. Все частные суммы Еi=0. Это означает отсутствие однократных ошибок при выполнении преобразования (и с большой вероятностью — отсутствие ошибок вообще).

  2. Хотя бы одна из сумм Еi не равна нулю, но все не равные нулю частные суммы Еi равны между собой (по модулю 10). Можем считать с большой вероятностью, что произошла однократная ошибка при преобразовании; ее адрес — номер искаженного разряда в виде двоичного кода можем определить из выражения:

iош = Es Es/2E4 E2 E1,

где Ei = 0, если Ei = 0, и E = 1 — в противном случае (мнемоническое правило: адрес ошибки равен сумме индексов частных контрольных сумм, не равных нулю).

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

Допустим, мы имеем Ei Er ≠ 0. Следовательно, при преобразовании произошло либо увеличение цифры по найденному адресу iош, на Er единиц, либо ее уменьшение на 10 – Er единиц. В любом случае, чтобы исправить эту ошибку, можно вычислить правильное значение цифры по формуле

Aiош прав = (Аiош – Еr) mod 10.

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

Теперь рассмотрим пример декодирования. Допустим, в разрешенном кодовом слове

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

6

2

9

8

0

7

2

5

3

0

9

2

0

0

1

допущена ошибка в 12-м разряде: вместо 2 появилась ошибочная цифра 0, то есть получили кодовое слово:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

6

2

9

8

0

7

2

5

3

0

9

0

0

0

1

Это слово относится к категории запрещенных, поскольку по модулю 10 (учитывается только разряд единиц, а десятки, сотни и т. д. отбрасываются) Е= 0, Е= 0, Е= 8, Е8 = 8. Все не равные нулю частные контрольные суммы равны между собой и равны Er = 8, следовательно, произошла однократная ошибка, и ее можно исправить. Адрес ошибки — двоичный код номера искаженного разряда: iош = 1100, то есть ошибка имела место в 12 разряде (сумма индексов частных ненулевых контрольных сумм равна: 8 + 4 = 12).

Исправляем ее:

i12 прав = i12 ош – Er = (0 – 8) mod 10 = 2

ПРИМЕЧАНИЕ

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

Действительно, верное значение цифры в 12-м разряде — 2. Ошибка исправлена.

Данный код позволяет обнаружить подавляющее число ошибок кратности 2 и выше (без их исправления). Для более высокой эффективности обнаружения ошибок к рассматриваемому кодовому слову можно добавить еще один проверочный разряд (нулевой), которым контролировать по модулю 10 сумму всех цифр избыточного кодового слова (включая контрольные разряды). Более полное исследование эффективности рассматриваемых кодов приведено в работах [6, 8]. Широко известные двоичные коды Хэмминга с автоматическим исправлением ошибок являются частным случаем рассмотренных кодов при модуле q = 2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]