Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_dlya_ekzamena_po_mikroprocessornym_sreds....doc
Скачиваний:
26
Добавлен:
19.04.2019
Размер:
1.82 Mб
Скачать

38. Преобразование двоичных чисел в десятичные с помощью регистров сдвига.

39. Код Хемминга.

Простая идея, лежащая в основе кодов Хэмминга, состоит в требовании того, чтобы синдром давал фактическое положение ошибки, а равный 0 синдром означал, что ошибка отсутствует. Какими должны быть проверки на четность? Посмотрим на двоичное представление номеров позиций (табл. 3.4.1). Ясно, что если синдром указывает позицию ошибки (когда она произошла), то каждая позиция, для которой последняя цифра ее номера, записанного в двоичном представлении, равна 1, должна входить в первую проверку на четность (см. крайний правый столбец). Аккуратно продумайте, почему это так. Аналогично, во вторую проверку на четность должны входить те позиции, для которых равно 1 вторая справа цифра их номера записанного в двоичном представлении и т. д.

Таким образом, в первую проверку на четность входят позиции 1, 3, 5, 7, 9, 11, 13, 15, ..., во вторую — 2, 3, 6, 7, 10, 11, 14, 15 . .., в третью — 5, 6, 7, 12, 13, .14, 15, .... в следующею -8, 9, 10, 12, 13, 14, 15 и т, д.

Для иллюстрации сказанного (табл. 3.4.2) построим простой код с исправлением ошибки для четырех двоичных символов

правильность принятого кода определяется z проверками, которые производятся путем суммирования по модулю 2соответствующей проверочной информации. В результате мы получаем числа s1, s2, s3 они называются проверочными векторами или синдромами. Где номер это номер проверки. Равенство синдрома нулю свидетельствует об отсутсвии ошибок иначе –присутсвует ошибка..код Хемминга позволяет не только обнаружить но и исправить ее. Код Хемминга (n,k,d код). В результате зэт- проверок получаем двоичное число, которое при переводе в десятичное указывает на какой позиции произонла ошибка.

Терь как эта чушь работает:

Смотри картинку выше. Исходное сообщение у нас было 0110011 приняли уже с ошибкой 0100011 (ошибка в 3 разряде) тут типа нумерация слева направо

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

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

s1=а1+а3+а5+а7+а9 итд итп

s2=а2+а3+а6+а7 итд

сооответсвенно для третьего синдрома все также продолжается где единички в 3 разряде. Суммирование идет по модулю 2.

Итак терь начинаем определять ошибки:

Делаем первую проверку. Берем принятое сообщение и составляем первую проверку т.е. складываем по модулю 2 биты стоящие на местах для первого синдрома (1, 3, 5, 7, итд)

s1=0+0+0+1=1- проверка не выполняется

следовательно делаем вторую

s2=1+0+1+1=1 опять не выполняется, делаем третью

s3=0+0+1+1=0 урррррра товарищи проверка выполнена и равна нулю следовательно прекращаем и получаем двоичное число с номером где произошла ошибка оно выглядит следующим образом s3 s2 s1=0 1 1 см чуть выше пачиму. Т.е. при переводе в десятичное число получаем цифру 3 значит ошибка в третьем разряде смотрим на принятый код и исправляем ноль в третьем разряде на единичку все теперь принятый код не отличается от посланного. Вот и сказке конец и взорвался твой мозгец.

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