Код Хэмминга

Код Хэмминга

Коды Хэмминга — наиболее известные и, вероятно, первые из самоконтролирующихся и самокорректирующихся кодов. Построены они применительно к двоичной системе счисления.

Содержание

История

В середине 1940-х годов Ричард Хэмминг работал в знаменитых Bell Labs на счётной машине Bell Model V. Это была электромеханическая машина, использующая релейные блоки, скорость которых была очень низка: один оборот за несколько секунд. Данные вводились в машину с помощью перфокарт, и поэтому в процессе чтения часто происходили ошибки. В рабочие дни использовались специальные коды, чтобы обнаруживать и исправлять найденные ошибки, при этом оператор узнавал об ошибке по свечению лампочек, исправлял и запускал машину. В выходные дни, когда не было операторов, при возникновении ошибки машина автоматически выходила из программы и запускала другую.

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

Систематические коды

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

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

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

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

Самокорректирующиеся коды

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

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

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

Основными характеристиками самокорректирующихся кодов являются:

  1. Число разрешенных и запрещенных комбинаций. Если n - число символов в блоке, r - число проверочных символов в блоке, k - число информационных символов, то ~2^n - число возможных кодовых комбинаций, ~2^k - число разрешенных кодовых комбинаций, ~2^n - 2^k - число запрещенных комбинаций.
  2. Избыточность кода. Величину ~\tfrac{r}{n} называют избыточностью корректирующего кода.
  3. Минимальное кодовое расстояние. Минимальным кодовым расстоянием d называется минимальное число искаженных символов, необходимое для перехода одной разрешенной комбинации в другую.
  4. Число обнаруживаемых и исправляемых ошибок. Если g - количество ошибок, которое код способен исправить, то необходимо и достаточно, чтобы ~d \geq 2g+1
  5. Корректирующие возможности кодов.

Граница Плоткина даёт верхнюю границу кодового расстояния ~d\leqslant \tfrac{n * 2^{k-1}}{2^k-1} или ~r \geq 2*(d-1)-\log_2 d при ~n \geq 2*d-1

Граница Хемминга устанавливает максимально возможное число разрешенных кодовых комбинаций ~2^k \leq {2^n} / \sum_{i=0}^{\tfrac{d-1}{2}} C_n^i где C_n^i - число сочетаний из n элементов по i элементам. Отсюда можно получить выражение для оценки числа проверочных символов: ~r \geq log_2( \sum_{i=0}^{\tfrac{d-1}{2}} C_n^i) Для значений (d/n) \leq 0.3 разница между границей Хемминга и границей Плоткина невелика.

Граница Варшамова-Гильберта для больших n определяет нижнюю границу числа проверочных символов ~r \geq log_2(\sum_{i=0}^{d-2} C_{n-1}^i) Все вышеперечисленные оценки дают представление о верхней границе d при фиксированных n и k или оценку снизу числа проверочных символов

Литература

  • Питерсон У., Уэлдон Э. Коды, исправляющие ошибки: Пер. с англ. М.: Мир, 1976, 600 c.
  • Кларк Д., Кейн Д. Кодирование с исправлением ошибок в системах цифровой связи: Пер. с англ. М.: Радио и Связь,1987, 300 с.

Код Хемминга

Построение кодов Хемминга основано на принципе проверки на четность числа единичных символов: к последовательности добавляется элемент такой, чтобы число единичных символов в получившейся последовательности было четным.  ~r_1 = i_1 \oplus  i_2 \oplus  ... \oplus  i_k. знак ~ \oplus здесь означает сложение по модулю 2

~ S = i_1 \oplus  i_2 \oplus  ... \oplus  i_n \oplus  r_1 . ~ S = 0 - ошибки нет, ~ s = 1 однократная ошибка. Такой код называется ~ (k+1,k) или ~ (n,n-1) . Первое число - количество элементов последовательности, второе - количество информационных символов. Для каждого числа проверочных символов ~ r = 3,4,5.. существует классический код Хемминга с маркировкой ~(n,k)=(2^r-1,2^r-1-r) т.е. - ~(7,4),(15,11),(31,26) . При иных значениях k получается так называемый усеченных код, например международный телеграфный код МТК-2, у которого ~ k = 5 . Для него необходим код Хемминга ~ (9,5) , который является усеченным от классического ~ (15,11) . Для Примера рассмотрим классический код Хемминга ~ (7,4) . Сгруппируем проверочные символы следующим образом:

~r_1 = i_1 \oplus i_2 \oplus i_3
~r_2 = i_2 \oplus i_3 \oplus i_4
~r_3 = i_1 \oplus i_2 \oplus i_4

знак  \oplus здесь означает сложение по модулю 2.

Получение кодового слова выглядит следующим образом:
\begin{pmatrix}
i_1 & i_2 & i_3 & i_4 & \\
\end{pmatrix} \begin{pmatrix} 
1 & 0 & 0 & 0 & 1 & 0 & 1 \\ 
0 & 1 & 0 & 0 & 1 & 1 & 1 \\ 
0 & 0 & 1 & 0 & 1 & 1 & 0 \\ 
0 & 0 & 0 & 1 & 0 & 1 & 1 \\ 
\end{pmatrix} = \begin{pmatrix}
i_1 & i_2 & i_3 & i_4 & r_1 & r_2 & r_3 \\
\end{pmatrix}

