Линейные коды. Определения. Порождающая и проверочная матрицы. Связь кодового расстояния с проверочной матрицей. Граница Варшамова—Гилберта. Систематическое кодирование. Декодирование по синдрому. Коды Хемминга.
Остаточный код. Граница Грайсмера—Соломона—Штиффлера.
2. Линейные коды:
определение
Пусть 𝑞 — степень простого числа и символы кодовых слов —
элементы конечного поля 𝔽 𝑞.
𝑛, 𝑀, 𝑑 𝑞-код 𝐶 называется линейным, если он является линейным
подпространством пространства 𝔽 𝑞
𝑛, то есть линейная комбинация
кодовых слов также является кодовым словом.
Если dim 𝐶 = 𝑘, то говорят, что задан
линейный 𝑛, 𝑘, 𝑑 𝑞-код
3. Линейные коды:
пример кода
Пример линейного двоичного кода — код с проверкой чётности:
𝐶 ≔ 𝑎1, … , 𝑎 𝑛 ∈ 𝔽2
𝑛
∣ ∑𝑎𝑖 = 0
Один из базисов этого кода:
1,0,0, … , 0,1
0,1,0, … , 0,1
0,0,1, … , 0,1
⋮
0,0,0, … , 1,1
4. Линейные коды:
порождающая матрица
Если выписать базис линейного 𝑛, 𝑘, 𝑑 𝑞-кода построчно в виде
матрицы размера 𝑘 × 𝑛, получим порождающую матрицу кода.
Для задания 𝑛, 𝑘, 𝑑 𝑞-кода достаточно указать его порождающую
матрицу 𝐺 ∈ 𝔽 𝑞
𝑘×𝑛.
Число линейных комбинаций 𝑘 базисных векторов с
коэффициентами из 𝔽 𝑞 равно 𝑞 𝑘, поэтому
каждый 𝑛, 𝑘, 𝑑 𝑞-код является 𝑛, 𝑞 𝑘, 𝑑 𝑞
-кодом
5. Линейные коды:
кодирование
Если линейный 𝑛, 𝑘, 𝑑 𝑞-кода задан порождающей матрицей 𝐺, а
исходное сообщение представлено как вектор 𝒙 ∈ 𝔽 𝑞
𝑘
, то
закодировать его можно быстро и просто:
𝒙
кодирование
𝒙 𝑇 𝐺 ∈ 𝔽 𝑞
𝑛
Обратно, если закодированное сообщение 𝒂 ∈ 𝔽 𝑞
𝑛
было принято
без ошибок, декодируем его, решая, например, методом Гаусса,
систему:
𝒙 𝑇 𝐺 = 𝒂
Правда, коды нам как раз были нужны, чтобы уметь декодировать
сообщения с ошибками…
6. Линейные коды:
канонический вид
Порождающую матрицу 𝐺 ∈ 𝔽 𝑞
𝑘×𝑛
линейными преобразованиями
и перестановками строк и столбцов можно привести к
каноническому виду:
1 0 ⋯ 0
0 1 ⋯ 0
⋮ ⋮ ⋱ ⋮
0 0 ⋯ 1
𝐺
где 𝐺 ∈ 𝔽 𝑞
𝑘× 𝑛−𝑘
.
Тогда кодирование будет систематическим:
𝑥1, … , 𝑥 𝑘
кодирование
𝑥1, … , 𝑥 𝑘 ∣ 𝒙 𝐺
7. Линейные коды:
канонический вид
Если порождающая матрица кода задана в каноническом виде, то
кодирование будет систематическим и слово 𝑥1, … , 𝑥 𝑘 переходит
в
𝑥1, … , 𝑥 𝑘 ∣ 𝒙 𝐺 = 𝑥1, … , 𝑥 𝑘, 𝑥1, … , 𝑥 𝑛−𝑘
• Разряды 𝑥1, … , 𝑥 𝑘 — информационные
• Разряды 𝑥1, … , 𝑥 𝑛−𝑘 — проверочные
8. Линейные коды:
эквивалентные коды
Если матрица 𝐺 исходно задана не в каноническом виде, а мы
приводим её к каноническому виду, то получается в общем случае
не тот же код, а эквивалентный ему.
Коды 𝐶1 и 𝐶2 эквивалентны, если существует перестановка 𝜋 и
константы 𝑟1, … , 𝑟𝑛 ∈ 𝔽 𝑞 ∖ 0 , такие, что
𝑎1, … , 𝑎 𝑛 ∈ 𝐶1 ⇔ 𝑟1 𝑎 𝜋 1 , … , 𝑟𝑛 𝑎 𝜋 𝑛 ∈ 𝐶2
Для эквивалентных кодов 𝑑 𝐶1 = 𝑑 𝐶2 .
9. Кодовое расстояние линейного кода
Для слова 𝒂 ∈ 𝔽 𝑞
𝑛 будем через 𝒂 обозначать вес слова, т.е.
величину
# 𝑖 ∣ 𝑎𝑖 ≠ 0
Утверждение.
Для любого линейного кода 𝐶 имеем
𝑑 𝐶 = min
𝒂∈𝐶
𝒂≠𝟎
𝒂
10. Кодовое расстояние линейного кода
Доказательство:
Поскольку 𝟎 ∈ 𝐶, то
𝑑 𝐶 ≝ min
𝒂,𝒃∈𝐶
𝒂≠𝒃
𝑑 𝒂, 𝒃 ≤ min
𝒂∈𝐶
𝒂≠𝟎
𝑑 𝒂, 𝟎 = min
𝒂∈𝐶
𝒂≠𝟎
𝒂
В обратную сторону. Пусть кодовое расстояние достигается на паре
слов 𝒂∗, 𝒃∗.
Тогда так как 𝒂∗
− 𝒃∗
∈ 𝐶, получаем
𝑑 𝐶 = 𝑑 𝒂∗, 𝒃∗ = 𝒂∗ − 𝒃∗ ≥ min
𝒂∈𝐶
𝒂≠𝟎
𝒂
11. Проверочная матрица
Проверочная матрица 𝐻 линейного кода — это матрица
однородной системы линейных уравнений, которым
удовлетворяет код.
Для любого кодового слова 𝒂, по определению матрицы 𝐻,
выполнено равенство 𝐻𝒂 𝑇
= 𝟎.
Для 𝑛, 𝑘, 𝑑 𝑞-кода 𝐻 ∈ 𝔽 𝑞
𝑛−𝑘 ×𝑛
.
Пример: для кода с проверкой чётности
𝐻 = 11 … 1
12. Проверочная матрица
Утверждение.
Если 𝐺 и 𝐻 — порождающая и проверочная матрицы линейного
𝑛, 𝑘, 𝑑 𝑞-кода, то
𝐻𝐺 𝑇 = 𝟎 𝑛−𝑘 ×𝑘
Доказательство:
Достаточно заметить, что каждая строка матрицы 𝐺 — это кодовое
слово, а значит, она удовлетворяет системе, задаваемой 𝐻.
13. Двойственные коды
Если коды 𝐶1 и 𝐶2 таковы, что проверочная матрица 𝐶1 является
порождающей матрицей для 𝐶2, то эти коды называют
двойственными.
Коды 𝐶1 и 𝐶2 двойственны т. и т.т., когда 𝒂1, 𝒂2 = 0 для любых
слов 𝒂1 ∈ 𝐶1, 𝒂2 ∈ 𝐶2.
Поэтому двойственные коды называются также ортогональными.
14. Проверочная матрица
и кодовое расстояние
Утверждение. (О связи кодового расстояния и проверочной
матрицы)
Линейный код, определяемый проверочной матрицей 𝐻, имеет
расстояние 𝑑 т. и т.т., когда
• любые 𝑑 − 1 столбцов 𝐻 линейно независимы,
• найдутся 𝑑 линейно зависимых столбцов в 𝐻.
15. Проверочная матрица
и кодовое расстояние
Доказательство:
Пусть 𝒂 = 𝑎1, … , 𝑎 𝑛 ≠ 𝟎 — произвольное кодовое слово кода с
проверочной матрицей 𝐻.
Пусть 𝐻1, … , 𝐻 𝑛 — столбцы 𝐻. Имеем
𝐻𝒂 𝑇
= 𝑎1 ⋅ 𝐻1 + ⋯ + 𝑎 𝑛 ⋅ 𝐻 𝑛
Если 𝑖1, … , 𝑖 𝑡 — все ненулевые координаты 𝒂, то
𝑎1 𝐻1 + ⋯ + 𝑎 𝑛 𝐻 𝑛 = 𝑎𝑖1
𝐻𝑖1
+ ⋯ + 𝑎𝑖 𝑡
𝐻𝑖 𝑡
Так как 𝒂 — кодовое слово, то 𝐻𝒂 𝑇 = 𝟎, то есть
𝑎𝑖1
𝐻𝑖1
+ ⋯ + 𝑎𝑖 𝑡
𝐻𝑖 𝑡
= 𝟎
16. Проверочная матрица
и кодовое расстояние
Продолжение доказательства:
Мы получили, что в коде есть слово веса не более 𝑡 т. и т.т., когда
некоторые 𝑡 столбцов матрицы 𝐻 линейно зависимы.
Осталось воспользоваться формулой, справедливой для любых
линейных кодов:
𝑑 𝐶 = min
𝒂∈𝐶
𝒂≠𝟎
𝒂
17. Декодирование по синдрому
Пусть 𝐻 — проверочная матрица кода 𝐶, и пусть 𝒂 ∈ 𝐶.
Если при передаче 𝒂 по каналу произошло 𝑡 ошибок, на выходе из
канала имеем слово 𝒃.
Вектор 𝒆 ≔ 𝒃 − 𝒂 называется вектором ошибок.
Очевидно, 𝒆 = 𝑡.
Исправить ошибки в 𝒃 — то же самое, что найти вектор 𝒆.
Используем равенство
𝐻𝒃 𝑇 = 𝐻𝒂 𝑇 + 𝐻𝒆 𝑇 = 𝐻𝒆 𝑇
18. Декодирование по синдрому
Получаем задачу: найти вектор 𝒆, такой, что
𝒆 < 𝑑 𝐶
2
𝐻𝒆 𝑇
= 𝐻𝒃 𝑇
Утверждение.
Если решение этой системы существует, то оно единственное.
Доказательство.
Пусть нашлись разные решения 𝒆1 ≠ 𝒆2.
Тогда 𝒆1 − 𝒆2 ≤ 𝒆1 + 𝒆2 < 𝑑 𝐶
и 𝐻 𝒆1 − 𝒆2
𝑇 = 𝟎 — противоречие.
19. Декодирование по синдрому
Можно составить таблицу решений системы
𝒆 < 𝑑 𝐶
2
𝐻𝒆 𝑇
= 𝒔
для всевозможных 𝒔.
При получении из канала слова 𝒃 мы вычисляем 𝒔 ≔ 𝐻𝒃 𝑇
(синдром слова 𝒃), и для этого 𝒔 смотрим в таблице
соответствующий вектор 𝒆.
Декодированное сообщение — решение системы
𝒙 𝑇 𝐺 = 𝒃 − 𝒆
20. Граница Варшамова—Гилберта
Теорема. (Р.Р. Варшамов, E.N. Gilbert)
Пусть числа 𝑛, 𝑘, 𝑑′
∈ ℕ таковы, что
𝑗=0
𝑑′−1
𝑛 − 1
𝑗
< 2 𝑛−𝑘
Тогда существует 𝑛, 𝑘, 𝑑 -код, где 𝑑 > 𝑑′.
21. Граница Варшамова—Гилберта
Доказательство:
Покажем, что в условиях теоремы можно построить матрицу
𝐻 ∈ 𝔽2
𝑛−𝑘 ×𝑛
, у которой любые 𝑑′ столбцов линейно независимы.
Будем строить матрицу по столбцам.
Пусть уже выбраны 𝑚 столбцов (где 𝑚 < 𝑛) и требуется выбрать
𝑚 + 1 -й столбец.
Этот новый столбец не должен образовывать нулевую линейную
комбинацию с 𝑑′ − 1 или менее из уже выбранных столбцов.
22. Граница Варшамова—Гилберта
Выбираемый столбец не должен образовывать нулевую линейную
комбинацию с 𝑑′
− 1 или менее из уже выбранных столбцов.
Так как у нас 𝔽2, то это равносильно тому, что выбираемый столбец
не равен сумме 𝑑′
− 1 или менее уже выбранных столбцов.
Количество таких сумм равно
𝑗=0
𝑑′−1
𝑚
𝑗
≤
𝑗=0
𝑑′−1
𝑛 − 1
𝑗
< 2 𝑛−𝑘
23. Граница Варшамова—Гилберта
Итак, запрещённых для выбора столбцов у нас оказывается строго
меньше 2 𝑛−𝑘
, а всего векторов длины 𝑛 − 𝑘 ровно 2 𝑛−𝑘
.
Значит, найдётся вектор из 𝔽2
𝑛−𝑘
, который можно добавить в
качестве очередного столбца.
24. Двоичный код Хемминга
(R.W. Hamming)
Двоичный код с проверкой чётности
𝑎1, … , 𝑎 𝑛 ∈ 𝔽2
𝑛
∣ ∑𝑎𝑖 = 0
может обнаруживать одну ошибку, т.к. если один разряд 𝑎𝑖
заменить на противоположный, соотношение ∑𝑎𝑖 = 0 нарушится.
Но исправить ошибку не удастся.
Хочется построить двоичный код, исправляющий хотя бы одну
ошибку.
Для этого вместо «глобального» контроля чётности применим
несколько «дихотомических» проверок на чётность…
26. Двоичный код Хемминга
Проверочная матрица:
0 0 0 1 1 1 1
0 1 1 0 0 1 1
1 0 1 0 1 0 1
Столбцы матрицы — всевозможные ненулевые вектора высоты 3.
𝑗-й столбец суть двоичная запись числа 𝑗.
Любая пара столбцов л.н.з., значит 𝑑 𝐶 ≥ 3, значит, этот код
исправляет одну ошибку и обнаруживает две.
27. Двоичный код Хемминга
Если ошибка случается в 𝑎𝑗, то можно вычислить левые части
проверочных соотношений, и они дадут двоичную запись 𝑗,
например:
𝑎4 + 𝑎5 + 𝑎6 + 𝑎7 = 1
𝑎2 + 𝑎3 + 𝑎6 + 𝑎7 = 0
𝑎1 + 𝑎3 + 𝑎5 + 𝑎7 = 1
28. Двоичный код Хемминга
Общий случай: 𝑛 ≔ 2 𝑚 − 1 для некоторого 𝑚.
Код Хемминга длины 𝑛 определяется проверочной матрицей
𝐻 ∈ 𝔽2
𝑚×𝑛
, столбцы которой — всевозможные двоичные вектора
высоты 𝑚:
1 0 1 ⋯ 1
0 1 1 ⋯ 1
⋮ ⋮ ⋮ ⋯ ⋮
0 0 0 ⋯ 1
Код Хемминга имеет параметры
2 𝑚
− 1, 2 𝑚
− 𝑚 − 1, 3
29. Двоичный код Хемминга
Граница Хемминга:
Для любого 𝑛, 𝑀, 𝑑 𝑞-кода имеем
𝑀 ≤
𝑞 𝑛
𝑆 𝑑−1 2 𝟎
В двоичном случае
𝑀 ≤
2 𝑛
∑ 𝑘=0
𝑑−1 2 𝑛
𝑘
Коды, достигающие эту границу, называются совершенными или
плотно упакованными.
30. Двоичный код Хемминга
Граница Хемминга:
Для любого 𝑛, 𝑀, 𝑑 -кода имеем
𝑀 ≤
2 𝑛
∑ 𝑘=0
𝑑−1 2 𝑛
𝑘
Утверждение.
Код Хемминга является совершенным.
Доказательство:
Для кода Хемминга имеем 𝑛 = 2 𝑚 − 1, 𝑀 = 22 𝑚−𝑚−1 и 𝑑 = 3.
Отсюда ∑ 𝑘=0
𝑑−1 2 𝑛
𝑘
= 𝑛 + 1 = 2 𝑚
= 2 𝑛
𝑀.
31. Граница Синглтона для линейных кодов
Утверждение.
Для любого 𝑛, 𝑘, 𝑑 𝑞-кода имеем
𝑘 ≤ 𝑛 − 𝑑 + 1
Доказательство:
По теореме Синглтона, для любого 𝑛, 𝑀, 𝑑 𝑞-кода выполнено 𝑀 ≤
𝑞 𝑛−𝑑+1.
С другой стороны, для линейного кода 𝑀 = 𝑞 𝑘.
32. Остаточный код
Теорема. (G. Solomon, J.J. Stiffler)
Если существует 𝑛, 𝑘, 𝑑 𝑞-код, то существует и 𝑛 − 𝑑, 𝑘 − 1, 𝑑′
𝑞-
код, где 𝑑′ ≥ 𝑑 𝑞.
Доказательство:
Пусть 𝐺 — порождающая матрица некоторого 𝑛, 𝑘, 𝑑 𝑞-кода 𝐶.
Б.о.о. будем считать, что первая строка 𝐺 содержит ровно 𝑑
ненулевых элементов и имеет вид 𝑟1 … 𝑟𝑑0 … 0 .
34. Остаточный код
𝐺 =
𝑟1 … 𝑟𝑑 0 … 0
⋯ 𝐺′
Линейная комбинация 𝑈 некоторых строк 𝐺 равна 𝑡1 … 𝑡 𝑑0 … 0 ,
где ∀𝑖 𝑡𝑖 ≠ 0 .
Т.к. 𝔽 𝑞 поле, то ∃𝑠 ∈ 𝔽 𝑞, такой, что 𝑠𝑡 𝑑 = −𝑟𝑑. Тогда
𝑠 ⋅ 𝑈 + 𝑟1 … 𝑟𝑑0 … 0
— линейная комбинация строк 𝐺, равная
𝑠𝑡1 + 𝑟1 … 𝑠𝑡 𝑑−1 + 𝑟𝑑−1 00 … 0
Это противоречит условию 𝑑 𝐶 = 𝑑.
35. Остаточный код
𝐺 =
𝑟1 … 𝑟𝑑 0 … 0
⋯ 𝐺′
Итак, 𝐺′ ∈ 𝔽 𝑞
𝑘−1 × 𝑛−𝑑
и rk 𝐺′ = 𝑘 − 1.
Значит 𝐺′ является порождающей матрицей некоторого
𝑛 − 𝑑, 𝑘 − 1, 𝑑′
𝑞-кода 𝐶′
(этот код называется остаточным для
исходного кода 𝐶).
Рассмотрим любой ненулевой вектор кода 𝐶′
𝒂′ ≔ 𝑎1
′
, … , 𝑎 𝑛−𝑑
′
≠ 𝟎
такой, что 𝒂′ = 𝑑′.
В коде 𝐶 есть вектор вида
𝑎1, … , 𝑎 𝑑, 𝑎1
′
, … , 𝑎 𝑛−𝑑
′
36. Остаточный код
𝐺 =
𝑟1 … 𝑟𝑑 0 … 0
⋯ 𝐺′
В коде 𝐶 есть вектор вида
𝑎1, … , 𝑎 𝑑, 𝑎1
′
, … , 𝑎 𝑛−𝑑
′
Пусть 𝑓1, … , 𝑓𝑞 — все элементы поля 𝔽 𝑞.
Коду 𝐶 принадлежат все вектора вида
𝑎1 − 𝑓𝑖 𝑟1 , … , 𝑎 𝑑 − 𝑓𝑖 𝑟𝑑 , 𝑎1
′
, … , 𝑎 𝑛−𝑑
′
Запишем эти 𝑞 векторов построчно в виде матрицы и оценим
количество ненулевых элементов в ней.
37. Остаточный код
Рассмотрим матрицу:
𝑎1 − 𝑓1 𝑟1 … 𝑎 𝑑 − 𝑓1 𝑟𝑑 𝑎1
′
… 𝑎 𝑛−𝑑
′
𝑎1 − 𝑓2 𝑟1 … 𝑎 𝑑 − 𝑓2 𝑟𝑑 𝑎1
′
… 𝑎 𝑛−𝑑
′
⋮ ⋮ ⋮ ⋮ ⋮ ⋮
𝑎1 − 𝑓𝑞 𝑟1 … 𝑎 𝑑 − 𝑓𝑞 𝑟𝑑 𝑎1
′
… 𝑎 𝑛−𝑑
′
В этой подматрице
ровно 𝑞𝑑′
ненулевых
элементов
В каждом из этих столбцов
ровно 𝑞 − 1 ненулевых
элементов
Итого в матрице 𝑑 𝑞 − 1 + 𝑞𝑑′
ненулевых элементов.
38. Остаточный код
В рассмотренной матрице 𝑑 𝑞 − 1 + 𝑞𝑑′ ненулевых элементов.
Каждая строка матрицы — ненулевой вектор кода 𝐶, значит в
матрице не менее чем 𝑞𝑑 ненулевых элементов.
Отсюда
𝑑 𝑞 − 1 + 𝑞𝑑′
≥ 𝑞𝑑
и следовательно
𝑑′
≥ 𝑑 𝑞
39. Граница Грайсмера—Соломона—Штиффлера
Теорема. (J.H. Griesmer, G. Solomon, J.J. Stiffler)
Для любого 𝑛, 𝑘, 𝑑 𝑞-кода имеем
𝑛 ≥
𝑖=0
𝑘−1
𝑑
𝑞 𝑖
Доказательство: индукция по 𝑘.
Утверждение очевидно при 𝑘 = 1. Предположим, что оно
выполнено для кодов с размерностью ≤ 𝑘 − 1 и докажем его
для 𝑛, 𝑘, 𝑑 𝑞-кодов.
40. Граница Грайсмера—Соломона—Штиффлера
Обозначим через 𝑁 𝑘, 𝑑 минимальную длину слов у кода с
размерностью 𝑘 и расстоянием 𝑑.
Пусть 𝐶 — какой-нибудь 𝑁 𝑘, 𝑑 , 𝑘, 𝑑 𝑞-код.
Остаточный для 𝐶 код имеет параметры
𝑁 𝑘, 𝑑 − 𝑑, 𝑘 − 1, 𝑑′
𝑞
и по предположению индукции, для него справедливо неравенство
𝑁 𝑘, 𝑑 − 𝑑 ≥
𝑖=0
𝑘−2
𝑑′
𝑞 𝑖