
конспект ТЭС кодирование сообщений нов
.pdf
Пример 12 Определить, является ли полином g(х)=х3+х+1 порождающим для циклического кода (7;4). Если является, найти проверочный полином для этого кода.
Составим двучлен хn+1=х7+1 и разделим его на полином g(х).
|
|
|
x |
7 |
+1 |
|
|
|
x3 + x +1 |
|||
7 |
|
|
|
x |
4 |
+ x |
2 |
+ x +1 = h(x) |
||||
x |
+ x |
5 |
+ x |
4 |
|
|
|
|||||
|
|
|
|
|
|
|
|
|
x5 + x4 +1 x5 + x3 + x2
x44 + x32 + x2 +1
x+ x + x
x3 + x +1 x3 + x +1
R(x) = 0 0 0
Так как R(x)=0, полиномом g(х)=х3+х+1 является порождающим; проверочный полином h(х)= х4+х2+ х+1.
Найти порождающие полиномы и параметры циклических кодов (k, r, d0 ) при заданном n можно, разложив на множители двучлен вида (хn+1). Например, двучлен (х7+1) раскладывается
на следующие многочлены:
х7+1=(х+1) . ( х3+х2+1) .( х3+ х+1).
Путем комбинирования полученных трех сомножителей можно образовать шесть делителей для двучлена хn+1, которые можно использовать как порождающие полиномы:
g1(х)=х+1; r=1; n=7; k=6; g2(х)=х3+ х+1; r=3; n=7; k=4; g3(х)=х3+ х2+1; r=3; n=7; k=4;
g4(х)= g1(х). g2(х)=х4+ х3+х2+1; r=4; n=7; k=3; g5(х)= g1(х) .g3(х)=х4+ х2+х+1; r=4; n=7; k=3;
g6(х)= g2(х). g3(х)=х6+ х5+х4+х3+х2+х+1; r=6; n=7; k=1.
Коды, задаваемые образующими полиномами g2(х) и g3(х), относятся к классу циклических кодов Хэмминга. Коды, задаваемые полиномами g4(х), g5(х), g6(х), являются двойственными кодами Хэмминга и называются кодами максимальной длины
(КМД).
41
Для циклических кодов Хэмминга (корректируют одну ошибку, d0=3) выполняется равенство:
n=2r-1, (25)
В общем случае для циклических кодов должно выполняться условие n≤2r-1.
Неразделимые циклические коды
Разрешенную кодовую комбинацию неразделимого циклического кода получают путем умножения входного k-разрядного
сообщения Аk, представленного в виде полинома аk-1(x) степени |
|
не выше (k-1), на порождающий полином g(х). |
|
а(х)= аk-1(x) g(х), |
(26) |
где |
|
аk-1(x)= аk-1хk-1+ аk-2хk-2+…+а1х1+а0х0. |
(27) |
В полученной кодовой комбинации информационные символы не содержатся в явном виде. На практике такой способ кодирования почти не используют, т.к. усложнена процедура декодирования.
Пример 13 Необходимо закодировать циклическим неразделимым кодом (7;4) сообщение Аk=0101, если порождающий по-
лином g(х)= х3+ х+1.
Представим сообщение Аk в виде полинома аk-1(x), используя
(27):
аk-1(x)=0∙х4-1+1∙х4-2+0∙х4-3+1∙х4-4=0∙х3+1∙х2+0∙х+1∙х0=х2+1.
Найдем а(х); используя (26):
а(х)= аk-1(x) . g(х)=( х2+1 ) . ( х3+ х+1)= х5+х3+х2+х3+х+1= х5+х2+х+1= 0∙х6+1∙х5+0∙х4+ +0∙х3+1∙х2+1∙х1+1∙х0.
Преобразуем а(х) в двоичный код: А=0100111 (на месте старшего разряда дописан "0", так как полученная кодовая комбинация должна быть семиразрядной). Код получился неразделимый, поскольку не ясно, какие символы относятся к информационным, а какие к проверочным.
Разделимые циклические коды
42
В настоящее время разделимые циклические коды находят широкое применение в системах связи. Разрешенные кодовые комбинации разделимого циклического кода формируются в три этапа:
а) к кодовой комбинации простого кода Аk дописывается справа r нулей, что эквивалентно умножению аk-1(x) на хr;
б) произведение аk-1(x) хr делится на порождающий полином g(х) и определяется остаток от деления R(х), степень которого не превышает (r-1);
г) вычисленный остаток присоединяется к произведению аk-
1(x)хr и полученный полином преобразуется в двоичный вид:
а(х)=аk-1(x) .хr+R(х) А= аn−1an−2 ...a0 .
В полученной таким образом n-разрядной кодовой комбинации первые k символов являются информационными, а остальные r символов - проверочными, т.е. в кодовом слове имеется четкое деление на информационные и проверочные символы. Сформирован разделимый циклический код. Такие коды широко применяются в настоящее время.
Пример 14 Используя данные примера 13, получить разре-
шенную кодовую комбинацию разделимого циклического кода. Умножаем полином аk-1(x) на хr: аk-1(x)∙хr=(х2+1) ·х3=х5+х3.
Делим полученное произведение на порождающий полином g(х) до тех пор, пока старшая степень остатка R(х) не станет меньше старшей степени полинома g(х):
|
|
x5 + x3 |
|
x3 + x +1 |
|
|||
|
|
x2 |
||||||
x |
5 |
+ x |
3 |
+ x |
2 |
|
||
|
|
|
|
|
|
x2 = R(x)
Дописываем полученный остаток R(х) к произведению аk- 1(x)хr и получаем а(х)= х5+х3+х2. Преобразуем полином а(х) в двоичный вид: А=0101100. Сравнивая кодовые комбинации, полученные в данном и предыдущем примерах, обнаруживаем, что они не совпадают.
43

