Коды Хемминга и их применение
Понятия кодов Хемминга, история их возникновения и сфера применения. Понятие и назначение самоконтролирующихся и самокорректирующихся кодов. Принципы построения самокорректирующихся кодов. Примеры расчётов кодов Хемминга и построения диаграмм чётности.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | реферат |
Язык | русский |
Дата добавления | 10.03.2011 |
Размер файла | 119,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Самоконтролирующиеся коды
2. Самокорректирующиеся коды
3. Код Хэмминга
Список литературы
Введение
Коды Хемминга - наиболее известные и, вероятно, первые из самоконтролирующихся и самокорректирующихся кодов. Построены они применительно к двоичной системе счисления.
Код Хэмминга используется в некоторых прикладных программах в области хранения данных, особенно в * RAID 2 избыточный массив независимых/недорогих дисков для ПЭВМ; кроме того, метод Хемминга давно применяется в памяти типа ECC и позволяет "на лету" исправлять однократные и обнаруживать двукратные ошибки.
В середине 40-х годов Ричард Хемминг работал в знаменитых Лабораториях Белла на счетной машине Bell Model V. Это была электромеханическая машина, использующая релейные блоки, скорость которых была очень медленной: один оборот за несколько секунд. Данные вводились в машине с помощью перфокарт, и поэтому в процессе чтения часто происходили ошибки. В рабочие дни использовались специальные коды, чтобы обнаруживать и исправлять найденные ошибки, при этом оператор узнавал об ошибке по свечению лампочек, исправлял и запускал машину. В выходные дни, когда не было операторов, при возникновении ошибки машина автоматически выходила из программы и запускала другую.
Хемминг часто работал в выходные дни, и все больше и больше раздражался, потому что часто был должен перегружать свою программу из-за ненадежности перфокарт. На протяжении нескольких лет он проводил много времени над построением эффективных алгоритмов исправления ошибок. В 1950 году он опубликовал способ, который на сегодняшний день мы знаем как код Хемминга.
код хемминга контроль четность коррекция
1. Самоконтролирующиеся коды
Коды Хемминга являются самоконтролирующимся кодами т.е коды, позволяющие автоматически обнаруживать наиболее вероятные ошибки при передаче данных Для построения их достаточно приписать к каждому слову один добавочный (контрольный) двоичный разряд и выбрать цифру такого разряда так, чтобы общее количество единиц в изображении любого числа было, например, четным. Одиночная ошибка в каком-либо разряде передаваемого слова (в том числе, может быть, и в контрольном разряде) изменит четность общего количества единиц. Счетчики по модулю 2, подсчитывающий количество единиц, которые содержатся среди двоичных цифр числа, могут давать сигнал о наличии ошибок.
При этом, разрумеется, мы не получаем никаких указаний о том, в каком именно разряде произошла ошибка, и, следовательно, не имеем возможности исправить ее. Остаются незамеченными также ошибки, возникающие одновременно в двух, в четырех или вообще в четном количестве разрядов. Впрочем, двойные, а тем более четырехкратные ошибки полагаются маловероятными.
2. Самокорректирующиеся коды
Коды, в которых возможно автоматическое исправление ошибок, называются самокорректирующимися. Для построения самокорректирующегося кода, рассчитанного на исправление одиночных ошибок, одного контрольного разряда недостаточно. Как видно из дальнейшего, количество контрольных разрядов k должно быть выбрано так, чтобы удовлетворялось неравенству или , где m - количество основных двоичных разрядов кодового слова. Минимальные значения k при заданных значениях m, найденные в соответствии с этим неравенством, приведены в таблице № 1
Табл.1.
Диапазон m |
kmin |
Диапазон m |
kmin |
Диапазон m |
kmin |
|
1 |
2 |
2-4 |
3 |
|||
5-11 |
4 |
12-26 |
5 |
27-40 |
6 |
Имея m+k разрядов, самокорректирующийся код можно построить следующим образом.
Присвоим каждому из разрядов свой номер - от 1 до m+k; запишем эти номера в двоичной системе счисления. Поскольку 2k > m + k ,каждый номер можно представить, очевидно, k-разрядным двоичным числом.
Предположим далее, что все m+k разрядов кода разбиты на контрольные группы, которые частично перекрываются, причем так, что единицы в двоичном представлении номера разряда указывают на его принадлежность к определенным контрольным группам. Например: разряд № 5 принадлежит к 1-й и 3-й контрольным группам, потому что в двоичном представлении его номера 510 = …0001012. Можно видеть, что 1-й и 3-й разряды содержат единицы.
Среди m+k разрядов кода при этом имеется k разрядов, каждый из которых принадлежит только к одной контрольной группе:
Разряд № 1: 110 = …0000012 принадлежит только к 1-й контрольной группе.
Разряд № 2: 210 = …0000102 принадлежит только к 2-й контрольной группе.
Разряд № 4: 410 = …0001002 принадлежит только к 3-й контрольной группе.
…
Разряд № 2k ? 1 принадлежит только к k-й контрольной группе.
Эти k разрядов мы и будем считать контрольными. Остальные m разрядов, каждый из которых принадлежит по меньшей мере к двум контрольным группам, будут информационными разрядами.
В каждом из k контрольных групп будем иметь по одному контрольному разряду. В каждый из контрольных разрядов поместим такую цифру (0 или 1), чтобы общее количество единиц в его контрольной группе было четным.
Например, довольно распространен код Хеминга с m=7 и k=4.
Пусть исходное слово (кодовое слово без контрольных разрядов) - 01101012.
Обозначим Pi - контрольный разряд №i; а Di - информационый разряд №i, где i = 1,2,3,4…
Табл.2.
№ разряда: |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
|
Распределение контрольных и информационных разрядов |
p1 |
p2 |
d1 |
p3 |
d2 |
d3 |
d4 |
p4 |
d5 |
d6 |
d7 |
|
Информационное кодовое слово : |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
|||||
p1 |
1 |
0 |
1 |
0 |
1 |
1 |
||||||
p2 |
0 |
0 |
1 |
0 |
0 |
1 |
||||||
p3 |
0 |
1 |
1 |
0 |
||||||||
p4 |
0 |
1 |
0 |
1 |
||||||||
Кодовое слово с контрольными разрядами: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
Интересно посмотреть, как перекрываются контрольные группы в данном случае (Рис №1). Первая группа контролирует разряды № 3,7,5 исходного кода, вторая -- 3,7,6… (№ группаы = № контрольного разряда). Очевидно, что они частично перекрываются.
Рис.1.
Рис.№1 Первая группа контролирует разряды № 3,7,5 исходного кода, вторая -- 3,7,6… Очевидно что они частично перекрываются
Предположим терперь, для примера, что при передаче данного кодового слова 10001100101 произошла ошибка в 11-м разряде, так, что было принято новое кодовое слово 10001100100. Произведя в принятом коде проверку четности внунтри контрольных групп, мы обнаружили бы, что количество единиц нечетно в 1-й,2-й и 4-й контрольных группах, и четно в 3-й контрольной группе. Это указывает, во-первых, на наличие ошибки, во-вторых, означает, что номер ошибочно принятного разряда в двоичном представлении содержит единицы на первом, втором и четвертом местах и нуль - на третьем месте, т.к ошибка только одна, и 3-я контрольная сумма оказалась верной.
Табл.3.
№ разряда: |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
|||
Распределение контрольных и информационных разрядов |
p1 |
p2 |
d1 |
p3 |
d2 |
d3 |
d4 |
p4 |
d5 |
d6 |
d7 |
Контроль по четности в группе |
Контрольный бит |
|
Переданное кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
|||
Принятое кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
|||
p1 |
1 |
0 |
1 |
0 |
1 |
0 |
Fail |
1 |
||||||
p2 |
0 |
0 |
1 |
0 |
0 |
0 |
Fail |
1 |
||||||
p3 |
0 |
1 |
1 |
0 |
Pass |
0 |
||||||||
p4 |
0 |
1 |
0 |
0 |
Fail |
1 |
p4 |
p3 |
p2 |
P1 |
|||
В двоичном представлении |
1 |
0 |
1 |
1 |
||
В десятичном представлении |
8 |
2 |
1 |
У = 11 |
Из таблицы следует, что ошибка произошла в 11-м разряде и её можно исправить. Построенный код, разрумеется, не рассчитан на возможность одновременной ошибки в двух разрядах.
Например (Рис №2), когда ошибки одновременно прошли в 3-м и 7-м разрядах исходного кода, первый и второй контрольные биты даже не замечают подмены.
Рис.2.
Рис.№2 Когда ошибки прошли в 3-м и 7-м разрядах исходного кода, первый и второй контрольные биты даже не замечают ошибки
Когда в принятом коде производится проверка четности внутри контрольных групп, случай двойной ошибки ничем внешне не отличается от случая одиночной ошибки.
Например, предположим теперь, что при передаче данного кодового слова 10001100101 произошли ошибки в 3-м и 6-м разрядах, так, что принято кодовое слово 10101000101.
Табл.4.
№ разряда: |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
|||
Распределение контрольных и информационных разрядов |
p1 |
p2 |
d1 |
p3 |
d2 |
d3 |
d4 |
p4 |
d5 |
d6 |
d7 |
Контроль по четности в группе |
Контрольный бит |
|
Переданное кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
|||
Принятое кодовое слово: |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
|||
p1 |
1 |
1 |
1 |
0 |
1 |
1 |
Fail |
1 |
||||||
p2 |
0 |
1 |
0 |
0 |
0 |
1 |
Pass |
0 |
||||||
p3 |
0 |
1 |
0 |
0 |
Fail |
1 |
||||||||
p4 |
0 |
1 |
0 |
1 |
Pass |
0 |
p4 |
p3 |
p2 |
p1 |
|||
В двоичном представлении |
0 |
1 |
0 |
1 |
||
В десятичном представлении |
4 |
1 |
У = 5 |
Вывод: ошибка произошла в 5-м разряде Истинное кодовое слово : 1 0 0 0 1 1 0 0 1 0 1 Ошибочное кодовое слово : 1 0 1 0 1 0 0 0 1 0 1 Исправленное кодовое слово : 1 0 1 0 0 0 0 0 1 0 1 Результат получается еще более отдаленным от правильного, чем принятый код. Исправление кода по общему правилу не только не улучшило, но даже ухудшило бы дело.
3. Код Хэмминга
Можно построить и такой код, который обнаруживал бы двойные ошибки и исправлял одиночные. Для этого к самокорректирующемуся коду, рассчитанному на исправление одиночных ошибок, нужно приписать еще один контрольный разряд (разряд двойного контроля). Полное количество разрядов кода при этом будет m+k+1. Цифра в разряде двойного контроля устанавливается такой, чтобы общее количество единиц во всех m + k + 1 разрядах кода было четным. Этот разряд не включается в общую нумерацию и не входит ни в одну контрольную группу.
Например, код Хеминга с m=7 и k=4 Пусть информационное кодовое слово - 0110101
Табл.5.
№ разряда: |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
Second Parity |
|
Распределение контрольных и информационных разрядов |
p1 |
p2 |
d1 |
p3 |
d2 |
d3 |
d4 |
p4 |
d5 |
d6 |
d7 |
||
Информационное кодовое слово: |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
||||||
p1 |
1 |
0 |
1 |
0 |
1 |
1 |
|||||||
p2 |
0 |
0 |
1 |
0 |
0 |
1 |
|||||||
p3 |
0 |
1 |
1 |
0 |
|||||||||
p4 |
0 |
1 |
0 |
1 |
|||||||||
Кодовое слово с контрольными разрядами: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
При этом могут быть следующие случаи.
1. В принятом коде в целом и по всем контрольным группам количество единиц четно. Если тройные ошибки и ошибки в большем количестве разрядов исключаются, то первый случай соответствует безошибочному приему кода. Например
Табл.6.
№ разряда: |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
Контроль по четности в группе |
Контрольный бит |
Контроль по четности в целом |
Контрольный бит в целом |
|
Распределение контрольных и информационных разрядов |
p1 |
p2 |
d1 |
p3 |
d2 |
d3 |
d4 |
p4 |
d5 |
d6 |
d7 |
|||||
Переданное кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
|||||
Принятое кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
|||||
p1 |
1 |
0 |
1 |
0 |
1 |
1 |
Pass |
0 |
||||||||
p2 |
0 |
0 |
1 |
0 |
0 |
1 |
Pass |
0 |
||||||||
p3 |
0 |
1 |
1 |
0 |
Pass |
0 |
||||||||||
p4 |
0 |
1 |
0 |
1 |
Pass |
0 |
1 |
Pass |
p4 |
p3 |
p2 |
p1 |
|||
В двоичном представлении |
0 |
0 |
0 |
0 |
||
В десятичном представлении |
У = 0 |
2. В принятом коде в целом количество единиц нечетно, но во всех контрольных группах количество единиц четно. Второй случай - ошибки только в разряде двойного контроля. Например
Табл.7.
№ разряда: |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
Контроль по четности в группе |
Контрольный бит |
Контроль по четности в целом |
Контрольный бит в целом |
|
Распределение контрольных и информационных разрядов |
p1 |
p2 |
d1 |
p3 |
d2 |
d3 |
d4 |
p4 |
d5 |
d6 |
d7 |
|||||
Переданное кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
|||||
Принятое кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
|||||
p1 |
1 |
0 |
1 |
0 |
1 |
1 |
Pass |
0 |
||||||||
p2 |
0 |
0 |
1 |
0 |
0 |
1 |
Pass |
0 |
||||||||
p3 |
0 |
1 |
1 |
0 |
Pass |
0 |
||||||||||
p4 |
0 |
1 |
0 |
1 |
Pass |
0 |
0 |
Pass |
p4 |
p3 |
p2 |
p1 |
|||
В двоичном представлении |
0 |
0 |
0 |
0 |
||
В десятичном представлении |
У = 0 |
3. В принятом коде в целом и в некоторых из контрольных групп количество единиц нечетно. Третий случай -- одиночной ошибки в каком-либо из остальных разрядов (можно исправить в соответствии с приведенными выше правилами)
Табл.8.
№ разряда: |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
Контроль по четности в группе |
Контрольный бит |
Контроль по четности в целом |
Контрольный бит в целом |
|
Распределение контрольных и информационных разрядов |
p1 |
p2 |
d1 |
p3 |
d2 |
d3 |
d4 |
p4 |
d5 |
d6 |
d7 |
|||||
Переданное кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
|||||
Принятое кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
|||||
p1 |
1 |
0 |
1 |
0 |
1 |
0 |
Fail |
0 |
||||||||
p2 |
0 |
0 |
1 |
0 |
0 |
0 |
Fail |
0 |
||||||||
p3 |
0 |
1 |
1 |
0 |
Pass |
0 |
||||||||||
p4 |
0 |
1 |
0 |
0 |
Fail |
1 |
1 |
Fail |
p4 |
p3 |
p2 |
p1 |
|||
В двоичном представлении |
1 |
0 |
1 |
1 |
||
В десятичном представлении |
У = 11 |
Из таблицы следует, что ошибка произошла в 11-м разряде и что её можно исправить.
4. В принятом коде в целом количество единиц четно, но в некоторых контрольных группах имеется нечетное количество единиц - двойная ошибка
Табл.9.
№ разряда: |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
Контроль по четности в группе |
Контрольный бит |
Контроль по четности в целом |
Контрольный бит в целом |
|
Распределение контрольных и информационных разрядов |
p1 |
p2 |
d1 |
p3 |
d2 |
d3 |
d4 |
p4 |
d5 |
d6 |
d7 |
|||||
Переданное кодовое слово: |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
|||||
Принятое кодовое слово: |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
|||||
p1 |
1 |
1 |
1 |
0 |
1 |
1 |
Fail |
1 |
||||||||
p2 |
0 |
1 |
0 |
0 |
0 |
1 |
Pass |
0 |
||||||||
p3 |
0 |
1 |
0 |
0 |
Fail |
1 |
||||||||||
p4 |
0 |
1 |
0 |
1 |
Pass |
0 |
1 |
Pass |
p4 |
p3 |
p2 |
p1 |
|||
В двоичном представлении |
0 |
1 |
0 |
1 |
||
В десятичном представлении |
4 |
2 |
1 |
У = 5 |
Исправление двойных ошибок здесь, конечно, невозможно.
Увеличивая дальше количество контрольных разрядов, можно было бы построить коды, рассчитанные на исправление двойных ошибок и обнаружение тройных и т.д. Однако методы построения этих кодов не вполне разработаны.
Список литературы
1. David J.C. MacKay Information Theory, Inference and Learning Algorithms. -- Cambridge: Cambridge University Press, 2003.
2. Todd K. Moon Error Correction Coding. -- New Jersey: John Wiley & Sons, 2005.
Размещено на Allbest.ru
Подобные документы
Представление и классификация кодов, построение кода с заданной коррекцией. Характеристика корректирующих кодов (код Хемминга, код БЧХ). Разработка схемотехнической реализации кодера и декодера. Выбор способа представления информации в канале передачи.
курсовая работа [131,1 K], добавлен 02.01.2011Повышение верности передачи информации, ввод дополнительной избыточности. Статистика ошибок. Основные определения и понятия теории кодирования. Способность кода исправлять ошибки. Классификация помехоустойчивых кодов. Код Хемминга, циклические коды.
реферат [66,4 K], добавлен 01.11.2011Методы помехоустойчивого кодирования и декодирования информации с помощью линейных групповых кодов. Принципы построения и функционирования кодирующих и декодирующих устройств этих кодов. Способы их декодирования с учетом помех различной кратности.
лабораторная работа [39,2 K], добавлен 26.09.2012Сущность циклических кодов, их использование в ЭВМ при последовательной передаче данных. Сложение двоичных многочленов. Принцип построения и корректирующие возможности циклических кодов. Список образующих полиномов. Обнаружение и исправление пачек ошибок.
доклад [51,6 K], добавлен 19.10.2014Изучение принципов построения корректирующего кода Хемминга, предназначенного для обнаружения и исправления одиночной ошибки. Анализ технических средств надежной передачи больших массивов данных. Примеры моделирования в Proteus для исходных сообщений.
курсовая работа [1,8 M], добавлен 25.05.2013Применение кодирования с исправлением ошибок для восстановления данных, потерянных при их передаче и хранения. Использование кодов Рида-Соломона с недвоичными символами. Деление полиномов как важный момент при кодировании и декодировании кодов компьютера.
реферат [43,4 K], добавлен 25.02.2014Способы задания линейных кодов. Проверочная матрица в систематическом виде. Основные свойства линейных кодов. Стандартное расположение группового кода. Коды Хэмминга. Корректирующая способность кода Хэмминга. Процедура исправления одиночных ошибок.
реферат [87,9 K], добавлен 11.02.2009Помехоустойчивые коды и их классификация. Формирование каскадного кода. Линейные коды. Замкнутость кодового множества. Схемы кодирования, применяемые на практике. Основные классы кодов. Блоковый код мощности. Сферы декодирования. Неполный декодер.
реферат [83,4 K], добавлен 11.02.2009Коды обнаружения или обнаружения и исправления ошибок в вычислительных машинах. Способы представления различных информационных комбинаций двоичным кодом. Предназначение преобразователей кодов. Определение максимальной потребляемой мощности схемы.
курсовая работа [538,0 K], добавлен 01.07.2013Методы кодирования и декодирования циклических кодов, метод кодирования и декодирования сверточных кодов, формирование проверочных разрядов. Изучение обнаруживающей и исправляющей способности циклических кодов, исследование метода коммутации.
лабораторная работа [709,6 K], добавлен 26.08.2010