Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

В теории кодирования , то БЧЕ коды или коды Боуз-Чоудхури-Хоквенгем образуют класс циклических кодов с исправлением ошибок , которые построены с использованием полиномов над конечным полем (также называется поле Галуа ). Коды BCH были изобретены в 1959 году французским математиком Алексисом Хоккенгемом и независимо в 1960 году Раджем Бозом и Д.К. Рэем-Чаудхури . [1] [2] [3] Название Bose – Chaudhuri – Hocquenghem (и аббревиатура BCH) происходит от инициалов фамилий изобретателей (ошибочно в случае Рэя-Чаудхури).

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

БЧХ коды используются в таких приложениях, как спутниковая связь, [4] компактные дисковые проигрыватели, DVD - диски , жесткие диски , твердотельные накопители , [5] квантово-стойкие криптографические [6] , и двумерные штрих - коды .

Определение и иллюстрация [ править ]

Примитивные узкосмысленные коды BCH [ править ]

Для простого числа q и степени простого q m с натуральными числами m и d, таких что dq m - 1 , примитивный узкосмысловой код BCH над конечным полем (или полем Галуа) GF ( q ) с длиной кода n = q m - 1 и расстояние не менее d строится следующим способом.

Пусть α быть примитивный элемент из GF ( кв м ) . Для любого натурального числа i пусть m i ( x ) будет минимальным многочленом с коэффициентами из GF ( q ) при α i . Порождающий полином кода БЧХ определяется как наименьшее общее кратное г ( х ) = LCM ( м 1 ( х ), ..., м d - 1 ( х )). Видно, что g ( x ) - многочлен с коэффициентами из GF ( q ), делящий x n - 1 . Следовательно, полиномиальный код, определяемый g ( x ), является циклическим кодом.

Пример [ править ]

Пусть q = 2 и m = 4 (следовательно, n = 15 ). Мы рассмотрим разные значения d . Для GF (16) = GF (2 4 ) на основе многочлена x 4 + x + 1 с первообразным корнем α = x +0 существуют минимальные многочлены m i ( x ) с коэффициентами в GF (2), удовлетворяющие

Минимальные многочлены четырнадцати степеней α равны

Код BCH с порождающим полиномом

Он имеет минимальное расстояние Хэмминга не менее 3 и исправляет до одной ошибки. Поскольку порождающий полином имеет степень 4, этот код имеет 11 бит данных и 4 бита контрольной суммы.

Код BCH с порождающим полиномом

Он имеет минимальное расстояние Хэмминга не менее 5 и исправляет до двух ошибок. Поскольку порождающий полином имеет степень 8, этот код имеет 7 бит данных и 8 битов контрольной суммы.

Код BCH с порождающим полиномом

Он имеет минимальное расстояние Хэмминга не менее 7 и исправляет до трех ошибок. Поскольку порождающий полином имеет степень 10, этот код имеет 5 битов данных и 10 битов контрольной суммы. (Этот конкретный генераторный полином имеет реальное применение в шаблонах формата QR-кода .)

Код BCH с и выше имеет порождающий полином

Этот код имеет минимальное расстояние Хэмминга 15 и исправляет 7 ошибок. Он имеет 1 бит данных и 14 битов контрольной суммы. Фактически, в этом коде всего два кодовых слова: 000000000000000 и 111111111111111.

Общие коды BCH [ править ]

Общие коды BCH отличаются от примитивных кодов BCH с узким смыслом в двух отношениях.

Во-первых, можно ослабить требование быть примитивным элементом . Расслабляя это требование, длина кода изменяется от до в порядке элемента

Во-вторых, последовательные корни порождающего полинома могут запускаться вместо

Определение. Зафиксируем конечное поле, где - степень простого числа. Выберите положительные целые числа так , чтобы и был мультипликативным порядком по модулю

