В теории кодирования циклический код — это блочный код , где циклические сдвиги каждого кодового слова дают другое слово, принадлежащее коду. Это коды с исправлением ошибок , которые обладают алгебраическими свойствами, удобными для эффективного обнаружения и исправления ошибок .
Пусть — линейный код над конечным полем (также называемым полем Галуа ) длины блока . называется циклическим кодом , если для каждого кодового слова из слово в , полученное циклическим правым сдвигом компонентов, снова является кодовым словом. Поскольку один циклический правый сдвиг равен циклическим левым сдвигам, циклический код также может быть определен с помощью циклических левых сдвигов. Следовательно, линейный код является циклическим в точности тогда, когда он инвариантен относительно всех циклических сдвигов.
Циклические коды имеют некоторые дополнительные структурные ограничения на коды. Они основаны на полях Галуа и из-за своих структурных свойств они очень полезны для контроля ошибок. Их структура тесно связана с полями Галуа, из-за чего алгоритмы кодирования и декодирования для циклических кодов являются вычислительно эффективными.
Циклические коды могут быть связаны с идеалами в некоторых кольцах. Пусть будет кольцом полиномов над конечным полем . Определим элементы циклического кода с полиномами в таким образом, что отображается в полином : таким образом, умножение на соответствует циклическому сдвигу. Тогда является идеалом в , и, следовательно, главным , так как является кольцом главных идеалов . Идеал порождается единственным моническим элементом в минимальной степени, порождающим полиномом . [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 из единицы является элементом порядка . Поэтому
Если — вектор над , и — элемент порядка , то преобразование Фурье вектора — это вектор , а компоненты задаются выражением
= где,
Здесь — временной индекс, — частота , — спектр . Одно важное различие между преобразованием Фурье в комплексном поле и полем Галуа заключается в том, что комплексное поле существует для каждого значения , тогда как в поле Галуа существует только в том случае, если делит . В случае полей расширения будет преобразование Фурье в поле расширения, если делит для некоторого . В поле Галуа вектор временной области находится над полем , но спектр может находиться над полем расширения .
Любое кодовое слово циклического кода длины блока может быть представлено полиномом степени не выше . Его кодер может быть записан как . Следовательно, в частотной области кодер может быть записан как . Здесь спектр кодового слова имеет значение в , но все компоненты во временной области находятся из . Поскольку спектр данных произволен, роль заключается в указании тех, где будет равен нулю.
Таким образом, циклические коды можно также определить как
При наличии набора спектральных индексов, , элементы которого называются контрольными частотами, циклический код представляет собой набор слов, спектр которых равен нулю в компонентах, индексированных . Любой такой спектр будет иметь компоненты вида .
Итак, циклические коды являются векторами в поле , а спектр, заданный его обратным преобразованием Фурье, находится над полем и ограничен нулевым значением в определенных компонентах. Но каждый спектр в поле и нулевой в определенных компонентах может не иметь обратных преобразований с компонентами в поле . Такой спектр не может использоваться в качестве циклических кодов.
Ниже приведены некоторые границы спектра циклических кодов.
Если быть фактором для некоторого . Единственный вектор в весом или меньше, у которого последовательные компоненты его спектра равны нулю, является вектором, состоящим из всех нулей.
Если быть множителем для некоторого , и целое число, которое является взаимно простым с . Единственный вектор в веса или меньше, спектральные компоненты которого равны нулю для , где и , является полностью нулевым вектором.
Если быть множителем для некоторых и . Единственный вектор в веса или меньше, спектральные компоненты которого равны нулю для , где и принимает по крайней мере значения в диапазоне , является вектором, состоящим из всех нулей.
Если простое число является квадратичным вычетом по модулю простого числа, то существует код квадратичного вычета , который является циклическим кодом длины , размерности и минимального веса не менее .
Констациклический код — это линейный код со свойством, что для некоторой константы λ, если ( c 1 ,c 2 ,..., c n ) является кодовым словом, то также является (λ c n ,c 1 ,..., c n -1 ). Негациклический код — это констациклический код с λ=-1. [8] Квазициклический код обладает свойством, что для некоторого s любой циклический сдвиг кодового слова на s позиций снова является кодовым словом. [9] Двойной циркулянтный код — это квазициклический код четной длины с s = 2. [9] Квазискрученные коды и мультискрученные коды являются дальнейшими обобщениями констациклических кодов. [10] [11]
В данной статье использованы материалы из циклического кода PlanetMath , лицензированного по лицензии Creative Commons Attribution/Share-Alike License .