
- •Глава 1
- •Введение
- •Структура системы передачи цифровой информации
- •Основные понятия и определения
- •1.4 Геометрическая интерпретация кодирования и декодирования
- •Линейные блоковые коды
- •1.6. Таблица декодирования
- •1.7. Предельные возможности блоковых кодов
- •Глава 2 элементы алгебры
- •2.1. Поле
- •2.2 Вычет
- •2.3. Идеал
- •2.4. Корни полинома
- •Глава 3 циклические коды
- •3.1. Построение циклических кодов
- •3.2 Код Хэмминга
- •3.3. Коды бчх
- •Глава 4 схемы кодирования и декодирования циклических кодов
- •4.1. Линейные переключательные схемы
- •4.2 Схемы кодирования для циклических кодов
- •1 2 K2 k1 2 1 Рис. 4.14. Схемы кодирования для кода бчх (15,7)
- •4.3. Декодирование циклических кодов
2.3. Идеал
Совокупность целых чисел образует идеал, если эти числа кратны некоторому целому числу.
Аналогичное утверждение существует и для многочленов: совокупность многочленов образует идеал, когда она содержит все многочлены, кратные некоторому многочлену g(x).
Пример.
Рассмотрим систему вычетов по mod(
и выберем g(x)=x+1.
В этом случае идеал образуют следующие
многочлены:
I;
0;
x+1;
Все другие возможные произведения типа k(x)g(x) сравнимы с приведенными, например:
или
(
Если f(x)=g(x)h(x), то все элементы идеала, порождаемого g(x), удовлетворяют соотношению
𝑎(х)h(x)=0 (modf(x))
В
нашем примере g(x)=x+1;
h(x)=
Проверим справедливость этого утверждения
(
.
-
x+1
0
Следовательно,
(
.
2.4. Корни полинома
В
поле GF(
)
совокупность всех
ненулевых элементов является совокупностью
корней многочлена
.
Пример.
Пусть р=2; n=2.
Тогда
,
т.е. многочлен имеет вид
.
В нашем случае, когда р=2, знаки «минус»
и «плюс» эквивалентны, поэтому будем
рассматривать полином
.
В
расширение GF(
)
все операции проводили по модулю полинома
f(𝑎)=
.
Раньше мы убедились, что совокупность
вычетов по модулю этого полинома образует
поле.
Итак,
ненулевыми элементами поля GF(
является 1, 𝑎,
𝑎+1.
Проверим, что каждый из них обращает в
нуль полином 𝑏(x)=
b(1)=1+1=0;
b(𝑎)=
;
Следовательно, b(𝑎)=0 (modf(𝑎));
b(𝑎+1)=(( 𝑎+1)( 𝑎+1)( 𝑎+1)+1)=(
(modf(𝑎)).
Рассмотренное
свойство позволяет производить разложение
полинома
на множители, которые являются элементами
расширенного поля.
В нашем примере
Можно
проверить выполнение этого равенства,
не забывая, что все операции над элементами
расширения проводятся по mod(
(x+1)(x+𝑎)(x+𝑎+1)=(
𝑎)+x(
+
.
Рассмотрим
теперь корни полинома f(x).
Некоторые элементы расширения GF(
являются корнями этого полинома.
Пусть
известен один из них
,
т.е. f(
Можно доказать, что все другие корни
этого полинома являются степенями
.
Обратимся опять к нашему примеру, в котором p=2 и n=2.
Полином
f(x)=
имеет два корня
.
Но
Поэтому можно записать следующее
разложение полинома f(x):
f(x)=(x-
.
Мы видим, что полином, неприводимый в простом поле GF(p), может быть разложен на множители в расширении GF( .
В дальнейшем нами будут использованы также два следующих свойств [2]:
Каждый неприводимый над полем
степени n является делителем многочлена
. Это утверждение является следствием разложения полиномов и
.
Каждый делитель многочлена
имеет степень n или меньшую
Глава 3 циклические коды
3.1. Построение циклических кодов
Наиболее распространенным и излученным типом кодов являются циклические коды.
Л
и н е й н ы м ц и к л и ч е с к и х кодом
называется такой линейный код, который
содержит все циклические перестановки
некоторого кодового слова (
Элементы
удобно рассматривать как коэффициенты
полинома
A(x)=
(3.1)
Циклический
сдвиг на l
позиций
соответствует умножению на
по mod(
..
Пример.
Пусть n=3
и f(x)=
.
Рассмотрим
циклические сдвиги полинома A(x)=x+1.
в котором
,
.
A(x)=0+x+1;
xA(x)=
;
и т.д.
Мы
видим, что умножение на
приводит к циклическому сдвигу
коэффициентов. Но многочлены, которые
получаются в результате такого умножения,
образуют идеал (см. раздел 2.3).
Таким
образом, циклический код представляет
собой идеал, порождаемый некоторым
многочленом. Обозначим этот порождающий
многочлен g(x).
Он должен делить полином
.
Степень полинома g(x)
определяет число проверочных символов
кода. Каждое кодовое слова А(х) принадлежит
идеалу, т.е. может быть представлено как
A(x)=k(x)g(x)∊
Если
степень g(x)
равна r,
а
степень полином A(x)
не превышает n-1,
то степень полинома k(x)
не должна быть больше n-r-1.
Но k(x)
–произвольные полиномы. Коэффициентами
этих полиномов могут служить информационные
символы {
k(x)=
Общее число информационных символов равно k=n-r.
Следовательно, из n символов циклического кодового слова r символов являются проверочными, а k=n-r символов информационны-ми, т.е. полином g(x) порождает код (n; k).
Для
построения циклического коа необходимо
знать разложение полинома
на множители.
Мы
видели (см. раздел 2.4), что если n=
,
то многочлен
представляется как произведение
неприводимых полиномов степени не выше
m.
Каждый из этих полиномов, а также их
произведения могут быть использованы
как порождающие полиномы циклического
кода.
Пример.
Пусть
n=
.
Полином
разлагается на следующие неприводимые
многочлены:
)(
.
которые можно использовать как порождающие полиномы:
порождает
код (7.6);
порождает
код (7.4);
порождает
код (7.4);
)
порождает код (7.3).
Так как порождающий полином g(x) делит полином , то
.
Полином h(x) называется проверочным полиномом кода. Для любого кодового слова U(x) выполняется соотношение
Ú(x)h(x)=0
(mod(
Так,
в рассмотренном выше примере для кода
(7.4), который порождается полиномом
,
проверочным служит полином h(x)=
и наоборот.
Наиболее удобным способом описания кода является матричный. Для формирования порождающей матрицы циклического кода G в качестве строк берутся все циклические перестановки коэффициентов полинома g(x). Условие это можно записать так:
G=
.
(3.2)
Число столбцов матрицы G равно числу символов кода n. Но полином g(x) имеет степень r. Недостающие n-r позиций первой строки заполняются нулями.
Пример. Запишем матрицу G для порождающего полинома
g(x)=
.
Первую строку матрицы G образуют коэффициенты полинома g(x). Следующие строки получаются путем циклического сдвига влево этой первой строки:
G=
.
(3.3)
Из примера видно, что матрица (3.2) порождает несистематический код; в нем информационные и проверочные символы неразделимы. Такой код неудобен на практике. Необходимо получить порождающую матрицу в приведенно - ступенчатой форме. Для этого можно подобрать подходящие линейные комбинации строк матрицы (3.2), но лучше воспользоваться следующим приемом.
Для
любой степени
надо подобрать полиномы
и
так, чтобы выполнялось равенство
где -остаток от деления на g(x).
Тогда
=g(x)
Соотношение
(3.4) определяет кодовое слово, так как
справа стоит произведение порождающего
полинома g(x)
на некоторый полином
. Полином
должен иметь степень не больше, чем r-1.
Таким образом, в соотношении (3.4) справа
стоит поленом, имеющий 1 при
и нулевые коэффициенты при всех других
степенях j
.
Если в качестве строк порождающей матрицы взять коэффициенты этих полиномов, то получим искомую приведенно-ступенчатую матрицу
G=[
.
Матрица Р в (3.5) формируется из остатков от деления на g(x).
Пример.
n=7,
g(x)=
.
Надо найти остатки от деления на g(x); i={6, 5, 4, 3}
-
;
+x+1
;
x
;
1
;
Коэффициенты полиномов являются элементами матрицы Р.
В результате получаем следующую порождающую матрицу G.
|
G= |
(3.6)
Над матрицей G для ориентировки записаны степени х, которым соответствуют коэффициенты в столбцах матрицы. Нетрудно проверить, что матрица (3.6) может может быть также получена из матрицы (3.3) путем перестановки строк и их линейной комбинации. Однако такие манипуляции целесообразны только при небольших значениях k и n.
Рассмотрим,
какие операции над информационным
полиномом k(x)
необходимо выполнить, чтобы получить
кодовое слово с разделенными информационными
и проверочными символами. Полином k(x)
имеет степень k-1.
Умножим его на
(3.7)
Но, согласно (3.4),
.
Поставив (3.8) в (3.7), получим
Или
(3.9)
Слева
в (3.9) стоит полином, принадлежащий коду.
Первое слагаемое в правой части- полином,
коэффициенты которого равны информационным
символам. Они занимают k
позиций. Второе слагаемое r(x)=
полином, степень которого не превышает
n-k-1,
так как степени всех остатков
не превышают r-1=n-k-1.
Этот полином является остатком от
деления
на полином g(x)
и соответствует проверочным символам
слова.
Проверочная матрица циклического кода Н может быть сформирована с помощью проверочного полинома h(x). Если известна приведено-ступенчатая форма порождающий матрицы G, то соответствующая ей проверочная матрица легко отыскивается в форме
или
В
нашем примере для кода (7.4) h(x)=1+x+
и
|
H= |
Над матрицей Н записаны степени х, которым соответствуют коэффициенты полинома h(x).