Хэмминг(7,4)
Эта статья нуждается в дополнительных цитатах для проверки . ( июнь 2019 г. ) |
Код Хэмминга(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 должны выглядеть знакомо, поскольку они сопоставляют биты данных с битами четности:
- п 1 покрывает д 1 , д 2 , д 4
- п 2 покрывает д 1 , д 3 , д 4
- п 3 покрывает д 2 , д 3 , д 4
Остальные строки (3, 5, 6, 7) сопоставляют данные с их положением в закодированной форме, и в этой строке только 1, поэтому это идентичная копия. Фактически, эти четыре строки линейно независимы и образуют единичную матрицу (по замыслу, а не случайно).
Также, как упоминалось выше, три ряда буквы H должны быть вам знакомы. Эти строки используются для вычисления вектора синдрома на принимающей стороне, и если вектор синдрома является нулевым вектором (все нули), то полученное слово не содержит ошибок; если ненулевое значение, то значение указывает, какой бит был перевернут.
Четыре бита данных, собранные в вектор p , предварительно умножаются на G (т. е. Gp ) и берутся по модулю 2, чтобы получить передаваемое закодированное значение. Исходные 4 бита данных преобразуются в семь битов (отсюда и название «Хемминга (7,4)») с добавлением трех битов четности, чтобы обеспечить четность с использованием вышеуказанных покрытий битов данных. В первой таблице выше показано сопоставление каждого бита данных и бита четности с его конечной битовой позицией (от 1 до 7), но это также можно представить на диаграмме Венна . На первой диаграмме в этой статье показаны три кружка (по одному для каждого бита четности) и биты данных, которые охватывает каждый бит четности. Вторая диаграмма (показанная справа) идентична, но вместо этого отмечены позиции битов.
В оставшейся части этого раздела в качестве рабочего примера будут использоваться следующие 4 бита (показаны как вектор-столбец):
Кодирование канала
[ редактировать ]Предположим, мы хотим передать эти данные ( 1011
) по зашумленному каналу связи . В частности, двоичный симметричный канал означает, что искажение ошибок не благоприятствует ни нулю, ни единице (он симметричен в возникновении ошибок). Кроме того, предполагается, что все исходные векторы равновероятны. Мы берем произведение G и p с элементами по модулю 2, чтобы определить переданное кодовое слово x :
Это означает, что 0110011
будет передаваться вместо передачи 1011
.
Программистам, интересующимся умножением, следует учитывать, что каждая строка результата является младшим битом счетчика совокупности установленных битов, возникающих в результате того, что строка и столбец соединяются побитовым И вместе, а не умножаются.
На соседней диаграмме семь бит закодированного слова вставляются в соответствующие места; при осмотре видно, что четность красного, зеленого и синего кругов четная:
- в красном круге две единицы
- в зеленом круге две единицы
- в синем круге четыре единицы
Вскоре будет показано, что если во время передачи бит переворачивается, то четность двух или всех трех кругов будет неверной, и ошибочный бит можно определить (даже если один из битов четности), зная, что четность все три этих круга должны быть четными.
Проверка четности
[ редактировать ]Если во время передачи не возникает ошибок, то полученное кодовое слово r идентично переданному кодовому слову x :
Приемник умножает H и r , чтобы получить синдрома вектор z , который указывает, произошла ли ошибка, и если да, то для какого бита кодового слова. Выполнение этого умножения (опять же записи по модулю 2):
Поскольку синдром z представляет собой нулевой вектор , получатель может заключить, что ошибки не произошло. Этот вывод основан на наблюдении, что когда вектор данных умножается на , изменение базиса в векторное подпространство, которое является ядром H. происходит G Пока во время передачи ничего не происходит, 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 Решетка
[ редактировать ]Код Хэмминга(7,4) тесно связан с E 7 решеткой и фактически может быть использован для ее построения, точнее, ее двойственной решетки E 7 ∗ (аналогичная конструкция для E 7 использует двойственный код [7,3,4] 2 ). В частности, взяв набор всех векторов x из Z 7 с x, конгруэнтным (по модулю 2) кодовому слову Хэмминга(7,4), и масштабирование на 1/ √ 2 дает решетку E 7 ∗
Это частный случай более общей связи между решетками и кодами. добавления бита четности, также связан с E8 Например, расширенный (8,4)-код Хэмминга, возникающий в результате решеткой . [2]
Ссылки
[ редактировать ]- ^ «История кодов Хэмминга» . Архивировано из оригинала 25 октября 2007 г. Проверено 3 апреля 2008 г.
- ^ Конвей, Джон Х .; Слоан, Нил Дж. А. (1998). Сферические упаковки, решетки и группы (3-е изд.). Нью-Йорк: Springer-Verlag. ISBN 0-387-98585-9 .