Помехозащищенные коды. Код Грея, код с контролем паритета, код Хемминга.



Код Грея. В табл. 1.5 код Грея сопоставляется с некоторыми уже известными вам кодами. Важной особенностью кода Грея является то, что при переходе к следующему, ниже расположенному числу в предыдущем числе изменяется только одна цифра (см. правый столбец табл. 1.5). Код Грея нельзя использовать в арифметических схемах. Этот код применяется во входных и выходных устройствах цифровых систем (чаще всего для кодирования пространственного (углового) перемещения), в так называемых датчиках-энкодерах, рис. 1.11. Его использование удобно тем, что два соседних значения шкалы сигнала отличаются только в одном разряде. Также он используется для кодирования номеров дорожек в жёстких дисках. Помехозащищенность кода Грея заключается в том, что при ошибочном кодировании ошибка составляет единицу младшего разряда.

Рисунок 1.11 — Датчик-энкодер углового перемещения

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

Алгоритм перехода от числа в позиционном двоичном коде к коду Грея следующий. Двоичное число надо сложить по модулю 2 (выполнить поразрядную операцию Искл-ИЛИ) с этим же числом, сдвинутым на один разряд вправо. Младший разряд при сложении не учитывается:

a 3 a 2 a 1 a 0

Å 0  a3 a2 a1

g 3 g 2 g 1 g 0

Пример. Преобразовать число 6 в двоичном позиционном коде в код Грея

BIN

Å 0 1 1

Gray

Алгоритм обратного перехода следующий. Старший разряд кода Грея (gi) переносится в соответствующий старший разряд числа в преобразуемом двоичном позиционном коде (ai). Для получения следующего, более младшего разряда преобразуемого позиционного кода (ai-1), соответствующий разряд в коде Грея (gi-1) складывается по модулю 2 c полученным ранее на предыдущем шаге более старшим разрядом позиционного кода (ai). Процесс повторяется до нахождения самого младшего разряда позиционного кода.

g 3 g 2 g 1 g 0   

Å  0  a3 a2 a1

a3 a2 a1 a0    

Пример. Преобразовать число 110 в коде Грея в двоичный позиционный код.

Gray

Å 0 1 0

BIN

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

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

k a6 a5 a4 a3 a2 a1 a0 k a6 a5 a4 a3 a2 a1 a0
1 1 0 1 1 0 1 1 1 1 0 1 0 0 1 1

P=1 Å 1 Å 0 Å 1 Å 1 Å 0 Å 1 Å 1=0                P=1 Å 1 Å 0 Å 1 Å 0 Å 0 Å 1 Å 1=1 Þ

                                                                             Þ произошла ошибка!!!

Код Хемминга. Коды, в которых возможно автоматическое исправление ошибок, называются самокорректирующимися. Для построения самокорректирующегося кода, рассчитанного на исправление одиночных ошибок, одного контрольного разряда недостаточно. Количество контрольных разрядов k должно быть выбрано так, чтобы выполнялось неравенство  или , где m — количество основных (информационных) двоичных разрядов кодового слова. Т.е. число, кодируемое контрольными разрядами, должно описывать ( m+ k+1) различных событий, включая отсутствие ошибки (1 событие) или искажение одного из ( m+k) разрядов ( m+ k событий).

Таблица 1.6 Минимальные значения k при заданных значениях m для построения кода с исправлением одиночной ошибки

Диапазон m kmin
1 2
2-4 3
5-11 4
12-26 5
27-57 6

Имея m+k разрядов, самокорректирующийся код можно построить следующим образом. Присвоим каждому из разрядов свой номер — от 1 (крайнему справа) до m+k (крайнему слева); запишем эти номера в двоичной системе счисления. Поскольку 2k>m + k , номер любого разряда можно представить, очевидно, k-разрядным двоичным числом.

Предположим далее, что все m+k разрядов кода разбиты на контрольные группы, которые частично перекрываются, причем так, что единицы в двоичном представлении номера разряда указывают на его принадлежность к определённым контрольным группам. Например: разряд №5 принадлежит к 1-ой и 3‑ей контрольным группам, потому что в двоичном представлении его номера 510 =01012 — 1-й и 3-й разряды содержат единицы.

Среди m+k разрядов кода при этом имеется k разрядов, каждый из которых принадлежит только к одной контрольной группе:

Разряд № 1: 110 = …000012 принадлежит только к 1-й контрольной группе.

Разряд № 2: 210 = …000102 принадлежит только к 2-й контрольной группе.

Разряд № 4: 410 = …001002 принадлежит только к 3-й контрольной группе.

Разряд № 2k−1 принадлежит только к k-ой контрольной группе.

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

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

Например, довольно распространен код Хемминга с m=7 и k=4.

Пусть исходное слово (кодовое слово без контрольных разрядов) — 10101102.

Обозначим Pi — контрольный разряд №i; а Dj — информационный разряд №j, где i = 1,2,…k, j = 1,2,…m.

Предположим теперь, для примера, что при передаче данного кодового слова 10100110001 произошла ошибка в 11–м разряде, так, что было принято новое кодовое слово 0100110001. Произведя в принятом коде проверку четности внутри контрольных групп, мы обнаружили бы, что количество единиц нечетно в 1-й, 2-й и 4-й контрольных группах, и четно в 3-й контрольной группе. Это указывает, во-первых, на наличие ошибки, во-вторых, означает, что номер ошибочно принятого разряда в двоичном представлении содержит единицы на первом, втором и четвёртом местах и нуль — на третьем месте, т.к ошибка только одна, и 3-я контрольная сумма оказалась верной (табл. 1.7).

Таблица 1.6 — Формирование значений контрольных разрядов кода Хемминга

№ разряда BIN:

1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001

Распределение контрольных и информационных разрядов

d 7 d6 d5 p4 d4 d3 d2 p3 d1 p2 p1

Информационное кодовое слово:

1 0 1 0 1 1 0

Вычисление
контр. разрядов в контр. группах

p1 1   1   0   1   0   1
p2 1 0     0 1     0 0  
p3         0 1 1 0      
p4 1 0 1 0              

Кодовое слово с контрольными разрядами:

1 0 1 0 0 1 1 0 0 0 1

Таблица 1.7 — Проверка контрольных сумм на приемной стороне

№ разряда: 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001    
Распределение контрольных и информационных разрядов d7 d6 d5 p4 d4 d3 d2 p3 d1 p2 p1 Контроль по четности в группе Контрольный бит
Переданное кодовое слово: 1 0 1 0 0 1 1 0 0 0 1    
Принятое кодовое слово: 0 0 1 0 0 1 1 0 0 0 1    
p1 0   1   0   1   0   1 Fail 1
p2 0 0     0 1     0 0   Fail 1
p3         0 1 1 0       Pass 0
p4 0 0 1 0               Fail 1

                      p4 p3 p2 p1

В двоичном представлении   1  0  1  1

В десятичном представлении 8+2+1=11

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

1.10 Компьютерные форматы данных

Успешное программирование требует полного понимания форматов данных. Обычно данные представляются в микрокомпьютерной системе в следующих основных видах: формате ASCII, как двоично-кодированные десятичные числа (BCD), целые числа со знаком и без, а также иногда как числа с плавающей точкой (действительные числа). Могут быть использованы и другие формы представления данных, однако они здесь не описываются, поскольку не являются столь же широко распространенными.


Дата добавления: 2022-01-22; просмотров: 84; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!