Вопрос 4. Линейные коды
Линейные коды1 образуют некоторый подкласс в классе всех кодов. Почти все известные блоковые и древовидные коды являются кодами этого типа.
Можно построить линейные коды, символы которых являются элементами произвольного множества, однако почти все основные результаты в теории кодирования получены в предположении, что символы кода являются элементами конечного поля, в частности при q = 2.
Для двоичных линейных кодов общепринято название групповой код. Кроме того, линейные блоковые коды иногда называют групповыми алфавитами.
Совокупность всех наборов элементов (векторов) длины п образует векторное пространство V. Задано оно может быть квадратной матрицей Wn x n, строками которой являются n базисных (линейно-независимых) векторов w1 - wn, например:
Все векторное пространство является линейной комбинацией этих базисных векторов
|
(4.1) |
Коэффициенты ai в выражении (4.1) принадлежат полю Fq.
Некоторое множество векторов длины n называется линейным блоковым кодом тогда и только тогда, когда, оно является подпространством V’ векторного пространства V всех наборов длины п.
Линейные коды могут быть заданы матрицами. Матрица Gk x n , k ≤ n для задания кода может содержать некоторые строки матрицы W. Если k = n, то код будет представлять собой все пространство V и кодовое расстояние его будет d = 1.
Пример:
Любое множество базисных векторов линейного кода V’ рассматриваемое как строки матрицы G, называемой порождающей матрицей кода V’.
Пространство строк (совокупность всех линейных комбинаций вектор–строк матрицы) матрицы G является линейным кодом V’, и вектор является кодовым вектором тогда и только тогда, когда он является линейной комбинацией строк матрицы G.
Если размерность векторного пространства V’ равна k, то число строк матрицы G (которое равно рангу G, потому что строки матрицы должны быть линейно независимыми) равно k (это будет количество информационных разрядов).
Различные линейные комбинации дают различные кодовые векторы, и так как имеется k коэффициентов с q ( при q=2 это 0 и 1) возможными значениями для каждого, то пространство V содержит всего qk кодовых векторов.
Такой код называется (п, k)-кодом.
Нулевое пространство V” пространства V’ – совокупность всех наборов длины n, ортогональных подпространству V’, образующее подпространство V”. Ортогональность подпространству означает ортогональность всем его векторам, т.е. скалярное произведение со всеми векторами равно нулю.
Если V’ есть подпространство размерности k, то его нулевое пространство является векторным пространством V” размерности n – k и его порождающей матрицей Hn-k,n является совокупность строк матрицы W, не вошедших в матрицу G:
Следует помнить, что V’ +V” ≠ V, а имеет место V’ +V” V.
Кроме того, существует подпространство Δ = V – (V’ +V”). В него входят вектора, не принадлежащие подпространствам V’ и V”, но и не ортогональные им.
Пример:
,
,
,
тогда вектор (1, 1) не принадлежит ни
одному из них, но и не ортогонален ни
одному из них.
Если V” есть нулевое пространство для V’, и вектор v’ принадлежит V’ то он ортогонален каждой строке матрицы H (а значит и всем векторам пространства V”), т. е.
. (4.2)
Матрица Н называется проверочной матрицей кода V’, т.е. проверить принадлежность вектора v’ пространству V’ можно по (4.2).
Соотношения (4.2) справедливы для любого вектора v’ из пространства V’. В частности, они справедливы для k базисных векторов матрицы G. Эти k уравнений можно записать как
, (4.3)
где 0 обозначает нулевую матрицу размерности k x (п — k).
Код V’ обладает избыточностью и может быть использован для помехоустойчивой передачи информации.
Сообщение I 1 x k = ( i1, i2, …, ik) преобразуется в помехоустойчивое сообщение C = v’ V’ следующим образом:
.
(4.4)
На приемной стороне безошибочность принятого вектора C проверяется по (4.2):
.
Если
,
то по
, называемым синдромом
иногда (в случае, если код позволяет
исправлять ошибку) можно найти позицию
в С, в которой произошла ошибка. Если
код обнаруживает позицию, где имеется
ошибка, то существует таблица, из которой
по синдрому можно найти эту позицию.
Если ошибки нет, то обратным преобразованием
, (4.5)
где
получают передаваемое сообщение I 1 x k .
Можно облегчить процесс декодирования и сделать С более наглядным.
При изучении свойств кодов, исправляющих ошибки, надо иметь в виду, что для любого канала с независимыми ошибками два кода, отличающиеся только расположением символов, имеют одну и ту же вероятность ошибки. Вообще между двумя такими кодами имеется очень тесная связь, и поэтому они называются эквивалентными. В результате любой элементарной операции2 над строками матрицы получается матрица с тем же самым пространством строк, и поэтому измененная матрица является порождающей матрицей для того же самого кода.
Если одна матрица может быть получена из другой путем комбинации элементарных операций над строками и перестановок столбцов, то эти две матрицы называются комбинаторно-эквивалентными.
Любая порождающая матрица G комбинаторно-эквивалентна некоторой матрице G’, имеющей ступенчатую каноническую форму3.
Более того, перестановкой столбцов можно образовать приведено-ступенчатую матрицу: сгруппировать слева k столбцов, содержащих единицы в качестве первых ненулевых элементов каждой строки, так чтобы они образовали единичную матрицу размерности k X k, в результате чего получится комбинаторно-эквивалентная матрица G" вида
Таким образом, для каждой порождающей матрицы G существует комбинаторно-эквивалентная ей матрица G", имеющая приведенно-ступенчатую форму, и каждый код эквивалентен пространству строк некоторой матрицы, имеющей приведенно-ступенчатую форму.
Следует обратить внимание, что матрица G” порождает другой код, но эквивалентный исходному по помехоустойчивости.
Тогда пусть I1 x k = (I1,I2,..., Ik) – произвольный набор длины k. Рассмотрим вектор С:
где
Таким образом, первые k компонент кодового вектора могут быть произвольно выбранными информационными символами, а каждая из последних n — k компонент является линейной комбинацией первых k компонент.
Благодаря этому код становится систематическим (линейным разделимым) кодом, кодирование сильно упрощается, а раскодирование вообще не требует алгебраических операций.
Существует теорема: Каждый линейный код эквивалентен систематическому коду.
Существует простой способ нахождения проверочной матрицы кода, если задана порождающая матрица кода в приведенно-ступенчатой форме.
Теорема. 4.1. (О проверочной матрице). Если V’— пространство строк матрицы G” = [EkP], где Ek— единичная матрица размерности k x k, a Р— матрица размерности k x (n — k), то V’ является нулевым пространством матрицы Н” = [ – РТ En-k], где En-k — единичная матрица размерности (n - k) x (n - k).
Здесь уместно отметить, что «– P» это матрица, такая, что P + (–P) = 0. Для двоичного исчисления «–P» = P.
Пример. Порождающая матрица задана в приведенно-ступенчатой форме.
Если положить
то GHT=HGT = 0, и пространство строк каждой матрицы является нулевым пространством для другой матрицы.
