Коды Хемминга

Алгоритм самоконтролирующегося и самокорректирующегося кода, который позволяет закодировать какое-либо информационное сообщение определённым образом. Коды, в которых возможно автоматическое исправление ошибок. Число разрешенных и запрещенных комбинаций.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 28.12.2016
Размер файла 325,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

"Коды Хемминга"

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

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

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

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

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

Коды, в которых возможно автоматическое исправление ошибок, называются самокорректирующимися. Для построения самокорректирующегося кода, рассчитанного на исправление одиночных ошибок, одного контрольного разряда недостаточно. Как видно из дальнейшего, количество контрольных разрядов k должно быть выбрано так, чтобы удовлетворялось неравенство:

2? ? k + m + 1 или k ? log (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 - число проверочных символов в блоке.

2. число информационных символов, то 2? - число возможных кодовых комбинаций, 2? - число разрешенных кодовых комбинаций, (2?-2?) - число запрещенных комбинаций.

3. Избыточность кода. Величину r/n называют избыточностью корректирующего кода.

4. Минимальное кодовое расстояние. Минимальным кодовым расстоянием d называется минимальное число искаженных символов, необходимое для перехода одной разрешенной комбинации в другую.

5. Число обнаруживаемых и исправляемых ошибок. Если g - количество ошибок, которое код способен исправить, то необходимо и достаточно, чтобы: d ? 2g + 1

6. Корректирующие возможности кодов.

Граница Плоткина даёт верхнюю границу кодового расстояния:

или

при

Граница Хемминга устанавливает максимально возможное число разрешенных кодовых комбинаций:

где - число сочетаний из n элементов по i элементам. Отсюда можно получить выражение для оценки числа проверочных символов: :

Для значений: (d/n) ? 0.3 разница между границей Хемминга и границей Плоткина невелика.

Граница Варшамова - Гильберта для больших n определяет нижнюю границу числа проверочных символов:

Все вышеперечисленные оценки дают представление о верхней границе d при фиксированных n и k или оценку снизу числа проверочных символов.

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

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

S=0 - ошибки нет, S = 1 однократная ошибка.

Такой код называется (k + 1, k) или (n, n - 1). Первое число - количество элементов последовательности, второе - количество информационных символов.

Для каждого числа проверочных символов r = 3, 4, 5… существует классический код Хэмминга с маркировкой

,

то есть - (7,4),(15,11),(31,26). При иных значениях k получается так называемый усеченный код, например международный телеграфный код МТК-2, у которого K=5 . Для него необходим код Хэмминга (9,5), который является усеченным от классического (15,11).

Для примера рассмотрим классический код Хемминга (7,4). Сгруппируем проверочные символы следующим образом:

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

На вход декодера поступает кодовое слово

,

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

называется синдромом последовательности.

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

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

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

Для кода (7,4) в таблице указаны ненулевые синдромы и соответствующие им конфигурации ошибок (для вида: i1 i2 i3 r1 r2 r3 r4)

Как это работает.

Для того, чтобы понять работу данного алгоритма, рассмотрим пример.

Подготовка

Допустим, у нас есть сообщение "habr", которое необходимо передать без ошибок. Для этого сначала нужно наше сообщение закодировать при помощи Кода Хэмминга. Нам необходимо представить его в бинарном виде.

На этом этапе стоит определиться с, так называемой, длиной информационного слова, то есть длиной строки из нулей и единиц, которые мы будем кодировать. Допустим, у нас длина слова будет равна 16. Таким образом, нам необходимо разделить наше исходное сообщение ("habr") на блоки по 16 бит, которые мы будем потом кодировать отдельно друг от друга. Так как один символ занимает в памяти 8 бит, то в одно кодируемое слово помещается ровно два ASCII символа. Итак, мы получили две бинарные строки по 16 бит:

и

После этого процесс кодирования распараллеливается, и две части сообщения ("ha" и "br") кодируются независимо друг от друга. Рассмотрим, как это делается на примере первой части.

Прежде всего, необходимо вставить контрольные биты. Они вставляются в строго определённых местах - это позиции с номерами, равными степеням двойки. В нашем случае (при длине информационного слова в 16 бит) это будут позиции 1, 2, 4, 8, 16. Соответственно, у нас получилось 5 контрольных бит (выделены красным цветом):

Было:

Стало:

Таким образом, длина всего сообщения увеличилась на 5 бит. До вычисления самих контрольных бит, мы присвоили им значение "0".

Вычисление контрольных бит.

Теперь необходимо вычислить значение каждого контрольного бита. Значение каждого контрольного бита зависит от значений информационных бит (как неожиданно), но не от всех, а только от тех, которые этот контрольных бит контролирует. Для того, чтобы понять, за какие биты отвечает каждых контрольный бит необходимо понять очень простую закономерность: контрольный бит с номером N контролирует все последующие N бит через каждые N бит, начиная с позиции N. Не очень понятно, но по картинке, думаю, станет яснее:

Здесь знаком "X" обозначены те биты, которые контролирует контрольный бит, номер которого справа. То есть, к примеру, бит номер 12 контролируется битами с номерами 4 и 8. Ясно, что чтобы узнать какими битами контролируется бит с номером N надо просто разложить N по степеням двойки.

Но как же вычислить значение каждого контрольного бита? Делается это очень просто: берём каждый контрольный бит и смотрим сколько среди контролируемых им битов единиц, получаем некоторое целое число и, если оно чётное, то ставим ноль, в противном случае ставим единицу. Вот и всё! Можно конечно и наоборот, если число чётное, то ставим единицу, в противном случае, ставим 0. Главное, чтобы в "кодирующей" и "декодирующей" частях алгоритм был одинаков. (Мы будем применять первый вариант).

Высчитав контрольные биты для нашего информационного слова получаем следующее:

и для второй части:

Первая часть алгоритма завершена

Декодирование и исправление ошибок.

Теперь, допустим, мы получили закодированное первой частью алгоритма сообщение, но оно пришло к нас с ошибкой. К примеру, мы получили такое (11-ый бит передался неправильно):

Вся вторая часть алгоритма заключается в том, что необходимо заново вычислить все контрольные биты (так же как и в первой части) и сравнить их с контрольными битами, которые мы получили. Так, посчитав контрольные биты с неправильным 11-ым битом мы получим такую картину:

Как мы видим, контрольные биты под номерами: 1, 2, 8 не совпадают с такими же контрольными битами, которые мы получили. Теперь просто сложив номера позиций неправильных контрольных бит (1 + 2 + 8 = 11) мы получаем позицию ошибочного бита. Теперь просто инвертировав его и отбросив контрольные биты, мы получим исходное сообщение в первозданном виде! Абсолютно аналогично поступаем со второй частью сообщения.

Заключение

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

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

Размещено на Allbest.ru

...

Подобные документы

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

    курсовая работа [326,1 K], добавлен 24.11.2010

  • Запись прямого и обратного кода для числа 10010 и -10010. Получение дополнительного кода числа для 16-разрядной ячейки. Перевод в двоичную систему счисления десятичных чисел: 10, 45, 7, 33. Запись в обратном и дополнительном кодах числа -67, -43, -89.

    практическая работа [13,7 K], добавлен 19.04.2011

  • Коды Боуза-Чоудхури-Хоквингема (БЧХ) – класс циклических кодов, исправляющих многократные ошибки. Отличие методики построения кодов БЧХ от обычных циклических. Конкретные примеры процедуры кодирования, декодирования, обнаружения и исправления ошибок.

    реферат [158,2 K], добавлен 16.07.2009

  • История применения кодов. Технология применения кодов в современных условиях. Анализ "экстремальных кодов" - кодов, границы параметров которых достигают равенства. Способность кода корректировать ошибки, ее зависимость от величины кодового расстояния.

    контрольная работа [164,9 K], добавлен 14.07.2012

  • Свойства кодов Фибоначчи, позволяющих строить быстродействующие и помехоустойчивые аналого-цифровые преобразователи ("фибоначчевые"). Использование для диагностики ЭВМ, в цифровых фильтрах для улучшения спектрального состава сигнала за счет перекодировки.

    реферат [55,6 K], добавлен 02.08.2009

  • Понятие фонетической транскрипции и поиска. Специфика обработки имен физических лиц в алгоритмах сравнения двух строк по их звучанию. Анализ процедур, конструирующих фонетические коды для искомого текста, который звучит одинаково, но пишется по-разному.

    курсовая работа [90,7 K], добавлен 22.06.2011

  • Принципы защиты от ошибок информации при ее передаче по каналам связи. Блоковые коды и методы их декодирования. Построение линейных блочных аддитивных алгебраических кодов и принципы их декодирования синдромным методом. Основные возможности SciLab.

    курсовая работа [394,4 K], добавлен 17.05.2012

  • Применение коды Файра при необходимости последовательной обработки информации. Синтез кодера и декодирующего устройства. Разработка структурной и принципиальной схемы кодера. Устранение временной задержки при декодировании. Выбор и обоснование кода Файра.

    курсовая работа [401,6 K], добавлен 21.03.2013

  • Выбор и обоснование основных параметров кода. Коды Рида-Маллера первого порядка. Кодирование информации путем умножения исходного информационного сообщения на порождающую матрицу. Разработка структурной и функциональной схем кодера Рида-Маллера.

    курсовая работа [555,2 K], добавлен 24.03.2013

  • Изучение алгоритмов тестирования клавиатуры, CMOS-памяти и спикера с учетом выявленных особенностей процессов их диагностики. Исследование процессов самотестирования компьютерной системы при включении. Звуковые коды ошибок, выдаваемые процедурой POST.

    лабораторная работа [19,1 K], добавлен 06.08.2010

  • Число информационных разрядов кода. Вектор ошибок как n-разрядная двоичная последовательность, имеющая единицы во всех разрядах, подвергшихся искажению, и нули в разрядах. Функциональные и принципиальные схемы кодирующего и декодирующего устройств.

    задача [428,4 K], добавлен 28.04.2009

  • Общее число неповторяющихся сообщений. Вычисление скорости передачи информации и пропускной способности каналов связи. Определение избыточности сообщений и оптимальное кодирование. Процедура построения оптимального кода по методике Шеннона-Фано.

    курсовая работа [59,4 K], добавлен 17.04.2009

  • Сущность метода перестановочного декодирования. Особенности использования метода вылавливания ошибок. Декодирование циклического кода путем вылавливания ошибок. Распознавание пакетов ошибок как особенность циклических кодов. Вычисление вектора ошибок.

    доклад [20,3 K], добавлен 24.05.2012

  • Трансляция как процесс перевода программного кода из текстовой формы в машинные коды. Основные категории программ Java. Основные управляющие операторы. Объявление и инициализация переменных. Основные средства разработки приложений, написанных на Java.

    презентация [938,2 K], добавлен 26.10.2013

  • Обеспечение достоверности передаваемой информации применением корректирующих кодов. Код Хэмминга - алгоритм обнаружения и исправления одиночной ошибки. Использование циклических кодов при последовательной передачей между ЭВМ и внешними устройствами.

    дипломная работа [123,7 K], добавлен 02.08.2009

  • Понятие локализации программного обеспечения как процесса его адаптации к культуре какой-либо страны. Перевод пользовательского интерфейса, документации и сопутствующих файлов программного обеспечения. Инструментарий для локализации. Языковые теги и коды.

    презентация [243,7 K], добавлен 07.10.2013

  • Анализ методов реализации интеллектуальных игр в системе человек-робот. Разработка архитектуры программного комплекса, выбор языка программирования. Алгоритм преобразования данных. Тестирование программного комплекса, редактирование и исправление ошибок.

    дипломная работа [2,6 M], добавлен 27.10.2017

  • Выбор и обоснование параметров варианта. Структура вычислительного процесса алгоритмы вычисления. Последовательность обработки операндов. Обозначения на схемах ОВС, временные диаграммы. Программирование ОВС, коды команд ОЭ. Схема цепей программирования.

    курсовая работа [264,1 K], добавлен 24.09.2010

  • Рациональные корни полинома n-й степени с целыми коэффициентами. Значение функции Y(x) при различных значениях исходных данных. Алгоритм: по номеру года вывести его название с использованием оператора switch/case. Исходные коды программ, тестирование.

    контрольная работа [197,2 K], добавлен 25.09.2010

  • Коды Боуза-Чоудхури-Хоквингема как широкий класс циклических кодов, применяемых для защиты информации от ошибок. Особенности коаксиальных магистральных кабелей КМ-4, основное назначение. Способы моделирования передачи информации по кабельной линии связи.

    курсовая работа [1,7 M], добавлен 07.01.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.