Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
COD_POS_2004.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
316.93 Кб
Скачать

2. 2. Линейные коды. Способы их задания

Пусть q = Р n и GF( q ) - конечное поле в векторном представлении его элементов, а

GF n ( q ) =  х 1 х 2 . . . х n | х n GF( P ) 

- множество всех вектoров х = х 1 х 2 . . .х n длины n. Если х = х 1 х 2 . . .х n ,

у = у 1 у 2 . . . у n GF n (q),   GF( P ), то

х + у = ( х 1 + у 1 )( х 2 + у 2 ) . . . (х n + у n )

и

 х =  х 1  х 2 . . .  х n

- сумма двух векторов ( слов ) и умножение на скаляр  соответственно ( здесь и далее все операции производятся по модулю Р ).

Расстоянием Хэмминга d ( х , у ) между двумя векторами х = х 1 х 2. . .х n

и у = у1 у2 . . . уn назовём число позиций, в которых они различаются.

Весом Хэмминга W ( х ) вектора х = х 1 х 2 . . .х n назовём число ненулевых компонент х n .

Так, например, d ( 1 1 0 1 , 0 1 1 0 ) = 3 , W ( 1 1 1 0 ) = 3.

Очевидно, что d ( х , у ) = W ( х - у ) и d ( х , у ) удовлетворяет следующим условиям:

1. d ( х , у )  причём d ( х , у ) = 0 при х = у;

2. d ( х , у ) = d ( у , х );

3. d ( х , у )  d ( х , z ) + d ( z , у ).

Таким образом, GF n ( q ) представляет собой метрическое пространство с метрикой d ( х , у ) Хэмминга.

Рассмотрим наиболее важные в практическом отношении случаи векторного пространства GF n ( 2 ) и двоичного симметричного канала. Последнее означает, что ошибки в ДСК могут быть лишь типа  0 1 , 1 0.

Линейным [ n , k ] - кодом С [ n , k ] назовём подпространство размерности k пространства GF n ( 2 ). Другими словами, линейный [ n , k ] - код представляет собой множество векторов длины n над GF (2), называемыми кодовыми словами, такое, что сумма двух произвольных кодовых слов также является кодовым словом, и произведение любого кодового слова на элемент поля GF (2) тоже является кодовым словом. Очевидно, в любом линейном коде нулевое слово 0 = 0 0 . . . 0 есть кодовое слово.

Так, например, если n = 3, то

С [ 3 , 2 ] =  0 0 0 , 0 1 1 , 1 0 1 , 1 1 0

- подпространство размерности 2 пространства

GF 3( 2 ) =  0 0 0 , 0 0 1 , 0 1 0 ,0 1 1 , 1 0 0 , 1 0 1 , 1 1 0 , 1 1 1  ,

следовательно, С [ 3 , 2 ] линейный [ 3 , 2 ] - код. В самом деле С [ 3 , 2 ] образует пространство :

___+ 0 0 0 0 1 1 1 0 1 1 1 0

0 0 0 0 0 0 0 1 1 1 0 1 1 1 0

0 1 1 0 1 1 0 0 0 1 1 0 1 0 1

1 0 1 1 0 1 1 1 0 0 0 0 0 1 1

1 1 0 1 1 0 1 0 1 0 1 1 0 0 0 .

Теперь рассмотрим ещё один способ задания линейного кода.

Пусть u=u1u2 ...uk - информационное слово, т.е. слово, которому соответствует один символ из алфавита А - источника передачи информации, x=x1x2...xn - соответствующее переданное по ДСК кодовое слово ( или сигнал ), n  k , х ' = х 1х 2 . . . х i '. . . х j'. . . х n - принятое, в общем случае искажённое в позициях i, . . ., j слово.

Слово e = х - х ' = х + х ' = е 1е 2 . . . е n - есть так называемое шумовое слово, для которого

 0 , если в i - й позиции нет ошибки;

