
- •Глава3 4
- •Часть 1 введение 4
- •Часть 2 коды хемминга, голея и рида-маллера 39
- •Часть 3 двоичные циклические коды и коды бчх 54
- •Часть 4 недвоичные бчх коды -коды рида-соломона 105
- •Глава3 часть 1 введение
- •1.1. Кодирование для исправления ошибок: Основные положения
- •1.1.1. Блоковые и сверточные коды
- •1.1.2. Хеммингово расстояние, Хемминговы сферы и корректирующая способность
- •1.2. Линейные блоковые коды
- •1.2.1. Порождающая и проверочная матрицы
- •1.2.2. Вес как расстояние
- •1.3. Кодирование и декодирование линейных блоковых кодов
- •1.3.1. Кодирование с помощью матриц g и н
- •1.3.2. Декодирование по стандартной таблице
- •1.3.3. Хемминговы сферы, области декодирования и стандартная таблица
- •1.4. Распределение весов и вероятность ошибки
- •1.4.1. Распределение весов и вероятность необнаруженной ошибки в дск.
- •1.4.2. Границы вероятности ошибки в дск, каналах с абгш и с замираниями
- •1.5 Общая структура жесткого декодера для линейных кодов
- •Часть 2 коды хемминга, голея и рида-маллера
- •2.1. Коды Хемминга
- •2.1.1. Процедуры кодирования и декодирования
- •2.2. Двоичный код Голея
- •2.2.1 Кодирование
- •2.2.2. Декодирование
- •2.2.3. Арифметическое декодирование расширенного (24,12,8) кода Голея.
- •2.3. Двоичные коды Рида-Маллера
- •2.3.1. Булевы полиномы и рм коды
- •2.3.2. Конечные геометрии и мажоритарное декодирование.
- •Часть 3 двоичные циклические коды и коды бчх
- •3.1. Двоичные циклические коды.
- •3.1.1. Порождающий и проверочный полиномы.
- •3.1.2. Порождающий многочлен
- •3.1.3. Кодирование и декодирование двоичных циклических кодов.
- •3.1.4. Проверочный полином.
- •3.1.5. Укороченные циклические коды и crc коды
- •3.2. Общий алгоритм декодирования циклических кодов
- •3.1.5 Пакеты ошибок
- •3.2.1. Арифметика gf(q)
- •3.3. Двоичные коды бчх
- •3.4. Полиномиальные коды
- •3.5. Декодирование двоичных бчх кодов
- •2. Евклидов алгоритм (еа)
- •3.5.1. Общий метод декодирования для бчх кодов
- •3.5.2. Алгоритм Берлекемпа-Мэсси (вма)
- •3.5.3. Декодер pgz
- •3.5.4. Евклидов алгоритм (еа)
- •3.5.5. Метод Ченя и исправление ошибок
- •3.5.6. Исправление стираний и ошибок
- •3.6. Распределение весов и границы вероятности ошибки
- •3.6.1. Оценка вероятности ошибки
- •Часть 4 недвоичные бчх коды -коды рида-соломона
- •4.1. Коды pc как полиномиальные коды
- •4.2. От двоичных кодов бчх к pc кодам
- •4.3. Декодирование кодов pc
- •4.3.1. Комментарий к алгоритмам декодирования
- •4.3.2. Исправление ошибок и стираний
- •4.4. Распределение весов
- •Глоссарий
- •Литература
1.2. Линейные блоковые коды
Как уже упоминалось выше, построение хорошего кода означает поиск в V2 подмножества элементов в наибольшей степени удаленных друг от друга. Это очень трудная задача. Более того, если даже это сделано, то остается неясным как назначить кодовые слова информационным сообщениям.
Линейный код (т.е. множество кодовых слов) является векторным подпространством в пространстве V2. Это означает, что операция кодирования может быть представлена умножением на матрицу. В терминах цифровой электроники простое кодирующее устройство может быть построено на элементах «исключающее ИЛИ», «И» и триггерах типа D. В этой части операциями сложения и умножения в двоичном векторном пространстве являются «исключающее ИЛИ» (сложение по модулю 2) и «И», соответственно. Таблицы сложения и умножения двоичных элементов имеют следующий вид:
а |
b |
a+b |
ab |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1.2.1. Порождающая и проверочная матрицы
Пусть С
двоичный
линейный (п,
к, dmin)
код. Так как
С есть k-мерное
подпространство, то оно имеет базис,
например, (v0,
v1,…,
vk-1)
такой, что любое кодовое слово v
С может быть записано как линейная
комбинация элементов этого базиса:
(1.9)
где ui
{0, 1}, 0 ≤ i
< k.
Уравнение
(1.9) может быть записано в матричной
форме через порождающую
матрицу G
и вектор-сообщение
и = (и0,
u1,
…, uk-1):
v=uG (1.10)
где
(1-11)
Так как С
является k-
мерным векторным пространством в V2,
то существует (n-k)-мерное
дуальное
пространство (dual
space)
С┴, которое
порождается строками матрицы Н, называемой
проверочной
матрицей (parity-check
matrix),
такой, что
GHT=0,
где через
НT
обозначена транспонированная матрица
Н. Заметим, в частности, что любое кодовое
слово v
С удовлетворяет условию
vHT=0 (1.12)
Как будет показано в разделе 1.3.2 уравнение (1.12) является фундаментальным для декодирования линейных кодов.
Линейный код С┴, который генерируется матрицей Н, является двоичным линейным (п, п - k, d┴min) кодом, который называют обычно дуальным коду С.
1.2.2. Вес как расстояние
Как упоминалось
в разделе 1.1.2,
линейные коды отличаются тем, что для
определения минимального расстояния
кода достаточно знать минимум Хеммингова
веса ненулевых кодовых слов. Ниже этот
факт будет доказан. Определим вес
Хемминга wtH
(x)
вектора х
V2,
как число
ненулевых элементов в х. Из определения
Хеммингова расстояния ясно, что wtH(x)
= dH(x,
0). Для
двоичного линейного кода С получаем
(1-13)
Наконец, из свойства
линейности кода имеем v1+v2
C.
Отсюда
следует, что минимальное расстояние
кода С равно и может быть вычислено как
минимальный вес по всем 2к
— 1 ненулевым
кодовым словам. Эта задача существенно
проще, чем полный перебор по всем парам
кодовых слов, хотя и остается очень
сложной даже для кодов среднего размера
(или размерности к).