В теории кодирования циклический код - это блочный код , где циклический сдвиг каждого кодового слова дает другое слово, которое принадлежит коду. Это коды с исправлением ошибок, которые имеют алгебраические свойства, удобные для эффективного обнаружения и исправления ошибок.
Если 00010111 является допустимым кодовым словом, применение правого кругового сдвига дает строку 10001011. Если код циклический, то 10001011 снова является допустимым кодовым словом. В общем, применение правого кругового сдвига перемещает младший бит (LSB) в крайнее левое положение, так что он становится самым старшим битом (MSB); остальные позиции сдвигаются на 1 вправо.Пусть будет линейным кодом над конечное поле (также называемое полем Галуа) из длины блока n. называется циклическим кодом, если для каждого кодового слова c = (c 1,..., c n) из C, слово (c n,c1,..., c n-1) в , полученное посредством циклического сдвига вправо компонентов, снова является кодовым словом. Поскольку один циклический сдвиг вправо равен n - 1 циклическому сдвигу влево, циклический код также может быть определен посредством циклических сдвигов влево. Следовательно, линейный код является циклическим именно тогда, когда он инвариантен относительно всех циклических сдвигов.
Циклические коды имеют некоторые дополнительные структурные ограничения на коды. Они основаны на полях Галуа и благодаря своим структурным свойствам очень полезны для контроля ошибок. Их структура сильно связана с полями Галуа, из-за которых алгоритмы кодирования и декодирования для циклических кодов являются эффективными с вычислительной точки зрения.
Циклические коды могут быть связаны с идеалами в определенных кольцах. Пусть будет кольцом многочленов над конечным полем . Определите элементы циклического кода C с многочленами от R таким образом, чтобы отображается в многочлен : таким образом, умножение на x соответствует циклическому сдвигу. Тогда C является идеалом в R и, следовательно, главным идеалом, поскольку R является кольцом главных идеалов. Идеал порождается единственным моническим элементом в C минимальной степени, порождающим многочленом g. Он должен быть делителем . Отсюда следует, что каждый циклический код является полиномиальным кодом . Если порождающий полином g имеет степень d, то ранг кода C равен .
идемпотент кода C - это кодовое слово e такое, что e = e ( то есть e является идемпотентным элементом в C), а e является идентификатором кода, то есть ec = c для каждого кодового слова c. Если n и q взаимно просты, такое слово всегда существует и уникально; это генератор кода.
неприводимый код - это циклический код, в котором код как идеал является неприводимым, т. Е. Минимален в R, так что его проверочный многочлен является неприводимым многочленом.
Например, если A = и n = 3, набор кодовых слов, содержащихся в циклических код, порожденный (1,1,0), в точности равен
Он соответствует идеалу в сгенерировано .
Многочлен неприводим в кольце многочленов, и, следовательно, код неприводимый код.
Идемпотент этого кода - многочлен , соответствующий кодовому слову (0,1,1).
Тривиальные примеры циклических кодов - это сам A и код, содержащий только нулевое кодовое слово. Они соответствуют образующим 1 и соответственно: эти два многочлена всегда должны быть множителями .
Более GF (2) код бита четности, состоящий из всех слов четного веса, соответствует генератору . Опять же по GF (2) это всегда должно быть множителем .
Прежде чем углубляться в Детали циклических кодов сначала мы обсудим квазициклические и сокращенные коды, которые тесно связаны с циклическими кодами, и все они могут быть преобразованы друг в друга.
Квазициклические коды:
An квази- Циклический код - это линейный блочный код, такой что для некоторого , который является взаимно простым с , многочлен - многочлен кодового слова всякий раз, когда - многочлен с кодовым словом.
Здесь полином кодового слова - это элемент линейного кода, кодовые слова которого являются полиномами, которые делятся на полином меньшей длины, называемый порождающим полиномом. Каждый полином кодового слова может быть выражен в форме , где - порождающий полином. Любое кодовое слово циклического кода может быть связан с полиномом с кодовым словом, а именно, . Квазициклический код с равным является циклическим кодом.
Сокращенные коды:
Линейный код называется правильный сокращенный циклический код, если он может быть получен путем удаления позиций из циклический код.
В сокращенных кодах информационные символы удаляются, чтобы получить желаемую длину блока меньше проектной длины блока. Отсутствующие информационные символы обычно предполагаются в начале кодового слова и считаются равными 0. Следовательно, −фиксировано., а затем уменьшается, что в конечном итоге уменьшает . Стартовые символы удалять не нужно. В зависимости от приложения иногда последовательные позиции считаются за 0 и удаляются.
Все отброшенные символы не нужно передавать, и на принимающей стороне их можно повторно вставить. Чтобы преобразовать циклический код в сокращенный код, установите символы на ноль и удалите их из каждого кодового слова. Любой циклический код можно преобразовать в квазициклические коды, отбросив каждый символ , где - коэффициент из . Если отброшенные символы не являются проверочными символами, тогда этот циклический код также является сокращенным кодом.
Теперь мы начнем обсуждение циклических кодов явно с обнаружения и исправления ошибок. Циклические коды могут использоваться для исправления ошибок, например коды Хэмминга, поскольку циклические коды могут использоваться для исправления одиночной ошибки. Точно так же они также используются для исправления двойных ошибок и пакетных ошибок. Все типы исправлений ошибок кратко описаны в следующих подразделах.
Код Хэмминга (7,4) имеет порождающий многочлен . Этот многочлен имеет ноль в поле расширения Галуа в примитивном элементе , и все кодовые слова удовлетворяют . Циклические коды также могут использоваться для исправления двойных ошибок в поле . Длина блока будет равной и примитивные элементы и в виде нулей в , потому что здесь мы рассматриваем случай двух ошибок, поэтому каждая будет представлять одну ошибку.
Полученное слово представляет собой многочлен степени , заданный как
где может иметь не более двух ненулевых коэффициентов, соответствующих 2 ошибкам.
Мы определяем Синдромный многочлен, как остаток от многочлена при делении на порождающий полином т.е.
as .
Пусть элементы поля и - два номера местоположения ошибки. Если возникает только одна ошибка, то равно нулю, а если ничего не происходит, оба равны нулю.
Пусть и .
Эти элементы поля называются «синдромами». Теперь, поскольку равен нулю в примитивных элементах и , поэтому мы можем написать и . Если, скажем, возникают две ошибки, то
и .
И эти два можно рассматривать как две пары уравнений в с двумя неизвестными, и, следовательно, мы можем написать
и .
Следовательно, если две пары нелинейных уравнений могут быть решены, циклические коды могут использоваться для исправления двух ошибок.
Код Хэмминга (7,4) может быть записан как циклический код над GF (2) с генератором . Фактически, любой двоичный код Хэмминга вида Ham (r, 2) эквивалентен циклическому коду, а любой код Хэмминга вида Ham (r, q) с r и q-1 взаимно простыми также эквивалентен циклическому коду. Для кода Хэмминга вида Ham (r, 2) с набор четных кодовых слов образует циклический -код.
Код, минимальное расстояние которого составляет не менее 3, имеет проверочную матрицу, все столбцы которой отличны от нуля. Если контрольная матрица для двоичного кода имеет строк, то каждый столбец является -битным двоичным числом.. Возможные столбцы . Следовательно, если контрольная матрица двоичного кода с по крайней мере 3 имеет строк, то он может иметь только столбцов, не более того. Это определяет код , называется кодом Хэмминга.
Легко определить коды Хэмминга для больших алфавитов размера . Нам нужно определить одну матрицу с линейно независимыми столбцами. Для любого слова размером будут столбцы, кратные друг другу. Итак, чтобы получить линейную независимость, все ненулевые -элементы с одним в качестве верхнего ненулевого элемента будут выбраны в качестве столбцов. Тогда два столбца никогда не будут линейно зависимыми, потому что три столбца могут быть линейно зависимыми с минимальным расстоянием кода, равным 3.
Итак, существует ненулевые столбцы с одним верхним ненулевым элементом. Следовательно, код Хэмминга - это код.
Теперь для циклических кодов Пусть будет примитивным элементом в , и пусть . Тогда и, таким образом, является нулем многочлена и является порождающим полиномом для циклического кода длиной блока .
Но для , . И полученное слово представляет собой многочлен степени , заданный как
где, или , где представляет местоположения ошибок.
Но мы также можем использовать как элемент для индексации местоположения ошибки. Поскольку , мы имеем и все степени от до различимы. Следовательно, мы можем легко определить местоположение ошибки из , если только , что означает отсутствие ошибки. Таким образом, код Хэмминга - это код с исправлением одиночной ошибки по с и .
Из расстояние Хэмминга, код с минимальным расстоянием может исправить любые ошибки . Но во многих каналах последовательность ошибок не очень произвольна, она возникает в пределах очень короткого сегмента сообщения. Такие ошибки называются пакетными ошибками. Таким образом, для исправления таких ошибок мы получим более эффективный код с большей скоростью из-за меньшего количества ограничений. Циклические коды используются для исправления пакетной ошибки. Фактически, циклические коды могут также исправлять ошибки циклических пакетов вместе с ошибками пакетов. Ошибки циклического пакета определяются как
Циклический пакет длины - это вектор, ненулевые компоненты которого находятся среди (циклически) последовательные компоненты, первая и последняя из которых не равны нулю.
В полиномиальной форме циклический всплеск длины можно описать как с как полином степени с ненулевым коэффициентом . Здесь определяет шаблон, а определяет начальную точку ошибка. Длина шаблона задается как deg . Синдромный полином уникален для каждого шаблона и задается следующим образом:
Линейный блочный код, который исправляет все пакетные ошибки длины или меньше, должен иметь как минимум проверку символы. Доказательство: потому что любой линейный код, который может исправить шаблон пакета длиной или меньше, не может иметь пакет длиной или меньше в качестве кодового слова, потому что в этом случае пакет длиной может изменить кодовое слово на шаблон пакета длины , который также можно получить, выполнив пакетную ошибку длины во всех нулевых кодовых словах. Теперь любые два вектора, которые не равны нулю в первых компонентах , должны быть из разных совместных наборов массива, чтобы их различие не являлось кодовым словом пакетов длины . Следовательно, количество таких смежных наборов равно количеству таких векторов, которые равны . Следовательно, по крайней мере, совмещает и, следовательно, не менее проверочный символ.
Это свойство также известно как граница Ригера, и оно похоже на одноэлементную границу для исправления случайных ошибок.
В 1959 году Филип Файр представил конструкцию циклических кодов, генерируемых произведением бинома и примитивного полинома. Бином имеет форму для некоторого положительного нечетного целого числа . Код огня - это код исправления циклических пакетных ошибок на с порождающим полиномом
где - простой многочлен со степенью не меньше, чем и не делит . Длина блока пожарного кода - это наименьшее целое число такое, что делит .
Код огня может исправить все пакетные ошибки длины t или меньше, если нет двух пакетов и появляются в одном совокупном наборе. Это можно доказать от противного. Предположим, есть два отличных от нуля всплеска и длиной или меньше и находятся в том же совокупном наборе кода. Итак, их отличие - это кодовое слово. Поскольку разница кратна , она также кратна . Следовательно,
.
Это показывает, что кратно , поэтому
для некоторых . Теперь, поскольку меньше и меньше , поэтому - кодовое слово. Следовательно,
.
Поскольку градус меньше степени ,не может делить . Если не равно нулю, то также не может делить , поскольку меньше и по определению , делит на отсутствие меньше, чем . Следовательно, и равно нулю. Это означает, что оба пакета одинаковы, вопреки предположению.
Коды пожара являются лучшими кодами коррекции одиночных пакетов с высокой скоростью, и они построены аналитически. Они имеют очень высокую скорость, и когда и равны, избыточность наименьшая и равна . Используя несколько кодов пожара, можно также исправить более длинные пакеты ошибок.
Для обнаружения ошибок широко используются циклические коды, называемые циклическими избыточными кодами.
Применение преобразования Фурье широко распространено в обработке сигналов. Но их приложения не ограничиваются только сложными областями; Преобразования Фурье также существуют в поле Галуа . Циклические коды, использующие преобразование Фурье, могут быть описаны в настройке, более близкой к обработке сигнала.
Преобразование Фурье по конечным полям
Дискретное преобразование Фурье вектора задается вектором где,
= где,
где exp () является корнем -й степени из единицы. Точно так же в конечном поле -й корень из единицы является элементом порядка . Следовательно,
Если - вектор над , и быть элементом порядка , тогда преобразование Фурье вектора - это вектор и компоненты задаются как
= где,
Здесь - временной индекс, - частота, а - спектр. Одно важное различие между преобразованием Фурье в комплексном поле и полем Галуа состоит в том, что сложное поле существует для каждого значения в поле Галуа существует, только если делит . В случае полей расширения в поле расширения будет преобразование Фурье , если делит на некоторое . В поле Галуа вектор во временной области находится над полем , но спектр может находиться над полем расширения .
Любое кодовое слово циклического кода длины блока может быть представлено полиномом степени не выше . Его кодировщик можно записать как . Поэтому в кодировщике частотной области можно записать как . Здесь спектр кодовых слов имеет значение в , но все компоненты во временной области взяты из . Поскольку спектр данных является произвольным, роль заключается в том, чтобы укажите те , где будет равно нулю.
Таким образом, циклические коды также можно определить как
Учитывая набор спектральных индексов, , элементы которого называются проверочными частотами, циклический код - это набор слов над , спектр которых равен нулю в компонентах, индексированных . Любой такой спектр будет иметь компоненты вида .
Итак, циклические коды являются векторами в поле , а спектр, задаваемый его обратным преобразованием Фурье, находится над полем и должны быть равны нулю в некоторых компонентах. Но каждый спектр в поле и нуль в определенных компонентах могут не иметь обратных преобразований с компонентами в поле . Такой спектр нельзя использовать в качестве циклических кодов.
Ниже приведены некоторые ограничения на спектр циклических кодов.
Если быть множителем для некоторого . Единственный вектор в веса или менее, у которого последовательные компоненты его спектра равны нулю, является вектором с полным нулем.
Если быть множителем для некоторого и целое число, которое взаимно прост с . Единственный вектор в веса или меньше, спектральные компоненты которого равны нулю для , где и , является полностью нулевым вектором.
Если быть множителем для некоторых и . Единственный вектор в веса или менее, спектральные компоненты которого равны нулю для , где and takes at least values in the range , is the all-zero vector.
When the prime is a quadratic residue modulo the prime there is a quadratic residue code which is a cyclic code of length , dimension and minimum weight at least over .
A constacyclic codeis a linear code with the property that for some constant λ if (c1,c2,...,cn) is a codeword then so is (λcn,c1,...,cn-1). A negacyclic codeis a constacyclic code with λ=-1. A quasi-cyclic codehas the property that for some s, any cyclic shift of a codeword by s places is again a codeword. A double circulant codeis a quasi-cyclic code of even length with s=2.
This article incorporates material from cyclic code on PlanetMath, which is licensed under the Creative Commons Attribution/Share-Alike License.