Код Хэмминга(7,4) | |
---|---|
Назван в честь | Ричард В. Хэмминг |
Классификация | |
Тип | Линейный блочный код |
Длина блока | 7 |
Длина сообщения | 4 |
Ставка | 4/7 ~ 0,571 |
Расстояние | 3 |
Размер алфавита | 2 |
Обозначение | [7,4,3] 2 -код |
Характеристики | |
идеальный код | |
В теории кодирования Хэмминг (7,4) — это линейный код с исправлением ошибок , который кодирует четыре бита данных в семь бит путем добавления трех битов четности . Он является членом большего семейства кодов Хэмминга , но термин «код Хэмминга» часто относится к этому конкретному коду, который Ричард В. Хэмминг представил в 1950 году. В то время Хэмминг работал в Bell Telephone Laboratories и был разочарован подверженным ошибкам считывателем перфокарт , поэтому он начал работать над кодами с исправлением ошибок. [1]
Код Хэмминга добавляет три дополнительных контрольных бита к каждым четырем битам данных сообщения. Алгоритм Хэмминга (7,4) может исправить любую однобитовую ошибку или обнаружить все однобитовые и двухбитовые ошибки. Другими словами, минимальное расстояние Хэмминга между любыми двумя правильными кодовыми словами равно 3, и полученные слова могут быть правильно декодированы, если они находятся на расстоянии не более одного от кодового слова, переданного отправителем. Это означает, что для ситуаций со средой передачи, где пакетные ошибки не возникают, код Хэмминга (7,4) эффективен (так как среда должна быть чрезвычайно шумной для того, чтобы два из семи битов были перевернуты).
В квантовой информации код Хэмминга (7,4) используется в качестве основы для кода Стина , типа CSS-кода, используемого для квантовой коррекции ошибок .
Цель кодов Хэмминга — создать набор битов четности , которые перекрываются, чтобы можно было обнаружить и исправить однобитовую ошибку в бите данных или бите четности. Хотя можно создать несколько перекрытий, общий метод представлен в кодах Хэмминга .
Кусочек # | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
Передаваемый бит | |||||||
Да | Нет | Да | Нет | Да | Нет | Да | |
Нет | Да | Да | Нет | Нет | Да | Да | |
Нет | Нет | Нет | Да | Да | Да | Да |
В этой таблице описывается, какие биты четности покрывают какие переданные биты в закодированном слове. Например, p 2 обеспечивает четную четность для битов 2, 3, 6 и 7. Она также детализирует, какой переданный бит покрыт каким битом четности, путем чтения столбца. Например, d 1 покрывается p 1 и p 2, но не p 3. Эта таблица будет иметь поразительное сходство с матрицей проверки четности ( H ) в следующем разделе.
Более того, если бы столбцы четности в приведенной выше таблице были удалены
Да | Да | Нет | Да | |
Да | Нет | Да | Да | |
Нет | Да | Да | Да |
то сходство со строками 1, 2 и 4 матрицы генератора кода ( G ) ниже также будет очевидным.
Таким образом, правильно выбрав покрытие битами четности, можно обнаружить и исправить все ошибки с расстоянием Хэмминга, равным 1, что и является смыслом использования кода Хэмминга.
Коды Хэмминга можно вычислить в терминах линейной алгебры через матрицы , поскольку коды Хэмминга являются линейными кодами . Для кодов Хэмминга можно определить две матрицы Хэмминга : матрицу генератора кода G и матрицу проверки на четность H :
Как упоминалось выше, строки 1, 2 и 4 G должны выглядеть знакомо, поскольку они сопоставляют биты данных с их битами четности:
Оставшиеся строки (3, 5, 6, 7) отображают данные в их положение в закодированной форме, и в этой строке есть только 1, поэтому это идентичная копия. Фактически, эти четыре строки линейно независимы и образуют матрицу идентичности (по замыслу, а не по совпадению).
Также, как упоминалось выше, три строки H должны быть знакомы. Эти строки используются для вычисления вектора синдрома на принимающей стороне, и если вектор синдрома является нулевым вектором (все нули), то полученное слово не содержит ошибок; если не ноль, то значение указывает, какой бит был инвертирован.
Четыре бита данных — собранные как вектор p — предварительно умножаются на G (т. е. ) и берутся по модулю 2 для получения закодированного значения, которое передается. Исходные 4 бита данных преобразуются в семь бит (отсюда и название «Хэмминг (7,4)») с тремя битами четности, добавленными для обеспечения четности с использованием указанных выше покрытий битов данных. Первая таблица выше показывает отображение между каждым битом данных и четностью в его конечную позицию бита (от 1 до 7), но это также можно представить в виде диаграммы Венна . Первая диаграмма в этой статье показывает три круга (по одному для каждого бита четности) и охватывает биты данных, которые покрывает каждый бит четности. Вторая диаграмма (показанная справа) идентична, но вместо этого отмечены позиции битов.
В оставшейся части этого раздела в качестве рабочего примера будут использоваться следующие 4 бита (показанные как вектор-столбец):
Предположим, что мы хотим передать эти данные ( 1011
) по шумному каналу связи . В частности, двоичный симметричный канал означает, что искажение ошибок не благоприятствует ни нулю, ни единице (он симметричен в возникновении ошибок). Кроме того, все исходные векторы предполагаются равновероятными. Мы берем произведение G и p , с элементами по модулю 2, чтобы определить переданное кодовое слово x :
Это означает, что 0110011
вместо передачи будет передаваться 1011
.
Программисты, интересующиеся умножением, должны учитывать, что каждая строка результата представляет собой младший бит числа популяционного счетчика битов, полученных в результате побитового объединения строки и столбца , а не умножения.
На соседней диаграмме семь бит закодированного слова вставлены в соответствующие им места; при осмотре становится ясно, что четность красного, зеленого и синего кругов одинакова:
Вскоре будет показано, что если во время передачи бит инвертируется, то четность двух или всех трех кругов будет неправильной, и ошибочный бит можно определить (даже если это один из битов четности), зная, что четность всех трех этих кругов должна быть четной.
Если во время передачи не произошло ошибок, то полученное кодовое слово r идентично переданному кодовому слову x :
Приемник умножает H и r, чтобы получить вектор синдрома z , который указывает, произошла ли ошибка, и если да, то для какого бита кодового слова. Выполнение этого умножения (снова, записи по модулю 2):
Поскольку синдром z является нулевым вектором , получатель может сделать вывод, что ошибки не произошло. Этот вывод основан на наблюдении, что при умножении вектора данных на G происходит изменение базиса в векторное подпространство, которое является ядром H. Пока ничего не происходит во время передачи, r останется в ядре H , а умножение даст нулевой вектор.
В противном случае, предположим, мы можем написать
по модулю 2, где e i — единичный вектор , то есть нулевой вектор с 1 в , считая от 1.
Таким образом, приведенное выше выражение означает ошибку в одном бите .
Теперь, если мы умножим этот вектор на H :
Поскольку x — это переданные данные, то они не содержат ошибок, и, как следствие, произведение H и x равно нулю. Таким образом
Теперь, когда произведение H со стандартным базисным вектором выбирает этот столбец H , мы знаем, что ошибка возникает в том месте, где находится этот столбец H.
Например, предположим, что мы внесли битовую ошибку в бит №5.
На диаграмме справа показана ошибка бита (показана синим текстом) и созданная плохая четность (показана красным текстом) в красном и зеленом кругах. Ошибка бита может быть обнаружена путем вычисления четности красного, зеленого и синего кругов. Если обнаружена плохая четность, то бит данных, который перекрывает только круги плохой четности, является битом с ошибкой. В приведенном выше примере красный и зеленый круги имеют плохую четность, поэтому бит, соответствующий пересечению красного и зеленого, но не синего, указывает на ошибочный бит.
Сейчас,
что соответствует пятому столбцу H. Кроме того, используемый общий алгоритм ( см. Код Хэмминга#Общий алгоритм ) был намеренно построен таким образом, что синдром 101 соответствует двоичному значению 5, что указывает на то, что пятый бит был поврежден. Таким образом, ошибка была обнаружена в бите 5 и может быть исправлена (просто переверните или отмените его значение):
Это исправленное полученное значение действительно теперь соответствует переданному значению x сверху.
После того как полученный вектор будет определен как не содержащий ошибок или исправленный, если ошибка произошла (предполагается, что возможны только ноль или один бит ошибок), полученные данные необходимо декодировать обратно в исходные четыре бита.
Сначала определим матрицу R :
Тогда полученное значение p r равно Rr . Используя приведенный выше пример выполнения
Нетрудно показать, что с помощью этой схемы можно исправить только ошибки в одиночных битах. В качестве альтернативы коды Хэмминга можно использовать для обнаружения ошибок в одиночных и двойных битах, просто отметив, что произведение H не равно нулю всякий раз, когда происходят ошибки. На соседней диаграмме биты 4 и 5 были перевернуты. Это дает только один круг (зеленый) с недействительной четностью, но ошибки не подлежат восстановлению.
Однако код Хэмминга (7,4) и подобные коды Хэмминга не могут различать однобитовые и двухбитовые ошибки. То есть двухбитовые ошибки выглядят так же, как однобитовые ошибки. Если исправление ошибок выполняется для двухбитовой ошибки, результат будет неверным.
Аналогично, коды Хэмминга не могут обнаружить или восстановиться после произвольной трехбитовой ошибки. Рассмотрим схему: если бы бит в зеленом круге (окрашенный в красный цвет) был равен 1, проверка четности вернула бы нулевой вектор, что указывает на отсутствие ошибки в кодовом слове.
Поскольку источник содержит только 4 бита, то возможно передать только 16 слов. Включено восьмибитное значение, если используется дополнительный бит четности ( см. код Хэмминга (7,4) с дополнительным битом четности ). (Биты данных показаны синим цветом; биты четности показаны красным; а дополнительный бит четности показан зеленым.)
Код Хэмминга(7,4) тесно связан с решеткой E 7 и, по сути, может быть использован для ее построения или, точнее, ее дуальной решетки E 7 ∗ (аналогичная конструкция для E 7 использует дуальный код [7,3,4] 2 ). В частности, взятие множества всех векторов x в Z 7 с x , конгруэнтным (по модулю 2), кодовому слову Хэмминга(7,4) и масштабирование на 1/ √ 2 дает решетку E 7 ∗
Это частный случай более общей связи между решетками и кодами. Например, расширенный (8,4)-код Хэмминга, который возникает из добавления бита четности, также связан с решеткой E 8 . [2]