- •Содержание
- •1 Основные сведения о циклических кодах 6
- •Введение
- •1 Основные сведения о циклических кодах
- •1.1 Определение и основные свойства циклических кодов
- •1.2 Построение кодовых последовательностей с использованием
- •1.3 Назначение и способы построения проверочной матрицы
- •1.4 Способ формирования кодовых последовательностей циклического кода с использованием образующего полинома
- •1.5 Способ построения кодовых последовательностей и определение параметров циклического кода с использованием корней образующего полинома
- •1.7 Мажоритарный алгоритм декодирования циклических кодов
- •2 Расчет параметров циклического кода
- •3 Разработка структурной схемы кодека
- •3.1 Разработка структурной схемы кодера
- •3.2 Разработка структурной схемы декодера
- •4 Разработка функциональной схемы
- •4.1 Разработка функциональной схемы кодера
- •4.2 Разработка функциональной схемы декодера
- •5 Программная реализация кодека
- •5.1 Выбор и обоснование языка программирования
- •5.2 Разработка блок-схемы кодирования циклического кода
- •5.3 Разработка блок-схемы декодирования циклического кода
- •5.4 Описание работы программной реализации кодера
- •5.5 Описание работы программной реализации декодера
- •Заключение
- •Литература
- •Приложение а Form2.H
- •Приложение б Form3.H
1 Основные сведения о циклических кодах
1.1 Определение и основные свойства циклических кодов
Важнейшим недостатком СБЛК, как отмечалось выше, является высокая трудоемкость их построения при длине кодовой последовательности n≥31 двоичный символ и коррекции ошибок кратностью tош≥3 двоичных символа. Поиск более простых принципов построения СБЛК привел к открытию нового широкого класса групповых линейных блоковых кодов, получивших название циклических кодов (ЦК). Основоположником ЦК является Прейндж [1]. Дальнейшее развитие теория построения ЦК получила в работах Боуза, Чоудхури, Хоквингейма, Файра, Рида-Соломона, Гоппы и др.
Циклические коды являются подклассом в классе линейных блоковых кодов, удовлетворяющих определенным требованиям. Свое название данные коды получили по причине того, что основной операцией построения кодовых последовательностей (Fi(x)) является цикл, а точнее циклическая перестановка двоичных символов разрешенных кодовых последовательностей [1,2].
В соответствии с [1,2,3] циклическим кодом называется линейный блоковый код, который представляет собой конечное множество, замкнутое относительно операции циклического сдвига кодовых последовательностей, образующих данный код. С математической точки зрения ЦК является идеалом в линейной коммутативной алгебре многочлена (полинома) n-го порядка по модулю двучлена xn-1 над полем коэффициентов. Это означает, что кодовые последовательности ЦК имеют длину “n” двоичных кодовых символов и описываются полиномами степени (n-1), в которых коэффициентами при соответствующих степенях формальной переменной, обозначаемой через “x”, являются двоичные символы кодовой последовательности. Формальная переменная “x”, которая носит название оператора Хаффмана или оператора задержки и не оказывает никакого влияния на свойства кода. Таким образом, кодовую последовательность ЦК в общем виде можно записать так:
Fi(x)=cn-1⋅xn-1+ cn-2⋅xn-2 +…+c1⋅x1+ c0⋅x0,
где x – форменная переменная,
n-1, n-2 ,…, 1, 0 – показатели степеней, в которые возводятся основания кодов, и одновременно порядковые номера, которые занимают двоичные символы (разряды) кодовой последовательности, начиная со старшего и заканчивая нулевым;
ci – коэффициенты формальной переменной, которые могут принимать или быть равными логической 1 (ненулевой член Fi(x)) или логического 0 (нулевой член Fi(x)).
ЦК – это такой линейный код, который обладает свойством цикличности кодовых последовательностей, т.е. когда каждая разрешенная кодовая последовательность содержит ее циклическую перестановку.
ЦК относятся к групповым линейным кодам, если они образуются путем умножения каждой последовательности равнодоступного (простого) кода, выраженных в виде многочлена Q(x) с максимальной степенью (k-1), на некоторой полином P(x) степени l=n-k. Приведение подобных членов производится по модулю два; порядок поля кодирования преобразуется с Kраз=2k до Kобщ=2n, но число разрешенных кодовых последовательностей кода при этом остается равным Kраз=2k, и они образуют циклическую подгруппу группы Kобщ=2n, отличающуюся тем, что все элементы подгруппы имеют общее свойство делимости на полином P(x), получивший название образующего или порождающего полинома.
В соответствии с [1,2,3] в качестве образующего полинома P(x) используются полиномы, обладающие следующими свойствами:
во-первых, образующий полином P(x) должен быть делителем двучлена xn+1;
во-вторых, образующий полином не должен раскладываться на сомножители более низких степеней, и делиться без остатка на самого себя и на 1, т.е. на x0;
в-третьих, максимальная степень образующего полинома должна быть равной l=n-k, т.е. соответствовать количеству проверочных символов используемого кода.
В соответствии с [9] к основным свойствам ЦК относятся:
Вес (wк.п.) разрешенной кодовой последовательности ≥ d0.
Вес проверочной части wпр.ч. разрешенной кодовой последовательности ≥ d0-1.
Сдвиг кодовых символов разрешенной кодовой последовательности влево или вправо на один, два,…, (k-1) символ вновь приводит к разрешенной кодовой последовательности.
Разрешенная кодовая последовательность без ошибок Fр'(x) при делении на полином P(x) дает нулевой остаток, т.е. Fр'(x)/P(x)=R(x)=0 и R(x) не равно 0 – при наличии ошибок;
Сумма по модулю два символов двух, трех,…, (k-1) разрешенных кодовых последовательностей вновь образует разрешенную кодовую последовательность.
Двучлен вида xn+1 должен делиться на порождающий полином P(x) без остатка (имеется в виду обычная операция деления многочленов).
Если все операции над полиномами (кодовыми последовательностями) проводятся в двоичном поле Галуа (GF(2)), т.е. действия над коэффициентами полиномов осуществляется по модулю два, а умножение полиномов производится по модулю образующего полинома P(x), то применение указанных операций не приводит к кодовым последовательностям, длина которых больше длины заданного кода, т.е. “n”.
Результат деления двучлена xn+1 на образующий полином P(x) дает полином, который носит название проверочного полинома и обозначается как h(x), т.е. h(x)=(xn+1)/P(x) и который в теории и практике помехоустойчивого кодирования играет важную роль. Произведение h(x)⋅P(x)=xn+1=0, а потому многочлены h(x) и P(x) рассматривается как ортогональные и операция деления (xn+1)/P(x) используется в основе построения алгоритмов декодирования.
Двучлен ЦК вида xn-1 можно разложить на множители
xn-1=(x-1)(xn-1+ xn-2+…+1),
которые можно использовать в качестве образующих полиномов ЦК с n=const, k=var и d0=var.
Известно [2,3,4,5], что корректирующая способность групповых СБЛК существенно зависит от вида (структуры) образующего полинома, т.е. от количества ненулевых членов данного полинома и его максимальной степени l=n-k. В соответствии с этим можно отметить следующие свойства ЦК:
обнаруживающих ошибки:
ЦК, образующий полином которого имеет более одного члена и не имеет общего множителя “x”, обнаруживает все одиночные ошибки и любое нечетное число ошибок. Простейшим образующим полиномом ЦК, обладающими данными свойствами, является полином вида P(x)=1+x;
ЦК, образующий полином которого имеет вид P(x)=1+xc, обнаруживает любое нечетное число ошибок. Доказательство этого утверждения становится ясным, если образующий полином представить в следующем виде:
P(x)=1+xc=(1+x)⋅(1+x+x2+…+xc-1).
обнаруживающих и корректирующих ошибки:
ввиду того, что полином P(x)=1+xc нацело делится на 1+x, то согласно предыдущему свойству ЦК обеспечивает обнаружение любого нечетного количества ошибок;
ЦК, образующий полином которого имеет максимальную степень l=n-k, обнаруживает любой пакет ошибок длиной tпак.обн.=l и менее двоичных символов или корректирует пакеты ошибок длиной tпак.исп=l/2 двоичных символов;
количество пакетов длиной l+1, не обнаруживаемых ЦК, составляет 1/2l-1 части всех пакетов (l+1) двоичных символов. Количество пакетов ошибок длиной более l+1, не обнаруживаемых ЦК, составляет часть всех пакетов ошибок длиной от (l+2) до “n” двоичных символов включительно.
