
- •В.О. Осипян
- •1. Алфавит дискретных устройств. Конечные поля
- •1. 1. Простое поле галуа gf( p )
- •1. 2. Составное поле галуа gf( Рn )
- •2. Кодирование информации
- •2. 1. Основные понятия. Примеры кодов
- •2. 2. Линейные коды. Способы их задания
- •2. 3. Свойства линейного кода. Коды хэмминга
- •2. 4. Циклические коды
- •2. 5. Коды бчх, исправляющие две ошибки
- •2. 6. Нелинейные коды. Коды адамара
- •2. 7. Границы мощности кодов
- •3. Информация и неопределённость
- •3. 1. Количественная мера неопределённости
- •3. 2. Условная неопределённость.
- •3. 3. Передача информации
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. Разработать алгоритм декодирования линейных блочных кодов.