Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

конспект ТЭС кодирование сообщений нов

.pdf
Скачиваний:
82
Добавлен:
11.05.2015
Размер:
621.4 Кб
Скачать

жется равным n=4+2=6, что не соответствует заданному коду, и, кроме того, расстояние Хэмминга в любых парах базисных слов d =2, что менее требуемого d0=3. Поэтому в проверочную часть каждой строки дописываем еще один (третий) символ «0» или «1». Окончательно матрица Gk,n примет вид:

 

 

 

 

 

 

 

 

 

 

Ik

 

 

 

 

 

G*

 

 

 

 

 

Ik G*

 

 

1

0

0 0

 

 

0

1

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

G

=

 

 

 

 

= G4 ,7

=

0

1

0

0

1

0

1

 

 

k

 

 

 

 

 

k ,n

 

 

 

 

 

 

 

0

0

1

0

1

1

0

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

1

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a 1 a 2 ka 3 a 4 a 5 a 6ra 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(12)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поскольку базисные исходные комбинации могут быть выбраны произвольным образом, то можно построить множество матриц Gk,n с одним и тем же кодовым расстоянием. Так, для кода Хэмминга (7;4;3) существует 29 вариантов порождающих матриц вида (5.5). Коды, обладающие одними и теми же параметрами (n;k;d0), но задаваемые различными порождающими матрицами, получили название эквивалентных кодов. В этих кодах различная зависимость проверочных символов от информационных.

Формирование кодовых комбинаций с использованием порождающей матрицы

Имея каноническую порождающую матрицу Gk,n и исходный информационный блок Аk из k двоичных символов, разрешенную кодовую комбинацию А можно получить путем умножения информационного блока Аk на матрицу Gk,n:

А= Аk·×Gk,n

(13)

Пример 7 Закодировать кодом Хэмминга (7;4) информационную последовательность Аk=0101 с использованием порождающей матрицы (12). Воспользуемся выражением (13):

31

 

1 0 0 0

0 1 1

А=Аk ×G=

 

0 1 0 1

 

×

0 1 0 0

1 0 1

 

 

a1a2 a3a4

0 0 1 0

1 1 0

 

 

 

0 0 0 1

1 1 1

 

 

 

 

 

 

 

a1a2 a3 a4 a5 a6 a7

Для нахождения значения первого (старшего) разряда в кодовой комбинации поразрядно умножаем входную информационную последовательность Аk на первый столбец матрицы G4,7 и полученные символы суммируем по модулю два:

×

0101

1000

0 0 0 0 =0 = a1

Полученный символ совпадает с символом первого разряда входной последовательности Аk, поскольку в G4,7 информационная подматрица единичная. Аналогично второй, третий и четвертый символы повторяют соответствующие символы входной последовательности Аk. Поэтому достаточно рассчитать только проверочные символы кодового слова. Найдем пятый символ, для чего Аk умножим на пятый столбец матрицы (12) и получен-

ные символы просуммируем по модулю два:

×

0101

0111

0 1 0 1 =0 = a5

Аналогично рассчитаем шестой и седьмой символы кодового

слова:

×

×

 

 

 

и

32

0101

0101

1011

1101

 

 

 

0 0 0 1 =1 = a6

 

0 1 0 1 =0 = a7

В итоге получаем семиразрядную кодовую последовательность, первые четыре символа которой совпадают с информаци-

онными: А=0101010.

Рассмотренный способ формирования кодовых последовательностей довольно сложен. Более простую процедуру кодирования и декодирования линейных (n; k) кодов дает применение проверочной матрицы Нr,n.

Проверочная матрица

Для систематического линейного блочного кода проверочную матрицу Нr,n, содержащую r строк и n столбцов, можно построить на основе приведено-ступенчатой порождающей матрицы Gk,n путем транспонирования ее проверочной подматрицы G*и последующего дописывания единичной проверочной подматрицы Ir. Транспонирование подматрицы G* проводится следующим образом: каждая из строк проверочной подматрицы G* записывается последовательно в виде соответствующего столбца проверочной матрицы: т.е. первая строка записывается в виде первого столбца, вторая строка в виде второго столбца и т.д. В результате получают проверочную подматрицу Н* проверочной матрицы Нr,n. Подматрица Н* имеет ранг (r×k). К ней дописывается единичная проверочная подматрица Ir с рангом (r×r). В итоге проверочная матрица Нr,n имеет ранг (r×n).