Как и раньше, пусть будет примитивный корень из единицы в и пусть будет минимальный многочлен над из для всех The порождающего полинома кода БЧХ определяется как наименьшее общее кратное n {\displaystyle n}

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

Особые случаи [ править ]

  • Код BCH с называется кодом BCH с узким смыслом .
  • Код BCH с называется примитивным .

Генераторный полином BCH-кода имеет коэффициенты из В общем случае циклический код с порождающим полиномом называется BCH-кодом над BCH-кодом и порождающий полином с последовательными степенями в качестве корней является одним типом кода Рида-Соломона, где алфавит декодера (синдромов) совпадает с алфавитом канала (данных и порождающего полинома), все элементы . [7] Другой тип кода Рида-Соломона - это исходный код Рида-Соломона, который не является кодом BCH.

Свойства [ править ]

Генераторный полином кода БЧХ имеет степень не выше . Более того, если и , порождающий полином имеет степень не выше .

Код BCH имеет по крайней мере минимальное расстояние Хэмминга .

Код BCH является циклическим.

Кодировка [ править ]

Поскольку любой многочлен, который является кратным полиному генератора, является допустимым кодовым словом BCH, кодирование BCH - это просто процесс поиска некоторого полинома, в котором генератор является фактором.

Сам код BCH не определяет значения коэффициентов полинома; концептуально, единственной задачей алгоритма декодирования BCH является поиск действительного кодового слова с минимальным расстоянием Хэмминга до полученного кодового слова. Следовательно, код BCH может быть реализован либо как систематический код, либо нет, в зависимости от того, как разработчик решает встроить сообщение в закодированный полином.

Несистематическое кодирование: сообщение как фактор [ править ]

Самый простой способ найти многочлен, кратный генератору, - это вычислить произведение некоторого произвольного полинома и генератора. В этом случае произвольный многочлен можно выбрать, используя символы сообщения в качестве коэффициентов.

В качестве примера рассмотрим генераторный полином , выбранный для использования в двоичном коде BCH (31, 21), используемом POCSAG и другими. Чтобы закодировать 21-битное сообщение {101101110111101111101}, мы сначала представляем его как полином над :

Затем вычислите (также по окончании ):

Таким образом, переданное кодовое слово - {1100111010010111101011101110101}.

Приемник может использовать эти биты в качестве коэффициентов и после исправления ошибок, чтобы гарантировать правильное кодовое слово, может повторно вычислить

Систематическая кодировка: сообщение как префикс [ править ]

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

Этот метод кодирования использует тот факт, что вычитание остатка от делимого дает результат, кратный делителю. Следовательно, если мы возьмем наш полином сообщения, как и раньше, и умножим его на (чтобы «сдвинуть» сообщение с пути остатка), мы можем затем использовать евклидово деление многочленов, чтобы получить:

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

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

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

Расшифровка [ править ]

Существует множество алгоритмов декодирования кодов BCH. Наиболее распространенные из них следуют этой общей схеме:

  1. Вычислить синдромы s j для полученного вектора
  2. Определите количество ошибок t и полином локатора ошибок Λ (x) из синдромов
  3. Вычислите корни полинома местоположения ошибок, чтобы найти местоположения ошибок X i.
  4. Вычислить значения ошибки Y i в этих местах ошибки.
  5. Исправьте ошибки

Во время некоторых из этих шагов алгоритм декодирования может определить, что полученный вектор содержит слишком много ошибок и не может быть исправлен. Например, если подходящее значение t не найдено, коррекция не будет выполнена. В усеченном (не примитивном) коде местоположение ошибки может быть вне допустимого диапазона. Если полученный вектор содержит больше ошибок, чем код может исправить, декодер может неосознанно выдать явно действительное сообщение, отличное от того, которое было отправлено.

Рассчитайте синдромы [ править ]

Полученный вектор представляет собой сумму правильного кодового слова и неизвестного вектора ошибок. Значения синдромов формируются путем рассмотрения как полинома и его оценки. Таким образом, синдромы равны [8]

