stringtranslate.com

Циклический код

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

Если 00010111 является допустимым кодовым словом, применение правого циклического сдвига дает строку 10001011. Если код циклический, то 10001011 снова является допустимым кодовым словом. В общем случае применение правого циклического сдвига перемещает младший значащий бит (LSB) в крайнее левое положение, так что он становится старшим значащим битом (MSB); другие позиции сдвигаются на 1 вправо.

Определение

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

Циклические коды имеют некоторые дополнительные структурные ограничения на коды. Они основаны на полях Галуа и из-за своих структурных свойств они очень полезны для контроля ошибок. Их структура тесно связана с полями Галуа, из-за чего алгоритмы кодирования и декодирования для циклических кодов являются вычислительно эффективными.

Алгебраическая структура

Циклические коды могут быть связаны с идеалами в некоторых кольцах. Пусть будет кольцом полиномов над конечным полем . Определим элементы циклического кода с полиномами в таким образом, что отображается в полином : таким образом, умножение на соответствует циклическому сдвигу. Тогда является идеалом в , и, следовательно, главным , так как является кольцом главных идеалов . Идеал порождается единственным моническим элементом в минимальной степени, порождающим полиномом . [1] Это должно быть делителем . Отсюда следует, что каждый циклический код является полиномиальным кодом . Если порождающий полином имеет степень, то ранг кода равен .

Идемпотент это кодовое слово, такое что (то есть является идемпотентным элементом ) и является тождеством для кода, то есть для каждого кодового слова . Если и взаимно просты, такое слово всегда существует и является уникальным; [2] оно является генератором кода.

Неприводимый код — циклический код, в котором код, как идеал, неприводим, т.е. минимален в , так что его проверочный многочлен является неприводимым многочленом .

Примеры

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

.

Он соответствует идеалу, созданному .

Полином неприводим в кольце полиномов, и, следовательно, код является неприводимым кодом.

Идемпотентом этого кода является многочлен , соответствующий кодовому слову .

Тривиальные примеры

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

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

Квазициклические коды и укороченные коды

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

Определение

Квазициклические коды: [ необходима ссылка ]

Квазициклический код — это линейный блочный код, такой что для некоторого , взаимно простого с , многочлен является многочленом кодового слова всякий раз, когда является многочленом кодового слова.

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

Определение

Сокращенные коды:

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

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

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

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

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

Код Хэмминга (7,4) имеет порождающий полином . Этот полином имеет ноль в поле расширения Галуа в примитивном элементе , и все кодовые слова удовлетворяют . Циклические коды также могут использоваться для исправления двойных ошибок в поле . Длина блока будет равна и примитивным элементам и как нули в , поскольку мы рассматриваем здесь случай двух ошибок, поэтому каждый будет представлять одну ошибку.

Полученное слово представляет собой многочлен степени, заданной как

где может иметь максимум два ненулевых коэффициента, соответствующих 2 ошибкам.

Мы определяем синдромный полином как остаток полинома при делении на порождающий полином , т.е.

как .

За исправление двух ошибок

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

Пусть и .

Эти элементы поля называются «синдромами». Теперь, поскольку равен нулю в примитивных элементах и ​​, мы можем записать и . Если, скажем, происходят две ошибки, то

и .

И эти два уравнения можно рассматривать как две пары уравнений с двумя неизвестными, и, следовательно, мы можем записать

и .

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

Код Хэмминга

Код Хэмминга (7,4) может быть записан как циклический код над GF (2) с генератором . Фактически, любой двоичный код Хэмминга вида Ham (r, 2) эквивалентен циклическому коду, [3] и любой код Хэмминга вида Ham (r, q) с r и q-1 взаимно простыми также эквивалентен циклическому коду. [4] Учитывая код Хэмминга вида Ham (r, 2) с , набор четных кодовых слов образует циклический -код. [5]

Код Хэмминга для исправления одиночных ошибок

Код, минимальное расстояние которого не менее 3, имеет проверочную матрицу, все столбцы которой различны и не равны нулю. Если проверочная матрица для двоичного кода имеет строки, то каждый столбец является -битным двоичным числом. Возможны столбцы. Следовательно, если проверочная матрица двоичного кода с не менее чем 3 имеет строки, то она может иметь только столбцы, не более того. Это определяет код, называемый кодом Хэмминга.

Легко определить коды Хэмминга для больших алфавитов размера . Нам нужно определить одну матрицу с линейно независимыми столбцами. Для любого слова размера будут столбцы, которые кратны друг другу. Таким образом, для получения линейной независимости все ненулевые -кортежи с единицей в качестве самого верхнего ненулевого элемента будут выбраны в качестве столбцов. Тогда два столбца никогда не будут линейно зависимыми, потому что три столбца могут быть линейно зависимыми с минимальным расстоянием кода, равным 3.

Итак, есть ненулевые столбцы с одним в качестве самого верхнего ненулевого элемента. Следовательно, код Хэмминга — это код.

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

Но для , . И полученное слово является многочленом степени, заданной как

где или где представляет собой места ошибок.

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