Каждой порождающей матрице СЛБК соответствует своя проверочная матрица. Во всех случаях должно выполняться условие:

G×HT=0

(14)

где HT − транспонированная проверочная матрица.

 

Это свойство проверочной матрицы используется при декодировании СЛБК.

33

Для (7;4)-кода Хэмминга, задаваемого порождающей матрицей (5.5), приведеноступенчатая проверочная матрица имеет вид:

 

 

 

 

H *

 

 

 

I r

 

 

 

 

0

1

1

1

 

1

0

0

 

 

 

 

 

1

0

1

1

 

0

 

1

0

r

Нr,n= Н3,7=

1

1

0

1

 

0

 

0

1

 

 

 

 

 

 

 

 

a 1

a 2

a

3 a 4

a 5

a

6 a 7

 

 

 

 

 

k

 

 

n r

 

 

 

 

 

 

 

 

 

 

(15)

 

 

 

 

 

 

 

 

 

 

 

Формирование кодовых комбинаций с использованием проверочной матрицы

Каждая из r строк проверочной матрицы Нr,n определяет правила формирования одного из проверочных символов разрешенной кодовой комбинации. На то, какой именно формируется символ и из какой строки подматрицы Н* его получают, указывает единица в столбце единичной подматрицы Ir. Конкретное значение проверочного символа («или «) определяется путем суммирования по модулю два тех информационных символов входной комбинации Аk, номера которых совпадают с ненулевыми (единичными) позициями соответствующей строки проверочной подматрицы Н*. Таким образом формируются проверочные уравнения для любого конкретного СЛБК. Система проверочных уравнений для (7;4)- кода с проверочной матрицей (15) имеет вид:

a5

= a2 a3

a4

 

 

a6

= a1

a3

a4

 

(16)

 

a

7

= a

a

2

a

 

 

 

1

 

4

 

 

34

Пример 8 Закодировать кодом (7;4) информационную последовательность Аk =0101, что и в примере 9, с использованием проверочной матрицы (15). Для нахождения проверочных символов воспользуемся системой проверочных уравнений (16):

a5 = a2 a3 a4 =1 0 1 = 0 a6 = a1 a3 a4 = 0 0 1 =1

a7 = a1 a2 a4 = 0 1 1 = 0

В итоге получаем кодовую последовательность А=0101010, совпадающую с результатом примера 9

Проверочная матрица не только задает правила кодирования линейного кода, но и определяет схему кодирующего устройства. Электрическая структурная схема кодирующего устройства для кода, задаваемого проверочной матрицей (15), приведена на рисунке 4. Разрешенная кодовая комбинация кода Хэмминга формируется за один такт после поступления входных информационных символов.

a

1

 

 

a 1

a

2

 

 

a 2

a 3

 

 

a 3

a 4

 

 

a 4

 

 

 

 

a

5

 

 

 

 

M 2

 

 

 

 

M 2

a

6

 

 

 

a

 

 

 

M 2

 

7

 

 

 

 

 

Рисунок 4 − Электрическая структурная схема кодера линей-

 

 

 

ного кода (7;4)

 

 

Расширенные коды Хэмминга

Коды Хэмминга с кодовым расстоянием d0=3 можно превратить в расширенные коды Хэмминга с расстоянием d0=4, добавив дополнительный проверочный символ, равный сумме по мо-

35

дулю два всех остальных (k + r ) символов. Этот дополнительный проверочный символ переводит все кодовые слова веса W=3 в слова веса W=4, слова веса W=5 – в слова веса W=6 и т.д. В общем случае параметры расширенного кода Хэмминга имеют вид (2r; 2r-1-r). Если, например, применить эту процедуру к (7;4) - коду Хэмминга с проверочной матрицей (15), то получится следующая дополненная проверочная матрица:

0111 100 0

Н4,8= 1011 010 0

(17)

1101 001 0

 

