Код BCH - BCH code

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

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

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

Определение и иллюстрация

Примитивные узкосмысловые коды BCH

Учитывая простое число q и основная сила qм с положительными целыми числами м и d такой, что dqм − 1, примитивный узкосмысловой код BCH над конечное поле (или поле Галуа) GF (q) с длиной кода п = qм − 1 и расстояние по меньшей мере d строится следующим способом.

Позволять α быть примитивный элемент из GF (qм).Для любого положительного целого числа я, позволять мя(Икс) быть минимальный многочлен с коэффициентами в GF (q) из αя. порождающий полином кода BCH определяется как наименьший общий множитель грамм(Икс) = lcm (м1(Икс),…,мd − 1(Икс))Видно, что грамм(Икс) - многочлен с коэффициентами в GF (q) и разделяет Иксп − 1Таким образом, полиномиальный код, определяемый грамм(Икс) - циклический код.

Пример

Позволять q = 2 и м = 4 (следовательно п = 15). Мы рассмотрим разные значения d. За GF (16) = GF (24) на основе полинома Икс4 + Икс + 1 с первобытным корнем α = Икс+0 есть минимальные многочлены мя(Икс) с коэффициентами в 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 с узким смыслом в двух отношениях.

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

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

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

Как и раньше, пусть быть примитивный корень единства в и разреши быть минимальный многочлен над из для всех Генераторный полином кода БЧХ определяется как наименьший общий множитель

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

Особые случаи

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

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

Характеристики

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

Доказательство

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

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

Доказательство

Предположим, что это кодовое слово с меньшим, чем ненулевые условия. потом

Напомним, что корни следовательно из . Отсюда следует, что удовлетворяют следующим уравнениям, для каждого :

В матричной форме имеем

Определитель этой матрицы равен

Матрица рассматривается как Матрица Вандермонда, а его определитель

который не равен нулю. Отсюда следует, что следовательно

Код BCH циклический.

Доказательство

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

Кодирование

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Расшифровка

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

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

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

Рассчитайте синдромы

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

за к

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

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

Вычислить полином местоположения ошибки

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

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

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

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

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

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

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

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

Алгоритм Петерсона – Горенштейна – Цирлера

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

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

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

Факторный полином локатора ошибок

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

Нули Λ (Икс) находятся αя1, …, αяv.

Рассчитать значения ошибок

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

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

Алгоритм Форни

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

Позволять

И полином оценщика ошибок[10]

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

куда

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

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

Объяснение расчета алгоритма Форни

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

Учитывать и для простоты предположим за и за потом

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

Благодаря у нас есть

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

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

В качестве формальная производная

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

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

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

уступая:

куда

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры расшифровки

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

Рассмотрим код BCH в GF (24) с и . (Это используется в 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]. В полиномиальной записи:

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

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

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

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

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

вычислить

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

We have reached polynomial of degree at most 3, and as

мы получили

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

Позволять Don't worry that Find by brute force a root of The roots are и (after finding for example we can divide by corresponding monom and the root of resulting monom could be found easily).

Позволять

Let us look for error values using formula

куда корни We get

Fact, that should not be surprising.

Corrected code is therefore [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Decoding with unreadable characters with a small number of errors

Let us show the algorithm behaviour for the case with small number of errors. Let the received word is [ 1 0 0 ? 1 1 ? 0 0 0 1 0 1 0 0 ].

Again, replace the unreadable characters by zeros while creating the polynomial reflecting their positions Compute the syndromes и Create syndrome polynomial

Let us run the extended Euclidean algorithm:

We have reached polynomial of degree at most 3, and as

мы получили

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

Позволять Не волнуйся, что Корень является

Позволять

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

Мы получили

Дело в том, что не должно быть ничего удивительного.

Таким образом, исправленный код [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. ^ Гилл н.д., п. 3
  8. ^ Lidl & Pilz 1999, п. 229
  9. ^ Горенштейн, Петерсон и Цирлер 1960
  10. ^ Гилл н.д., п. 47
  11. ^ Ясуо Сугияма, Масао Касахара, Сигейчи Хирасава и Тошихико Намекава. Метод решения ключевого уравнения для декодирования кодов Гоппа. Информация и контроль, 27: 87–99, 1975.

Рекомендации

Основные источники

Вторичные источники

дальнейшее чтение