Порождающая и проверочная матрицы циклического кода
Циклические коды являются линейными. Их можно строить точно так же, как и рассмотренные выше систематические линейные коды Хэмминга, определяя порождающую (базис циклического кода) или проверочную матрицу. Как и в СЛБК, порождающая матрица циклического кода содержит k строк и n столбцов, ее ранг (k ×n ). В проверочной матрице r строк и n
столбцов, ее ранг (r ×n).
Порождающая матрица неразделимого циклического кода
Порождающая матрица неразделимого ЦК строится на базе
порождающего полинома g(х) и содержит k линейно независи-
мых строк g(х), х1 g(х), …,хк-1 g(х):
|
x 0g ( x ) |
|
0 ... 0 g r g r−1... g 1g 0 |
|
|
|||
|
x1g ( x ) |
|
g 00 ... 0 g r |
... g 2g 1 |
|
К |
||
G k,n(x) = |
x 2g ( x ) |
= |
. |
|
|
|
|
|
|
|
|
|
|
||||
. |
|
|
|
|
|
|||
|
. |
|
. |
|
|
|
|
|
|
. |
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
|
|
x k−1g ( x ) |
|
g r g r−1... g 1g 00 ... 0 |
|
|
|||
|
|
(28) |
||||||
|
|
|
|
n |
|
|
||
|
|
|
|
|
где g0, g1…gr - коэффициенты порождающего полинома (12) ;
0 - нулевые символы, дополняющие каждую строку до n- разрядной.
Матрица (28) не является канонической С использованием матрицы (28) формируются кодовые ком-
бинации неразделимого циклического кода путем поразрядного умножения информационной комбинации Аk на каждый из столбцов матрицы (28) и суммирования по модулю два результатов умножения.
Пример 15. Сформировать порождающую матрицу неразделимого циклического кода (7;4) с порождающим полиномом g(х)=х3+х+1; r=3; k=4; d0=3. Для формирования первой строки матрицы следует взять кодовую комбинацию с n=7, соответ-
44

ствующую порождающему полиному g(х) (очевидно, что она будет делиться без остатка на порождающий полином g(x)).
Первая разрешенная комбинация матрицы имеет вид:
а1(х)= х3+х+1 0001011.
Остальные три разрешенные комбинации находятся циклическим сдвигом полученной кодовой комбинации, т.е. умножением а1(х) на х, х2, х3. В результате имеем
а2(х)= а1(х).х 0010110 а3(х)= а1(х) .х2 0101100
а4(х)= а1(х) .х3 1011000.
В итоге порождающая матрица неразделимого циклического кода имеет вид:
0001011
0010110 G4,7( х) = 0101100 1011000
Порождающая матрица разделимого циклического кода
Для формирования разделимого циклического кода с помощью матрицы используют каноническую приведенно-
ступенчатую порождающую матрицу Gk ,n ( x ). Она содержит единичную подматрицу Ik рангом ( k ×k )и проверочную подматрицу G* рангом ( k ×r ). Проверочные символы для каждой из k строк матрицы Gk ,n определяются тем же способом, что и
при формировании разрешенных кодовых комбинаций разделимого циклического кода: информационная кодовая комбинация, преобразованная в полином аk-1(x), умножается на хr и затем
произведение аk-1(x) .хr делится на порождающий полином g(х)
для нахождения остатка R(х) и т.д. Кодовые комбинации разделимого циклического кода формируются с использованием по-
45