1111 111 1

 

Дополненная матрица (17) не имеет канонической формы, поскольку правая часть этой матрицы не является единичной подматрицей, что не позволяет определить каждый проверочный символ только по информационным символам. Этот недостаток можно исправить, преобразовав последнюю строку матрицы (17) путем поразрядного прибавления к ней по модулю два каждой из первых трех строк матрицы. В результате получим проверочную матрицу расширенного кода Хэмминга (8;4;4):

 

0111 1000

 

 

 

Н14,8=

1011 0100

(18)

 

1101 0010

 

 

1110 0001

 

 

 

 

Последняя строка полученной матрицы задает проверку на четность.

Пример 9 Закодировать расширенным кодом Хэмминга (8;4) ту же информационную последовательность Аk =0101, что и в примерах 6 и 7.

Для нахождения проверочных символов составим систему проверочных уравнений, используя матрицу (18):

36

a5 = a2 a3 a4 =1 0 1 = 0 a6 = a1 a3 a4 = 0 0 1 =1 a7 = a1 a2 a4 = 0 1 1 = 0

a8 = a1 a2 a3 = 0 1 0 =1

В итоге получаем кодовую последовательность А=01010101, отличающуюся от результатов примеров 9 и 10 наличием дополнительного (четвертого) проверочного символа. Фактическое его значение численно равно сумме по модулю два всех символов кодовой комбинации, полученной в примерах 7 и 8

Рассмотренные на примере кодов Хэмминга систематические линейные коды имеют существенные недостатки, важнейшим из которых является трудоемкость их построения при длине кодовой последовательности n >31 двоичных символов и для коррекции ошибок кратностью tисп≥3 двоичных символов. Это связано с параллельным декодированием всего слова, когда за один такт необходимо исправить ошибки во всей принятой комбинации. Поиск более простых принципов построения СЛБК привел к открытию нового широкого класса групповых линейных блочных кодов, получивших название циклических кодов.

ЦИКЛИЧЕСКИЕ КОДЫ

Общие сведения

Циклические коды (ЦК) являются подклассом в классе линейных блочных кодов, удовлетворяющим дополнительному свойству цикличности. Циклические коды вместе с каждым кодовым словом (а1а2…аn) содержат также и его циклическую перестановку (а2а3…аnа1). Для построения кода достаточно задать всего лишь одно кодовое слово. Остальные кодовые слова образуются из исходного путем циклического сдвига влево или вправо на один, два, …, (k-1) символов. При этом упрощаются процедуры кодирования и декодирования. Например, если в ЦК (7;4) входит кодовое слово А1=0001011, то код овые слова А2=0010110 и

37

А3=0101100 также относятся к данному ЦК. Кодовые слова ЦК имеют длину n двоичных кодовых символов и описываются полиномами степени (n-1), в которых коэффициентами при соответствующих степенях формальной переменной, обозначаемой через х, являются двоичные символы кодовой последовательности. В общем виде кодовую последовательность ЦК можно записать так:

a( x ) = an1 xn1 + an2 xn2 +...+ a1 x1 + a0 x0 ,

(19)

где х - формальная переменная;

n-1, n-2,…,1,0 - показатели степеней формальной переменной и одновременно порядковые номера, которые занимают двоичные символы (разряды) кодовой последовательности, начиная со старшего и заканчивая нулевым;

Коэффициенты аi формальной переменной, могут быть равными логической "1" (ненулевой член) или логическому "0" (нулевой член). Обычно запись полинома упрощают, опуская сомножители аi=1 и вычеркивая слагаемые, в которые входит

аi=0. Например,

а(х)=1∙х4+0 ∙х3+1∙х2+0 ∙х1+1∙х042+1 (20)

В двоичном коде полиному (6.2) соответствует кодовая последовательность А1=10101. В приведенном примере кодовое слово имеет длину n=5. Если кодовая комбинация должна иметь большую длину, например, n=7, необходимо дописать в старшие разряды недостающие нулевые символы. Тогда 7-ми разрядная кодовая комбинация, соответствующая полиному (20), примет вид: А2=0010101. Арифметические действия над полиномами выполняются по обычным правилам, только вычитание заменяется суммированием, а коэффициенты членов полинома с одинаковыми степенями "х" (подобные члены) суммируют по модулю два.