На вход декодера поступает кодовое слово ~V = (i_1',i_2',i_3',i_4',r_1',r_2',r_3') где штрихом помечены символы, которые могут исказиться в результате помехи. В декодере в режиме исправления ошибок строится последовательность синдромов:

~S_1 = r_1 \oplus  i_1 \oplus  i_2 \oplus  i_3
~S_2 = r_2 \oplus  i_2 \oplus  i_3 \oplus  i_4
~S_3 = r_3 \oplus   i_1 \oplus  i_2 \oplus  i_4

~S = (s_1, s_2, s_3) называется синдромом последовательности.

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

\begin{pmatrix}
i_1 & i_2 & i_3 & i_4 & r_1 & r_2 & r_3 \\
\end{pmatrix} \begin{pmatrix}
1 & 0 & 1 \\
1 & 1 & 1 \\
1 & 1 & 0 \\
0 & 1 & 1 \\
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\ 
\end{pmatrix} = \begin{pmatrix}
S_1 & S_2 & S_3 \\
\end{pmatrix}

Кодовые слова ~ (7,4) кода Хемминга

i_1 i_2 i_3 i_4 r_1 r_2 r_3
0 0 0 0 0 0 0
0 0 0 1 0 1 1
0 0 1 0 1 1 0
0 0 1 1 1 0 1
0 1 0 0 1 1 1
0 1 0 1 1 0 0
0 1 1 0 0 0 1
0 1 1 1 0 1 0
1 0 0 0 1 0 1
1 0 0 1 1 1 0
1 0 1 0 0 1 1
1 0 1 1 0 0 0
1 1 0 0 0 1 0
1 1 0 1 0 0 1
1 1 1 0 1 0 0
1 1 1 1 1 1 1

Синдром ~ (0,0,0) указывает на то, что в последовательности нет искажений. Каждому ненулевому синдрому соответствует определенная конфигурация ошибок, которая исправляется на этапе декодирования. Для кода ~ (7,4) в таблице указаны ненулевые синдромы и соответствующие им конфигурации ошибок (для вида: i_1 i_2 i_3 i_4 r_3 r_2 r_1).

Синдром 001 010 011 100 101 110 111
Конфигурация ошибок 0000001 0000010 1000000 0000100 0100000 0010000 0001000
Ошибка в символе r_1 r_2 i_1 r_3 i_2 i_3 i_4

My hemcode.png

HemDecode.PNG

Литература

  • Питерсон У., Уэлдон Э. Коды, исправляющие ошибки: Пер. с англ. М.: Мир, 1976, 600 c.
  • Пенин П.Е.,Филиппов Л.Н. Радиотехнические системы передачи информации. М.: Радио и Связь, 1984, 256 с.
  • Блейхут Р. Теория и практика кодов, контролирующих ошибки. Пер. с англ. М.: Мир, 1986, 576 с.

Применение

Код Хэмминга используется в некоторых прикладных программах в области хранения данных, особенно в RAID 2; кроме того, метод Хэмминга давно применяется в памяти типа ECC и позволяет «на лету» исправлять однократные и обнаруживать двукратные ошибки.

См. также


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Код Хэмминга" в других словарях:

  • циклический код Хэмминга — Циклический код Хэмминга, исправляющий одну ошибку и обнаруживающий две ошибки. [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN Hamming single error correcting… …   Справочник технического переводчика

  • Код Хемминга — Коды Хемминга наиболее известные и, вероятно, первые из самоконтролирующихся и самокорректирующихся кодов. Построены они применительно к двоичной системе счисления. Содержание 1 История 2 Самоконтролирующиеся коды …   Википедия

  • Граница Хэмминга — В теории кодирования граница Хэмминга определяет пределы возможных значений параметров произвольного блокового кода. Также известна как граница сферической упаковки. Коды, достигающие границы Хэмминга, называют совершенными или плотноупакованными …   Википедия

  • Медаль Ричарда Хэмминга — (англ. Richard W. Hamming Medal)  награда, присуждаемая ежегодно институтом инженеров электротехники и электроники (англ. IEEE) за исключительный вклад в науку об информации, информационные системы и технологии. К награде могут… …   Википедия

  • Линейный код — В области математики и теории информации линейный код  это важный тип блокового кода, использующийся в схемах определения и коррекции ошибок. Линейные коды, по сравнению с другими кодами, позволяют реализовывать более эффективные алгоритмы… …   Википедия

  • Контрольный код — Обнаружение ошибок в технике связи  действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок)  процедура восстановления информации после… …   Википедия

  • КОДИРОВАНИЕ ИНФОРМАЦИИ — установление соответствия между элементами сообщения и сигналами, при помощи к рых эти элементы могут быть зафиксированы. Пусть В, , множество элементов сообщения, А алфавит с символами , Пусть конечная последовательность символов наз. словом в… …   Физическая энциклопедия

  • Хэмминг, Ричард Уэсли — Ричард Уэсли Хэмминг Richard Wesley Hamming Дата рождения: 11 февраля 1915(1915 02 11) Место рождения: Чикаго, Иллинойс Дата смерти …   Википедия

  • Хэмминг — Хэмминг, Ричард Уэсли Ричард Уэсли Хэмминг Richard Wesley Hamming Дата рождения: 11 февраля 1915(1915 02 11) Место рождения: Чикаго, Иллинойс Дата смерти …   Википедия

  • Хэмминг, Ричард Весли — Ричард Уэсли Хэмминг Richard Wesley Hamming Дата рождения: 11 февраля 1915(19150211) Место рождения: Чикаго, Иллинойс Дата смерти: 7 января 1998 Место смерти: Монтеррей, Калифорния …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»