домашняя библиотека
Поиск в библиотеке
Навигация по предметам
Последние добавленные новости
Реклама

Дискретная математикаДискретная математика – пособие (Часть 3 из 5). Кодирование сигналов

Пример 2.5.

Пусть должны передаваться 4-х разрядные двоичные числа от (0000)2 до (1111)2, т.е. от 0 до 15 в десятичной системе. Для построения самокорректирующегося кода, рассчитанного на исправление одиночных ошибок, необходимо добавить 3 контрольных разряда (в соответствии с (2.15) при k = 4,
r = 3). Итого общее число разрядов – 7. Согласно сказанному выше, 1-ю контрольную группу составляют 1-й, 3-й, 5-й, 7-й разряды, вторую – 2-й, 3-й, 6-й и 7-й разряды, третью – 4-й, 5-й, 6-й и 7-й разряды. Контрольными разрядами являются 1-й, 2-й и 4-й. Само число размещается в 3-м, 5-м, 6-м и 7-м разрядах. Определив значение контрольных разрядов так, чтобы количество единиц в каждой контрольной группе было четным, получим код Хэмминга для каждого из 16 чисел как показано в табл. 2.11.

Таблица 2.11

Ч и с л о
Самокорректирующийся код

Десятичное

Двоичное

Номера разрядов

7 6 5 4 3 2 1

0

0000

0 0 0 0 0 0 0

1

0001

0 0 0 0 1 1 1

Продолжение таблицы 2.11

2

0010

0 0 1 1 0 0 1

3

0011

0 0 1 1 1 1 0

4

0100

0 1 0 1 0 1 0

5

0101

0 1 0 1 1 0 1

6

0110

0 1 1 0 0 1 1

7

0111

0 1 1 0 1 0 0

8

1000

1 0 0 1 0 1 1

9

1001

1 0 0 1 1 0 0

10

1010

1 0 1 0 0 1 0

11

1011

1 0 1 0 1 0 1

12

1100

1 1 0 0 0 0 1

13

1101

1 1 0 0 1 1 0

14

1110

1 1 1 1 0 0 0

15

1111

1 1 1 1 1 1 1

Предположим теперь для примера, что при передаче изображения числа 9 (т.е. кода 1001100) произошла ошибка в 5-м разряде, так что был принят код 1011100. Произведя в принятом коде контроль по четности внутри контрольных групп, мы обнаружили бы, что количество единиц нечетно в 1-й и 3-й контрольной группах и четно во 2-й контрольной группе. Это указывает, во-первых, на наличие ошибки и, во-вторых, означает, что номер ошибочно принятого разряда в двоичном представлении содержит единицу на первом и на третьем местах и нуль – на втором месте. Иначе говоря, номер разряда, в котором произошла ошибка, равен 5 (так как (101)2 = (5)10). Заменив в 5-м разряде принятую цифру на противоположную, получим правильный код.

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

Если бы в рассмотренном выше примере при передаче кода числа 9 (т.е. кода 1001100) ошибка произошла не только в 5-м, но и в 7-м разряде, то был бы принят код 0011100. Количество единиц в 1-й контрольной группе четно, во 2-й нечетно, в 3-й четно. Внешне дело выглядит так, как будто произошла ошибка при передаче 2-го разряда (так как (010)2 = (2)10). Однако исправление 2-го разряда дало бы код 0011110, еще более отличающийся от правильного, чем принятый.

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

Можно построить и такой код, который обнаруживал бы двойные ошибки и исправлял одиночные. Для этого к самокорректирующемуся коду, рассчитанному на исправление одиночных ошибок, нужно приписать еще один контрольный разряд (разряд двойного контроля), при этом dмин = 4. Полное количество разрядов кода при этом будет равно m = k + r + 1, где k – количество информационных разрядов, r определяется по (2.15). Цифра в разряде двойного контроля устанавливается такой, чтобы общее количество единиц во всех т разрядах кода было четным. Этот разряд не включается в общую нумерацию разрядов и не входит ни в одну контрольную группу. Пример
такого кода приведен в табл. 2.12.

Таблица 2.12

Ч и с л о
Самокорректирующийся код

Десятичное

Двоичное

Номера разрядов

д.к. 7 6 5 4 3 2 1

0

0000

0 0 0 0 0 0 0 0

1

0001

1 0 0 0 0 1 1 1

2

0010

1 0 0 1 1 0 0 1

3

0011

0 0 0 1 1 1 1 0

4

0100

1 0 1 0 1 0 1 0

5

0101

0 0 1 0 1 1 0 1

6

0110

0 0 1 1 0 0 1 1

7

0111

1 0 1 1 0 1 0 0

8

1000

0 1 0 0 1 0 1 1

9

1001

1 1 0 0 1 1 0 0

10

1010

1 1 0 1 0 0 1 0

11

1011

0 1 0 1 0 1 0 1

12

1100

1 1 1 0 0 0 0 1

13

1101

0 1 1 0 0 1 1 0

14

1110

0 1 1 1 1 0 0 0

15

1111

1 1 1 1 1 1 1 1

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

1. в принятом коде в целом и по всем контрольным группам количество единиц четно;

2. в принятом коде в целом количество единиц нечетно, но во всех контрольных группах количество единиц четно;

3. в принятом коде в целом и в некоторых из контрольных групп количество единиц нечетно;

4. в принятом коде в целом количество единиц четно, но в некоторых контрольных группах имеется нечетное количество единиц.

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

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

   
 
  • Добавлен: 18-09-2010, 01:26 | Просмотров: 21528

    support: admin@sdb.su