Jump to content

Код BCH

(Перенаправлено с кодов BCH )

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

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

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

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

[ редактировать ]

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

[ редактировать ]

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

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

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

Минимальные полиномы:

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

Он имеет минимальное расстояние Хэмминга не менее 3 и исправляет до одной ошибки. Поскольку полином генератора имеет степень 4, этот код имеет 11 бит данных и 4 бита контрольной суммы. Он также обозначается как: (15, 11) код BCH.

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

Он имеет минимальное расстояние Хэмминга не менее 5 и исправляет до двух ошибок. Поскольку полином генератора имеет степень 8, этот код имеет 7 бит данных и 8 бит контрольной суммы. Он также обозначается как: (15, 7) код BCH.

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

Он имеет минимальное расстояние Хэмминга не менее 7 и исправляет до трех ошибок. Поскольку полином генератора имеет степень 10, этот код имеет 5 бит данных и 10 бит контрольной суммы. Он также обозначается как: (15, 5) код BCH. (Этот конкретный полином-генератор имеет реальное применение в «информации о формате» QR-кода .)

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

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

Общие коды BCH

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

[ редактировать ]

Генераторный полином кода BCH имеет степень не более . Более того, если и , образующий полином имеет степень не более .

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

Each minimal polynomial has degree at most . Therefore, the least common multiple of of them has degree at most . Moreover, if then for all . Therefore, is the least common multiple of at most minimal polynomials for odd indices each of degree at most .

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

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

Suppose that is a code word with fewer than non-zero terms. Then

Recall that are roots of hence of . This implies that satisfy the following equations, for each :

In matrix form, we have

The determinant of this matrix equals

The matrix is seen to be a Vandermonde matrix, and its determinant is

which is non-zero. It therefore follows that hence

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

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

A polynomial code of length is cyclic if and only if its generator polynomial divides Since is the minimal polynomial with roots it suffices to check that each of is a root of This follows immediately from the fact that is, by definition, an th root of unity.

Кодирование

[ редактировать ]

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

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

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

[ редактировать ]

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

Декодирование

[ редактировать ]

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

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

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

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

[ редактировать ]

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

для к

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

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

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

[ редактировать ]

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

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

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

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

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

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

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

  1. Алгоритм Петерсона – Горенштейна – Цирлера
  2. Алгоритм Берлекэмпа – Мэсси
  3. Алгоритм Евклида Сугиямы

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

[ редактировать ]

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

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

  1. Начните с создания матрица с элементами, которые являются значениями синдромов
  2. Создать вектор с элементами
  3. Позволять обозначают неизвестные полиномиальные коэффициенты, которые имеют вид
  4. Составьте матричное уравнение
  5. Если определитель матрицы не равно нулю, то мы действительно можем найти обратную эту матрицу и найти значения неизвестных ценности.
  6. Если тогда следуй
           if 
           then
                 declare an empty error locator polynomial
                 stop Peterson procedure.
           end
           set 
    
    продолжайте декодирование Петерсона с начала, уменьшая
  7. После того, как у вас есть значения , у вас есть полином локатора ошибок.
  8. Остановите процедуру Петерсона.

Полином локатора факторной ошибки

[ редактировать ]

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

Нулями Λ( x ) являются α и 1 , ..., а - я в .

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

[ редактировать ]

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

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

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

[ редактировать ]

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

Позволять

И полином оценки ошибок [9]

Окончательно:

где

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

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

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

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

урожайность:

где

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

[ редактировать ]

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

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

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

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

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

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

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

[ редактировать ]

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

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

и сравнить коэффициенты вблизи степеней к

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

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

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

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

Поэтому,

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

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

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

В формуле Форни можно умножить на скаляр, дающий тот же результат.

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

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

[ редактировать ]

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

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

[ редактировать ]

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

[ редактировать ]

Рассмотрим код 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 с добавлением на основе побитового исключающего ИЛИ.)

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

вычислить

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

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

мы получаем

Поэтому,

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

Позволять

Найдем значения ошибок по формуле

где являются корнями Мы получаем

Факт, что не должно вызывать удивления.

Таким образом, исправленный код [ 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, и так как

мы получаем

Поэтому,

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

Позволять

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

Мы получаем

Тот факт, что не должно вызывать удивления.

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

  1. ^ Рид и Чен 1999 , стр. 189
  2. ^ На этот раз в 1959 году.
  3. ^ Бозе и Рэй-Чаудхури
  4. ^ «Система кодирования посадочного модуля Фобос: программное обеспечение и анализ» (PDF) . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 25 февраля 2012 г.
  5. ^ Марелли, Алессия; Микелони, Рино (2018). «Коды BCH для твердотельных накопителей» . Внутри твердотельных накопителей (SSDS) . Серия Springer в области передовой микроэлектроники. Том. 37. С. 369–406. дои : 10.1007/978-981-13-0599-3_11 . ISBN  978-981-13-0598-6 . Проверено 23 сентября 2023 г.
  6. ^ Гилл н.д. , с. 3
  7. ^ Лидл и Пильц 1999 , стр. 229
  8. ^ Горенштейн, Петерсон и Цирлер, 1960 г.
  9. ^ Гилл н.д. , с. 47
  10. ^ Ясуо Сугияма, Масао Касахара, Сигейчи Хирасава и Тошихико Намекава. Метод решения ключевых уравнений для декодирования кодов Гоппы. Информация и контроль, 27:87–99, 1975.

Первоисточники

[ редактировать ]

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

[ редактировать ]

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

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f6c7e20124a1c41ed71db2e3670d20e6__1713904200
URL1:https://arc.ask3.ru/arc/aa/f6/e6/f6c7e20124a1c41ed71db2e3670d20e6.html
Заголовок, (Title) документа по адресу, URL1:
BCH code - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)