Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Kachestvo_Vyichislitelnyih_i_informatsionnyih_sistem.doc
Скачиваний:
5
Добавлен:
28.06.2024
Размер:
359.42 Кб
Скачать

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

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

где Аi, – цифра i-ro разряда числа, μi – весовой коэффициент i-ro разряда числа. В простейшем случае при 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).

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

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

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

Обозначим через i номера разрядов в образованном кодовом слове, тогда номера контрольных разрядов будут i=j. Значение символа Aj в 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-ом контрольном разряде (A1, A2, A4, A8) рассчитывается так:

E1 = A1 + A3 + A5 + A7 + A9 + A11 + A13 + A15 = 0 mod 10.

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

A1 + 9 + 0 + 2 + 3 + 9+0+1=0 mod 10, при A1 = 6;

E2 = A2 + A3 + A6 + A7 + A10 + A11 + A14 + A15 = 0 mod 10, при A2 = 2;

E4 = A4 + A5 + A6 + A7 + A12 + A13 + A14 + A15 = 0 mod 10, при A4 = 8;

E8 = A8 + A9 + A10 + A11 + A12 + A13 + A14 + A15 = 0 mod 10, при A8 = 5.

Сформированное таким образом разрешенное избыточное кодовое слово позволяет не только обнаружить, но и автоматически исправить любую однократную ошибку. Такая ошибка переведет кодовое слово в категорию запрещенных потому, что хотя бы одна частная контрольная сумма Ej по модулю 10 будет отлична от 0. Это определяет правило обнаружения ошибки: если проверка кодового слова после его информационного преобразования, производимая путем подсчета частных сумм E1, E2, E4, E8,..., ES, даст хотя бы одну Ej, не равную нулю по модулю 10, значит, при преобразовании была допущена ошибка.

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

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

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

,

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

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

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

Aiош прав = (AiошEr) mod 10.

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

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

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 (учитыва­ется только разряд единиц, а десятки, сотни и т.д. отбрасываются) E1 = 0, E2 = 0, E4 = 8, E8 = 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.