для к

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

Если ошибки нет, для всех. Если синдромы все равны нулю, то декодирование выполнено.

Вычислить многочлен местоположения ошибки [ править ]

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

Если есть единственная ошибка, запишите это как где - расположение ошибки и ее величина. Тогда первые два синдрома

таким образом, вместе они позволяют нам вычислить и предоставить некоторую информацию о (полностью определяя ее в случае кодов Рида – Соломона).

Если есть две или более ошибок,

Не сразу очевидно, как начать решать возникающие синдромы для неизвестных и

Первым шагом является поиск, совместимый с вычисленными синдромами и с минимально возможным многочленом локатора:

Два популярных алгоритма для этой задачи:

  1. Алгоритм Петерсона – Горенштейна – Цирлера
  2. Алгоритм Берлекампа – Месси

Алгоритм Петерсона – Горенштейна – Цирлера [ править ]

Алгоритм Петерсона - это шаг 2 обобщенной процедуры декодирования BCH. Алгоритм Петерсона используется для вычисления коэффициентов полинома локатора ошибок полинома.

Теперь о процедуре алгоритма Петерсона – Горенштейна – Цирлера. [9] Ожидайте, что у нас будет не менее 2 t синдромов s c ,…, s c +2 t −1 . Пусть v  =  t .

  1. Начните с создания матрицы с элементами, которые являются значениями синдрома
  2. Создайте вектор с элементами
  3. Обозначим через неизвестные коэффициенты полинома, которые задаются формулой
  4. Сформируем матричное уравнение
  5. Если определитель матрицы отличен от нуля, то мы действительно можем найти обратную матрицу и найти значения неизвестных значений.
  6. Если тогда следовать
     если  потом объявить пустой многочлен локатора ошибок остановить процедуру Петерсона. конец набор 
    продолжаем с самого начала декодирования Петерсона, делая меньшие
  7. После того, как у вас есть значения , у вас будет многочлен локатора ошибок.
  8. Прекратите процедуру Петерсона.

Факторный многочлен локатора ошибок [ править ]

Теперь, когда у вас есть многочлен, его корни могут быть найдены в форме путем перебора, например, с использованием алгоритма поиска Chien . Экспоненциальные степени примитивного элемента дадут позиции, где возникают ошибки в полученном слове; отсюда и название полином «локатора ошибок».

Нули Λ ( x ) равны α - i 1 ,…, α - i v .

Вычислить значения ошибок [ править ]

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

В случае двоичного BCH (со всеми читаемыми символами) это тривиально; просто переверните биты принятого слова в этих позициях, и мы получим исправленное кодовое слово. В более общем случае веса ошибок могут быть определены путем решения линейной системы

Алгоритм Форни [ править ]

Однако есть более эффективный метод, известный как алгоритм Форни .

Позволять

И полином вычислителя ошибок [10]

Ну наконец то:

где

Если бы синдромы можно было объяснить словом ошибки, которое может быть ненулевым только на позициях , то значения ошибок равны

Для кодов BCH с узким смыслом c = 1, поэтому выражение упрощается до:

Объяснение вычисления алгоритма Форни [ править ]

Он основан на интерполяции Лагранжа и методах производящих функций .

Рассмотрим и для простоты предположим для и для Тогда

Мы хотим вычислить неизвестные, и мы могли бы упростить контекст, удалив термины. Это приводит к полиному оценщика ошибок

Благодаря нам

Благодаря (уловке с интерполяцией Лагранжа) сумма вырождается только в одно слагаемое для

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

Как формальная производная

мы снова получаем только одно слагаемое в

Итак, наконец

Эта формула полезна при вычислении формальной производной формы

уступая:

где

Декодирование на основе расширенного алгоритма Евклида [ править ]

Альтернативный процесс поиска полинома Λ и полинома локатора ошибок основан на адаптации расширенного алгоритма Евклида Ясуо Сугияма . [11] Исправление нечитаемых символов также может быть легко включено в алгоритм.

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

