Код исправления ошибок

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

Чтобы бороться с ошибками, используются специ­альные коды, умеющие обнаруживать и исправлять ошибки.

В этом случае к ка­ждому слову в памяти особым образом добавляются дополнительные биты. Ко­гда слово считывается из памяти, эти дополнительные биты проверяются, что и позволяет обнаруживать ошибки.

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

Пусть общая длина слова составит n бит (то есть n = m + r). Совокупность из n бит, содержащую m бит данных и r контрольных разрядов, часто называют кодовым словом.

Для любых двух кодовых слов, например 100 010 01 и 101 100 01, можно опре­делить, сколько соответствующих битов в них различаются. В данном примере таких бита три.

Чтобы определить количество различающихся битов, нужно над двумя кодовыми словами произвести логическую операцию ИСКЛЮЧАЮЩЕЕ ИЛИ и сосчитать количество битов со значением 1 в полученном результате.

Число битовых позиций, по которым различаются два слова, называется интер­валом Хэмминга.

Если интервал Хэмминга для двух слов равен d, это значит, что достаточно d битовых ошибок, чтобы превратить одно слово в другое.

На­пример, интервал Хэмминга для кодовых слов 1111 0001 и 0011 0000 равен 3, по­скольку для превращения первого слова во второе достаточно 3 битовые ошибки.

Память состоит из m-разрядных слов, следовательно, существуют 2твариан­тов сочетания битов.

Кодовые слова состоят из пбит, но из-за способа подсчета контрольных разрядов допустимы только 2тиз 2n кодовых слов.

Если в памяти обнаруживается недопустимое кодовое слово, компьютер знает, что произошла ошибка.

В качестве простого примера кода с обнаружением ошибок рассмотрим код, в котором к данным присоединяется один бит четности.

Бит четности выбира­ется таким образом, чтобы число битов со значением 1 в кодовом слове было четным (или нечетным).

Интервал Хэмминга для этого кода равен 2, поскольку любая одиночная битовая ошибка приводит к кодовому слову с неправильной четностью. То есть, достаточно двух одиночных битовых ошибок для перехода от одного допустимого кодового слова к другому допустимому слову.

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

Кроме обнаружения ошибок, коды Хеминга позволяют исправлять обнаруженные ошибки.

Рассмотрим в качестве примера графическую схему, которая иллюстрирует идею кода исправления ошибок для 4-разрядных слов.

 
 

Диаграмма Венна на рис, 2.11 содержит 3 круга, А, В и С, которые вместе образуют семь секторов.

Закодируем в качестве примера слово из 4 бит – 1100, записав по одному биту этого слова в сектора АВ, АВС, АС и ВС в алфавитном порядке.

Далее, добавим бит четности к каждому из трех пустых секторов А, В и С, чтобы сумма битов в каждом из этих кругов получилась четной. Таким образом, кодовое слово, будет состоять из 4 бит данных и 3 бит четности.

 
 

В круге А находится 4 числа: 0, 0, 1 и 1, которые в сумме дают чет­ное число 2,

В круге В находятся числа 1. 1, 0 и 0, которые также в сумме дают чет­ное число 2.

Аналогичная ситуация и для круга С.

В данном примере получилось так, что все суммы одинаковы, но вообще случае возможны также суммы 0 (все 0) и 4 (все 1).

 
 

Предположим, что бит всекторе АС изменился с 0 на 1, как показано на рисунке.

Компьютер, после считывания кодового слова и подсчета контрольных сумм, обнаруживает, что контрольные суммы для кругов А и С являются нечетными. То есть сумма всех битов принадлежащих А равна 3 и принадлежащих С также равна 3.

Един­ственный способ исправить ошибку, изменить только один бит — возвратить значения 0 биту в секторе АС.

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

Использование алгоритма Хэмминга при соз­дании кодов обнаружения и исправления одиночных ошибок для слов любою размера.

В коде Хэмминга к слову, состоящему из тбит, добавляются rбит четности, при этом образуется слово длиной n=т+rбит.

Биты нумеруются с единицы (а не с нуля), причем пер­вым считается крайний левый.

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

Например, к 16-разрядному слову нужно добавить 5 бит четности.

Биты с номерами 1, 2, 4, 8 и 16 — биты четности, все остальные — биты данных. Таким образом кодовое слово содержит 21 бит (16 бит данных и 5 бит четности).

В рассматриваемом примере, для определенности, мы будем ис­пользовать проверку на четность (выбор произвольный).

 
 

Каждый бит четности позволяет проверять определенные битовые позиции. Общее количество битов со значением 1 в проверяемых позициях должно быть чет­ным.

  • бит 1 проверяет биты 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21;
  • бит 2 проверяет биты 2, 3, 6, 7, 10, 11, 14, 15, 18, 19;
  • бит 4 проверяет биты 4, 5, 6, 7, 12, 13, 14, 15, 20, 21;
  • бит 8 проверяет биты 8, 9, 10. 11, 12, 13, 14. 15;
  • бит 16 проверяет биты 16, 17, 18, 19, 20, 21,

В общем случае бит bпроверяется битами b1, b2 , ... , bj такими, что b1 + b2 + … + bj = b, b - это номер бита.

Например, бит 5 проверяется битами 1 и 4, поскольку 1 + 4 = 5,

Бит 6 проверяется битами 2 и 4, поскольку 2 + 4 = 6 и т. д.

Рас­смотрим, что произойдет, если бит 5 изменит значение (например, из-за резкого скачка напряжения). В результате вместо кодового слова 001 011 100 000 101 101 110 получится 001 001 100 000 101 101 110.

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

· неправильный бит четности 1 (биты 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 содер­жат пять единиц);

· правильный бит четности 2 (биты 2, 3, 6, 7, 10, 11, 14, 15, 18. 19 содержат шесть единиц);

· неправильный бит четности 4 (биты 4, 5, 6, 7, 12, 13, 14, 15, 20, 21 содержат пять единиц);

· правильный бит четности 8 (биты 8. 9, 10, 11, 12, 13, 14, 15 содержат две единицы);

· правильный бит четности 16 (биты 16, 17, 18, 19, 20, 21 содержат четыре единицы).

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

Ошибочным должен быть один из битов, проверяемых неправильными битами четности, а именно:

· бит четности 1 - (ошибка в одном из следующих битов 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 и 21).

· бит четности 4 - (ошибка в одном из следующих битов 4, 5, 6, 7, 12, 13, 14, 15, 20, 21)

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

В данном примере общими являются биты 5, 7, 13, 15 и 21.

Поскольку бит четности 2 - пра­вильный, биты 7 и 15 исключаются.

Правильность бита четности 8 исключает наличие ошибки в бите 13.

Наконец, бит 21 также исключается, поскольку бит четности 16 правильный.

В итоге остается бит 5, в котором и кроется ошибка. Поскольку этот бит имеет значение 1, он должен принять значение 0. Так выполняется исправление ошибки.

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

1. Подсчитать все биты четно­сти.

2. Если они правильные, ошибки нет (или есть, но ошибка не однократная).

3. Если обнаружились неправильные биты четности, нужно сложить их номера.

4. Сумма, полученная в результате, даст номер позиции ошибочного бита.

5. Значение ошибочного бита инвертируется (0 заменяется 1, а 1 заменяется 0)

На­пример, если биты четности 1 и 4 неправильные, а 2, 8 и 16 правильные, то ошибка произошла в бите 5(1+ 4).








Дата добавления: 2015-07-24; просмотров: 1421;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.014 сек.