е i = 

 1 , если в i - й позиции есть ошибка.

Итак, если е = 0 0 . . . 0, то х ' = х , т.е. переданное слово принято без ошибок, а при е  0 0 . . . 0 принятое слово х ' = х + е содержит ошибку. Таким образом, шум - это всего лишь некоторый двоичный вектор и такая трактовка вопроса передачи информации достаточно упрощает математическое описание обнаружения и исправления канальных ошибок в системах связи.

Для линейного способа кодирования информации применяется следующее общее правило: если u=u1u2 ...uk - информационное слово, то для кодового слова x=x1 x2 ... xn считается, что

хi = u i , х k + i = f i ( х 1 х 2 . . . х k ) , i = 1 , n - k , ( 2 )

г де f i ( х 1 х 2 . . . х k ) , i = 1 , n - k - некоторые линейные функции. Соотношения (2) называются проверочными соотношениями.

Число r = n - k называется числом проверочных, или избыточных, или же контрольных символов, а сами символы х k + 1 , . . . , х n- проверочными, или избыточными, или же контрольными символами. Таким образом, для построения линейных помехоустойчивых кодов приходится внести r дополнительных символов в кодовые слова и тем самым уменьшить скорость передачи информации R =k / n , где k - число информационных символов, n - длина кодового слова.

Пусть

f i ( х 1 х 2 . . . х к ) = h i 1* x 1 + h i 2* x 2+ . . . + h i k* x k , i = 1 , r ,

где h i k GF( 2 ).Тогда из проверочных соотношений ( 2 ) имеем :

h i 1* x 1 + h i 2* x 2+ . . . + h i k* x k + x k + i = 0 , i = 1 , r . ( 3 )

Матрица H = ( h i j )rn размерности ( r x n) из коэффициентов (3 ) - так называемая проверочная матрица и имеет вид:

h 1 1 h1 2 . . . h 1 k 1 0 . . . 0 0

h 2 1 h 2 2 . . . h 2 k 0 1 . . . 0 0

H = . . . = ( A  E r ),

h r 1 h r 2 . . . h r k 0 0 . . . 0 1

где A- двоичная матрица размерности (r  k ), а E r - единичная матрица размерности ( r  r ). Её применяют на практике для декодирования информации.

Линейным [ n , k ] - кодом с проверочной матрицей H назовём множество всех двоичных слов x=x 1 x 2 . . . x n таких, что H х т = 0 т.е.

С [ n , k ] =  х  H х т = 0  .

Итак, мы имеем более простой способ задания линейного С [ n , k ] кода с помощью проверочной матрицы. Данный способ задания линейного кода зависит только от проверочной матрицы.

Так, например, пусть при n = 6 , к = 3 и r = 3

х 4 = х 1 + х 2 , х 1 + х 2 + х 4 = 0 ,

х 5 = х 1 + х 3 , или х 1 + х 3 + х 5 = 0 ,

х 6 = х 2 + х 3 , х 2 + х 3 + х 6 = 0 .

Тогда проверочная матрица H линейного [ 6 , 3 ] - кода С[ 6 , 3 ] имеет вид:

1 1 0 1 0 0

H = 1 0 1 0 1 0 ,

0 1 1 0 0 1

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

u1 u2 u3 х1 х2 х3 х4 х5 х6

0 0 0 0 0 0 0 0 0

0 0 1 0 0 1 0 1 1

0 1 0 0 1 0 1 0 1

0 1 1 0 1 1 1 1 0

1 0 0 1 0 0 1 1 0

1 0 1 1 0 1 1 0 1

1 1 0 1 1 0 0 1 1

1 1 1 1 1 1 0 0 0

или как С[ 6 , 3 ] =  х  H х т = 0  .

Таким образом,

С[ 6 , 3 ] =000000,001011,010101,011110,100110,101101,110011,111000 .