рождающей матрицы таким же образом, как в систематических линейных блочных кодах.
Пример 16 Сформировать каноническую порождающую матрицу разделимого циклического кода (7;4) с порождающим полиномом g(х)=х3+х+1. Кодовая комбинация кода (7;4) содержит k=4 информационных символов, r=3 проверочных и общее число символов n=7. Единичная матрица кода имеет вид:
1000 I4,4 = 01000010 .
0001
Для определения проверочных символов первой строки преобразуем информационную комбинацию 1000 в полином (1000 х3) и умножим его на хr. Полученное произведение
х3.х3=х6 разделим на порождающий полином g(х):
x6 + x4 x+6x3 xx33++xx++11
4 x4 2+ x3
x+ x + x
x33+ x2 + x
x+ x +1
х2 +1 = R1 (x)
Полученный остаток от деления переведем в двоичный вид с учетом разрядности строк проверочной подматрицы:
R1 (x) = x2 +1 101.В итоге первая строка канонической по-
рождающей матрицы примет вид: 1000 101. Для н ахождения второй, третьей и четвертой строк матрицы произведем деление на полином g(х) соответствующих одночленов х5, х4, х3. Получим:
R2 (x) = x2 + х+1 111,
46

R3 (x) = x2 + х 110,
R4 (x) = x +1 011.
В результате приведенно-ступенчатая порождающая матрица разделимого систематического циклического кода имеет вид:
|
1000 101 |
|
|
|
|
||
G4,7( х) = |
0100 111 |
|
. |
|
0010 110 |
|
|
|
0001 011 |
|
|
|
|
|
|
Проверочные матрицы циклических кодов
Проверочная матрица неразделимого циклического кода строится на базе проверочного полинома h(x) (14) и содержит r линейно независимых строк: h(x), х1 h(x),…,хr-1 h(x):
|
|
|
x0h( x ) |
|
0 |
.. |
.. |
|
|
|
|
||
|
|
|
|
|
|
|
|
||||||
|
|
|
|
. 0hk |
. h2h1h0 |
|
|
||||||
|
|
|
.x1h( x ) |
|
|
.. .. |
|
|
|
|
|
||
Н |
r ,n |
( x ) |
|
0 |
|
. hk . h2h1h0 0 |
|
r |
|||||
|
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
r 1 |
|
|
|
.. |
|
.. |
|
|
|
|
|
|
x |
h( x ) |
|
hk . h1 |
h0 0 |
. |
0 |
|
|
||
|
|
|
|
|
|
||||||||
|
|
|
|
, |
|||||||||
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
где h0, h1 …hk - коэффициенты полинома h(x),
0 - нулевые символы, дополняющие каждую строку до n- разрядной.
Проверочную матрицу разделимого циклического кода можно сформировать, используя каноническую ступенчатоприведенную матрицу кода, аналогично тому, как это делается в систематических линейных блочных кодах. Как и в СЛБК, для матриц циклических кодов должно выполняться условие:
G(x) H T (x) = 0 .
47
Укороченные циклические коды
На практике при применении линейных циклических кодов не всегда требуется выполнение условия (25) n=2r-1=2n-k-1, поскольку достаточное для работы число информационных символов может оказаться меньшим, чем k=n-r. Одним из возможных решений может быть укорочение систематического кода, удовлетворяющего условию (25), путем отбрасывания некоторых информационных позиций исходного кода. Число неиспользуемых информационных символов s называют глубиной (длиной) укорочения. Укороченное сообщение получается за счет фиксированной установки нулевых значений в некоторых (произвольных) информационных позициях (чаще −в старших разрядах). Остальные k-s позиций могут принимать произвольные значения. Таким образом преобразовывают исходный циклический код (n, k, d0) в укороченный код (n-s, k-s, ds) c кодовым расстоя-
нием ds≥d0.
В общем случае укороченный код не остается циклическим кодом, поскольку не сохраняется устойчивость к циклическому сдвигу. Тем не менее, для кодирования и декодирования укороченных кодов могут быть использованы те же кодеры и декодеры, что и для исходных кодов. Для компьютерного моделирования кодовые слова укороченных кодов дополняют нулями на старших позициях.
Пример 17 Требуется укоротить на две позиции разделимый циклический код Хэмминга (7;4;3) с порождающим полиномом g(х)=х3+х+1 и закодировать укороченным кодом сообщение Аk=11. Новый код, полученный из исходного установкой в нулевое состояние двух старших информационных разрядов, имеет два информационных символа и три проверочных. Множество полученных кодовых комбинаций образует укороченный линей-
ный код (5;2;3).
Для кодирования сообщения Аk = 11 распределяемым циклическим кодом представим Аk в виде полинома, умножим на хr, полученное произведение поделим на g(x), определим остаток от деления и сформируем кодовое слово:
ak-1(x) = x+1;
48
ak-1(x) . xr = (x+1) . x3 = x4+x3;
|
x4 + x3 |
x3 + x +1 |
||||
x4 + x2 + х |
|
|
|
|||
|
x +1 |
|||||
|
|
|||||
|
x3 |
+ x2 + x |
; |
|||
x |
3 + x +1 |
|||||
|
|
|
|
х2 +1 = R1(x)
a(x) = x4 + x3 + x2 + 1 A = 11101.
Коды Боузе-Чоудхури-Хоквингема
Коды Боузе-Чоудхури-Хоквингема (БЧХ-коды) являются дальнейшим развитием линейных блочных кодов Хэмминга, относятся к классу циклических кодов и обеспечивают коррекцию как независимых, так и группирующихся (пакетных) ошибок.
Порождающий полином БЧХ-кодов выбирается специальным образом, благодаря чему обеспечивается гибкость параметров кода (произвольная длина блока и скорость передачи) и сравнительно просто реализуемые процедуры декодирования.
Коды Файра
Линейные блочные циклические коды Файра обеспечивают одновременно коррекцию одиночных пакетов ошибок кратностью tп.исп. двоичных символов и обнаружение одиночных пакетов ошибок кратностью tп.обн. двоичных символов. Положение пакетов ошибок в кодовой последовательности может быть произвольным, т.е. занимать любые позиции.
Коды Файра задаются образующим полиномом вида g(x) = g’(x).(xс – 1),
где g’(x) – примитивный полином, старшая степень ξ кото-
рого не меньше кратности корректируемого пакета ошибок (ξ ≥ tп.исп) и который не делит двучлен (xс + 1),
49
с – максимальная степень двучлена,
с ≥ 2.tп.исп. или c ≥ 2.tп.исп. + tп.обн – 1.
К достоинствам циклических кодов Файра следует отнести сравнительно простые алгоритмы кодирования и декодирования, а также минимальную сложность как аппаратной, так и программной реализации кодеков.
Коды Рида-Соломона
Коды Рида-Соломона (РС-коды) являются дальнейшим развитием БЧХ-кодов, их можно интерпретировать как недвоичные коды БЧХ. Коды Рида-Соломона способны исправлять различные комбинации случайных ошибок и пакетов ошибок. Алгоритмы декодирования кодов РС весьма близки к алгоритмам декодирования для двоичных БЧХ-кодов.
Коды Рида-Соломона обладают высокой корректирующей способностью и широко применяются в современных системах связи, обработки, записи и воспроизведения информации.
ДЕКОДИРОВАНИЕ БЛОЧНЫХ ПОМЕХОУСТОЙЧИВЫХ КОДОВ
При передаче по реальному каналу связи разрешенных кодовых комбинаций помехоустойчивого кода возможны три случая:
1 передача информации без ошибки;
2 переход переданной разрешенной комбинации в другую разрешенную;
3 переход переданной разрешенной комбинации в неразрешенную.
Несмотря на то, что ошибка передачи имеется во втором и третьем случаях, обнаружена она может быть только в одном из них: при переходе разрешенной комбинации в неразрешенную. Как отмечалось в разделе «Основные принципы помехоустойчивого кодирования», существует два способа декодирования помехоустойчивых кодов: с обнаружением ошибок и с исправлением ошибок. Кратность гарантированно обнаруживаемых tобн и
50