Как мы уже определили для формулы Форни, пусть

Давайте запустим расширенный алгоритм Евклида для определения наименьшего общего делителя многочленов и цель состоит не в том, чтобы найти наименьший общий делитель, а найти многочлен степени не выше и многочлены такие, что низкая степень гарантий, которые удовлетворяли бы расширенным (по ) определяющим условиям для

Определение и использование вместо в формуле Фурни даст нам значения ошибок.

Основным преимуществом алгоритма является то, что он тем временем вычисляет требуемые в формуле Форни.

Объяснение процесса декодирования [ править ]

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

Мы могли бы написать эти условия отдельно или создать многочлен

и сравнить коэффициенты при степенях к

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

Новый набор синдромов ограничивает вектор ошибок

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

В полиномиальной формулировке замена набора синдромов на набор синдромов приводит к

Следовательно,

После замены на потребовалось бы уравнение для коэффициентов при степенях

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

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

В формуле Форни можно было бы умножить на скаляр, получив тот же результат.

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

Исправьте ошибки [ править ]

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

Примеры расшифровки [ править ]

Расшифровка двоичного кода без нечитаемых символов [ править ]

Рассмотрим код BCH в GF (2 4 ) с и . (Это используется в QR - кодах .) Пусть сообщение , которое будет передано составляет [1 1 0 1 1], или в полиномиальной нотации, Символы «контрольная сумма» рассчитывается путем деления путем и взятия остатка, в результате чего или [1 0 0 0 0 1 0 1 0 0]. Они добавляются к сообщению, поэтому переданное кодовое слово - [1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Теперь представьте, что при передаче есть две битовые ошибки, поэтому полученное кодовое слово равно [1 0 0 1 1 1 0 0 0 1 1 0 1 0 0]. В полиномиальных обозначениях:

Чтобы исправить ошибки, сначала рассчитайте синдромы. Взяв, что у нас есть и Далее, примените процедуру Петерсона, уменьшив строку следующей расширенной матрицы.

Из-за нулевой строки S 3 × 3 является сингулярным, что неудивительно, поскольку в кодовое слово были внесены только две ошибки. Однако левый верхний угол матрицы идентичен [ S 2 × 2 | C 2 × 1 ] , что приводит к решению . Результирующий полином локатора ошибок имеет нули в и Показатели степени соответствуют местоположениям ошибок. В этом примере нет необходимости вычислять значения ошибок, так как единственное возможное значение - 1.

Расшифровка с нечитаемыми символами [ править ]

Предположим тот же сценарий, но полученное слово содержит два нечитаемых символа [1 0 0? 1 1? 0 0 1 1 0 1 0 0]. Мы заменяем нечитаемые символы нулями при создании полинома, отражающего их положение. Мы вычисляем синдромы и (Используя логарифмическую нотацию, которая не зависит от изоморфизмов GF (2 4 ). Для проверки вычислений мы можем использовать то же представление для сложения, которое использовалось в предыдущем пример. Шестнадцатеричное описание степеней : последовательно 1,2,4,8,3,6, C, B, 5, A, 7, E, F, D, 9 с добавлением на основе побитового xor.)

Сделаем синдромный многочлен

вычислить

Запустите расширенный алгоритм Евклида:

Мы достигли полинома степени не выше 3, и при

мы получили

Следовательно,

Пусть не волнуйтесь , что Find грубой силой корня корней и (после того, как найти, например , мы можем разделить на соответствующем monom и корень полученного monom можно найти легко).

Позволять

Будем искать значения ошибок по формуле

где корни Мы получаем

На самом деле, это не должно вызывать удивления.

Таким образом, исправленный код будет [1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Расшифровка нечитаемых символов с небольшим количеством ошибок [ править ]

Покажем поведение алгоритма для случая с небольшим количеством ошибок. Пусть полученное слово [1 0 0? 1 1? 0 0 0 1 0 1 0 0].

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

Запустим расширенный алгоритм Евклида:

Мы достигли полинома степени не выше 3, и при

мы получили

Следовательно,

Пусть не волнуйтесь , что Корень IS

Позволять

Будем искать значения ошибок по формуле где - корни многочлена

Мы получили

В этом нет ничего удивительного.

Таким образом, исправленный код будет [1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Цитаты [ править ]

  1. ^ Рид и Чен 1999 , стр. 189
  2. ^ Hocquenghem 1959
  3. Боз и Рэй-Чаудхури, 1960
  4. ^ "Система кодирования Phobos Lander: программное обеспечение и анализ" (PDF) . Проверено 25 февраля 2012 года .
  5. ^ «Описание продукта Sandforce SF-2500/2600» . Проверено 25 февраля 2012 года .
  6. ^ http://pqc-hqc.org/doc/hqc-specification_2020-05-29.pdf
  7. ^ Гилл nd , стр. 3
  8. ^ Lidl & Pilz 1999 , стр. 229
  9. ^ Горенштейн, Peterson & Zierler 1960
  10. ^ Гилл nd , стр. 47
  11. ^ Ясуо Сугияма, Масао Kasahara, Shigeichi Хирасава и Toshihiko Namekawa. Метод решения ключевого уравнения для декодирования кодов Гоппа. Информация и контроль, 27: 87–99, 1975.

Ссылки [ править ]

Первоисточники [ править ]

  • Hocquenghem, A. (сентябрь 1959 г.), "Codes correcteurs d'erreurs", Chiffres (на французском языке), Париж, 2 : 147–156.
  • Bose, RC ; Рэй-Чаудхури, Д.К. (март 1960 г.), «Об одном классе двоичных групповых кодов с исправлением ошибок» (PDF) , Информация и управление , 3 (1): 68–79, DOI : 10.1016 / s0019-9958 (60) 90287- 4 , ISSN  0890-5401

Вторичные источники [ править ]

  • Джилл, Джон (nd), EE387 Notes # 7, раздаточный материал # 28 (PDF) , Стэнфордский университет, стр. 42–45 , получено 21 апреля 2010 г.[ мертвая ссылка ] Заметки к курсу на 2012 год явно переделываются: http://www.stanford.edu/class/ee387/
  • Горенштейн, Даниэль ; Петерсон, У. Уэсли ; Цирлер, Нил (1960), «Коды Бозе-Чаудхури с исправлением двух ошибок являются квази-совершенными», Информация и управление , 3 (3): 291–294, DOI : 10.1016 / s0019-9958 (60) 90877-9
  • Лидл, Рудольф; Пильц, Гюнтер (1999), Прикладная абстрактная алгебра (2-е изд.), Джон Вили
  • Рид, Ирвинг С .; Чен, Сюэминь (1999), Кодирование с контролем ошибок для сетей передачи данных , Бостон, Массачусетс: Kluwer Academic Publishers , ISBN 0-7923-8528-4

Дальнейшее чтение [ править ]

  • Блахут, Ричард Э. (2003), Алгебраические коды для передачи данных (2-е изд.), Cambridge University Press , ISBN 0-521-55374-1
  • Гилберт, WJ; Николсон, WK (2004), Современная алгебра с приложениями (2-е изд.), Джон Вили
  • Lin, S .; Костелло, Д. (2004), Кодирование с контролем ошибок: основы и приложения , Englewood Cliffs, NJ: Prentice-Hall
  • MacWilliams, FJ; Слоан, штат Нью-Джерси (1977), Теория кодов с исправлением ошибок , Нью-Йорк, Нью-Йорк: издательство North-Holland Publishing Company
  • Рудра, Атри, CSE 545, Коды исправления ошибок: комбинаторика, алгоритмы и приложения , Университет в Буффало, заархивировано из оригинала 02.07.2010 , получено 21 апреля 2010 г.