Для исправления пакетных ошибок

Из концепции расстояния Хэмминга , код с минимальным расстоянием может исправить любые ошибки. Но во многих каналах шаблон ошибки не очень произволен, он возникает в пределах очень короткого сегмента сообщения. Такой тип ошибок называется пакетными ошибками . Таким образом, для исправления таких ошибок мы получим более эффективный код с более высокой скоростью из-за меньших ограничений. Циклические коды используются для исправления пакетных ошибок. Фактически, циклические коды могут также исправлять циклические пакетные ошибки вместе с пакетными ошибками. Циклические пакетные ошибки определяются как

Циклический пакет длины — это вектор, ненулевые компоненты которого находятся среди (циклически) последовательных компонентов, первый и последний из которых ненулевые.

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

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

Это свойство также известно как граница Ригера и оно похоже на границу Синглтона для исправления случайных ошибок.

Пожарные коды как циклические границы

В 1959 году Филипп Файр [6] представил конструкцию циклических кодов, сгенерированных произведением бинома и примитивного полинома. Бином имеет вид для некоторого положительного нечетного целого числа . [7] Код Файра — это циклический пакетный код исправления ошибок с порождающим полиномом

где — простой многочлен степени не меньше и не делится на . Длина блока кода огня — это наименьшее целое число, такое что делится на .

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

.

Это показывает, что является кратным , поэтому

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

.

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

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

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

О преобразовании Фурье

Применение преобразования Фурье широко распространено в обработке сигналов. Но их применение не ограничивается только комплексными полями; преобразования Фурье существуют также в поле Галуа . Циклические коды, использующие преобразование Фурье, можно описать в обстановке, более близкой к обработке сигналов.

Преобразование Фурье над конечными полями

Преобразование Фурье над конечными полями

Дискретное преобразование Фурье вектора задается вектором , где,

= где,

где exp( ) - корень th из единицы. Аналогично в конечном поле корень th из единицы является элементом порядка . Поэтому

Если — вектор над , и — элемент порядка , то преобразование Фурье вектора — это вектор , а компоненты задаются выражением

= где,

Здесь — временной индекс, — частота , — спектр . Одно важное различие между преобразованием Фурье в комплексном поле и полем Галуа заключается в том, что комплексное поле существует для каждого значения , тогда как в поле Галуа существует только в том случае, если делит . В случае полей расширения будет преобразование Фурье в поле расширения, если делит для некоторого . В поле Галуа вектор временной области находится над полем , но спектр может находиться над полем расширения .

Спектральное описание

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

Таким образом, циклические коды можно также определить как

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

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

Ниже приведены некоторые границы спектра циклических кодов.

BCH связан

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

Связанный Хартманн-Ценг

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

Рус связан

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

Коды квадратичных остатков

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

Обобщения

Констациклический код — это линейный код со свойством, что для некоторой константы λ, если ( c 1 ,c 2 ,..., c n ) является кодовым словом, то также является (λ c n ,c 1 ,..., c n -1 ). Негациклический код — это констациклический код с λ=-1. [8] Квазициклический код обладает свойством, что для некоторого s любой циклический сдвиг кодового слова на s позиций снова является кодовым словом. [9] Двойной циркулянтный код — это квазициклический код четной длины с s = 2. [9] Квазискрученные коды и мультискрученные коды являются дальнейшими обобщениями констациклических кодов. [10] [11]

Смотрите также

Примечания

  1. ^ Ван Линт 1998, стр. 76
  2. ^ Ван Линт 1998, стр. 80
  3. Хилл 1988, стр. 159–160.
  4. ^ Блахут 2003, Теорема 5.5.1
  5. Хилл 1988, стр. 162–163.
  6. ^ P. Fire, E, P. (1959). Класс двоичных кодов с множественной коррекцией ошибок для ненезависимых ошибок. Sylvania Reconnaissance Systems Laboratory, Mountain View, CA, Rept. RSL-E-2, 1959.
  7. ^ Вэй Чжоу, Шу Линь, Халед Абдель-Гаффар. Исправление пакетных или случайных ошибок на основе кодов Fire и BCH. ITA 2014: 1-5 2013.
  8. ^ Ван Линт 1998, стр. 75
  9. ^ ab MacWilliams & Sloane 1977, стр. 506
  10. ^ Айдын, Нух; Сиап, Ирфан; К. Рэй-Чаудхури, Дижен (2001). «Структура квазискрученных кодов с 1 генератором и новых линейных кодов». Designs, Codes and Cryptography . 24 (3): 313–326. doi :10.1023/A:1011283523000. S2CID  17376783.
  11. ^ Айдын, Нух; Халилович, Айдын (2017). «Обобщение квази-скрученных кодов: многоскрученные коды». Конечные поля и их приложения . 45 : 96–106. arXiv : 1701.01044 . doi : 10.1016/j.ffa.2016.12.002 . S2CID  7694655.

Ссылки

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

Внешние ссылки

В данной статье использованы материалы из циклического кода PlanetMath , лицензированного по лицензии Creative Commons Attribution/Share-Alike License .