Очевидно, если некоторое слово х = х1х2х3 х4х5х6  С[ 6 , 3 ] , то H х т = 0,

в противном случае H х т  0.

Рассмотрим ещё один способ задания линейного кода - с помощью порождающей матрицы.

Пусть С линейный [ n , k ] - код, т.е. подпространство размерности k

пространства GF n ( 2 ). Тогда в этом подпространстве С существует базис b 1 ,b 2 , . . . b k , с помощью которого можно получить все кодовые слова линейного кода С.

Матрица G размерности ( k  n ), строками которой являются базисные векторы b 1 ,b 2 , . . . b k, называется порождающей матрицей линейного кода С. Говорят также, что код С представляет собой пространство строк порождающей матрицы G.

Другими словами, если u=u1u2 ...uk - информационное слово, то х = u G - кодовое слово.

Можно доказать,что если проверочная матрица H линейного [ n , k ]- кода С имеет вид ( A  E r ), то порождающая матрица этого же кода представляется в виде G = (E к  - А кт ) ( в двоичном случае - А = А ).

Так, например, для линейного кода С[ 6 , 3 ] порождающая матрица G имеет вид :

1 0 0 1 1 0

G= 0 1 0 1 0 1 ,

0 0 1 0 1 1

а базисные векторы - b 1 = 1 0 0 1 1 0 , b 2 = 0 1 0 1 0 1, b 3 = 0 0 1 0 1 1.

Для определения кодового слова соответствующему, например, информационному слову u = 1 0 0 , имеем:

1 0 0 1 1 0

х= u G = ( 1 0 0 ) 0 1 0 1 0 1 = 1 0 0 1 10 ,

0 0 1 0 1 1

что в самом деле принадлежит коду С[ 6 , 3 ] .

Таким образом, мы описали ещё один способ задания линейного [n, k ]- кода с помощью порождающей матрицы, что применяется на практике при кодировании информации линейными кодами.

2.2.1. Пусть х = х 1х 2 . . .х n , у = у 1 у 2 . . . у n GF(2 n ). Установить связь между расстояниями Хэмминга d Х ( х , у ) и Евклида d Е ( х , у ) .

2.2.2. Доказать, что для расстояния Хэмминга выполняется неравентво треугольника d ( х , у )  d ( х , z ) + d ( z , у ).

2.2.3. Найти все подпространства пространства GF3 (2 ).

2.2.4. Доказать, что H х' т = 0 тогда и только тогда, когда шумовое слово равно нулю.

2.2.5. Построить пример нелинейного кодирования.

2.2.6. Для фиксированной длины n определить наименьшее число избыточных символов.

2.2.7. Определить скорости передачи информации для кодов: С , С 0, С1, Сk , С[ 6 , 3 ] , М , W n .

2.2.8. Как иначе можно задать проверочную матрицу H ?

2.2.9. Построить все линейные коды длины не более семи .

2.2.10. Построить проверочную матрицу кодов С 0, С 1.

2.2.11. Доказать, что если H = ( A  E r ) , то G = (E к  - А кт ).

2.2.12. Найти все базисы линейного С[ 6 , 3 ] - кода.

2.2.13. Построить троичный линейный код длины 13.

2.2.14. Доказать, что G H т = 0 .

2.2.15. Построить проверочную и порождающую матрицы для линейно- го [ n , n - 1] - кода.

2.2.16. Доказать, что d ( х , у ) = d ( х + z , у + z ) = W ( х + у ).

2.2.17. Пусть W ( х ) = W ( у ) = w . Доказать, что d ( х , у ) - чётное число .

2.2.18. Для векторов х и у определим их произведение:

х * у = х 1 у 1 , х 2 у 2 , . . . , х n у n .

Показать, что тогда W ( х + у ) = W ( х ) + W ( у ) - 2 W ( х * у ) .

2.2.19. Разработать алгоритм декодирования линейных блочных кодов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]