Пример 10 Необходимо выполнить операцию вычитания и операцию умножения с полиномами а1(х)=х532 и а2(х)=х42+х. Учитывая особенности арифметических правил

при работе с полиномами, получаем:

а1(х) - а2(х)=а1(х)+а2)= х532+ х42+х= х543+х,

поскольку х22=х2(1 1) = 0 ;

38

а1(х)∙а2(х)=(х532)∙( х42+х)= х976+ х754+

х643= х953.

Формирование новых разрешенных кодовых последовательностей по одной заданной комбинации а(х) (10) можно рассматривать, как умножение а(х) на "х" при первом сдвиге, на х2 при втором сдвиге и т.д. Чтобы степень новой кодовой последова-

тельности не превышала (n-1), член полинома an1 xn необхо-

димо заменить единицей. Это допустимо, поскольку при сложении по модулю два двучлен (хn-1) можно записать как хn=1=х0. Поэтому, в результате первого сдвига с учетом (10), получаем:

a(x) х = an2 xn1 + an3 xn2 +... + a1 x2 + a0 x1 + аn1 x0 .

В результате второго сдвига а(х) умножается на х2, то есть полученное при первом сдвиге произведение а(х)∙х вновь умножается на х и т.д.

Порождающий полином циклического кода

Важным свойствам циклических кодов является то, что все разрешенные кодовые слова - полиномы кратны одному фиксированному полиному g(х), который называется порождающим (генерирующим, образующим) полиномом. При делении на порождающий полином запрещенных кодовых комбинаций всегда образуется остаток R(х), отличный от нуля. Именно эта особенность циклических кодов используется при кодировании и декодировании. Старшая степень порождающего полинома всегда равна числу проверочных символов кода: r=n-k. В общем случае порождающий полином имеет вид:

g( x ) = gr xr + gr1 xr1 +...+ g1 x1 + g0 x0 ,

(21)

где gr,…, g0 - коэффициенты формальной переменной "х", могут быть равны “1” или “0”

В теории кодирования показано, что старшую степень полинома g(х) следует выбирать равной

r=ltисп,

(22)

где l определяется условием 2l= n+1.,

 

39

Пример 11 Определить количество проверочных символов r для циклического кода с числом информационных символов k=20 и кратностью исправляемых ошибок tисп=2.

Учитывая условие (22), определим методом подбора приемлемое значение l. Примем l=3. Тогда n=2l-1=23-1=7, что меньше k=20. Следовательно, необходимо увеличить l. При l=4 также получаем n‹k. Возьмем l=5. Тогда n=2l-1=25-1=31; r=ltисп=5·2=10. В р езультате получаем код (31;21) с n=31, k=n- r=21 и r=10. Этот код обеспечивает кодовое расстояние d0≥2tисп+1=5.

Для того, чтобы порождающие полиномы имели нужные свойства, необходимо выполнение двух условий:

а) полиномы g(х) должны быть неприводимыми т.е. не делиться ни на какой другой полином;

б) двучлен вида n+1) должен делиться на g(х) без остатка (имеется в виду обычная операция деления). Такие полиномы найдены с помощью ЭВМ и приведены в специальных таблицах.

Примечание: Как исключение, в качестве порождающего допускается использовать полином вида х542+1, не удовлетворяющий вышеприведенным условиям (ГОСТ 1742282 Системы передачи данных. Скорости передачи данных и основные параметры помехоустойчивых циклических кодов.)

Проверочный полином циклического кода

В циклических кодах результат деления двучлена (хn+1) на порождающий полином g(х) дает проверочный полином h(х) сте-

пени k , т.е.

 

 

 

 

h(х)= (хn+1)/ g(х)= h xk +h

xk 1 +...+h x1

+h x0

, (23)

k

k 1

1

0

 

где h0 ...hk - коэффициенты формальной переменной «х», могут

быть равны «0» или «1».

 

Для циклических кодов должно выполняться условие:

 

g(x)·h(x)=хп+1=0

(24)

40