- •Глава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. Распределение весов
- •Глоссарий
- •Литература
3.1.5. Укороченные циклические коды и crc коды
Существует много практических задач, в которых требуются коды, исправляющие ошибки, с простыми процедурами кодирования и декодирования. Однако существующие конструкции не всегда имеют нужную длину, размерность и минимальное расстояние.
Например, нужна простая FEC/ECC схема для обнаружения/исправления двоичных одиночных ошибок в информационном блоке длиной 64 символа. Задача состоит в том, чтобы найти или выбрать (ЕСС) схему кодирования для исправления однобитовой ошибки, используя не более 8 избыточных символов, т.е. при максимальной длине кода 72 (64 информационных и 8 проверочных) символа».
Так как 72 не является числом вида 2т — 1, то, очевидно, не существует подходящего циклического кода, среди тех, с которыми мы уже познакомились. Одним из возможных решений может быть использование циклического (127, 120, 3) кода Хемминга, укороченного до необходимой размерности 64. Этот вариант дает укороченный (71, 64, 3) код Хемминга.
Укорочение (в обсуждаемом здесь варианте) сводится к отбрасыванию информационных позиций исходного кода. Пусть s есть число неиспользуемых информационных символов, которое называют глубиной (длиной) укорочения. Пусть С циклический (п, k, d) код. Укороченное сообщение получается за счет фиксированной установки нулевых значений в некоторых (произвольных) информационных позициях. Остальные k-s позиций могут принимать произвольные значения. Без потери общности, можем считать, что старшие позиции сообщения устанавливаются в нулевые состояния. Тогда и(х) = и0 + u1x +...+uk-1-sxk-1-s. Данное сообщение преобразуется систематическим кодером в кодовое слово,
степень которого не превышает n-s-1. Таким образом, укороченный код Су является линейным (n-s, k-s, ds) кодом с кодовым расстоянием ds ≥ d. В общем случае укороченный код не остается циклическим кодом.
Пример 24. Пусть С циклический (7,4,3) код Хемминга с порождающим полиномом 1 + х + х3. Новый код, полученный из С установкой в нулевое состояние двух старших информационных разрядов, имеет два информационных символа и три проверочных, вычисляемых кодером кода С. Множество полученных кодовых слов образует укороченный линейный (5,2,3) код.
Фундаментальное свойство укороченных циклических кодов Cs состоит в том, что могут быть использованы те же самые кодеры и декодеры, хотя эти коды и не сохраняют устойчивость к циклическому сдвигу. Для компьютерного моделирования гораздо проще дополнять слова нулями на старших позициях и использовать те же самые алгоритмы кодирования и декодирования, которые обсуждаются в этом пособии. Этот способ (дополнения нулями) широко используется в микросхемной реализации кодов Рида-Соломона. Очевидно, что нули на старших позициях сообщения не должны включаться в кодовое слово. Более того, декодер модифицируется так, что принятое слово r(х) умножается на xn-k+s вместо умножения на хn-k по модулю g(x) в обычном декодере.
Другим возможным решением может быть попытка построения других классов циклических кодов с требуемыми параметрами. Интересными классами таких кодов, которые не рассматриваются в этом пособии, являются не примитивные коды БЧХ, евклидово-геометрические (EG) и проективно-геометрические (PG) коды. Еще одна возможность состоит в применении недвоичных циклических кодов в двоичном представлении, таких как коды Рида-Соломона, рассматриваемые в следующей части. Двоичное отображение PC кодов обладает дополнительно способностью исправления многократных пакетов ошибок.
CRC коды
Один из наиболее популярных стандартов помехоустойчивого кодирования известен как избыточные циклические коды для обнаружения ошибок (CRC коды). Эти циклические коды используются для обнаружения ошибок в блоках данных. CRC коды имеют длину п≤2т-1. Обычно CRC коды имеют порождающий полином вида (1 + x)g(x), где g(x) порождающий полином кода Хемминга. Обычные значения т равны 12, 16 и 32. Выбор порождающего полинома зависит от допустимой вероятности необнаруженной ошибки, которая определяется распределением (спектром) весов кода. Вычисление вероятности необнаруженной ошибки эквивалентно определению спектра весов кода. Эта задача остается исключительно трудной. Несмотря на 50 лет существования и развития теории кодирования имеется лишь незначительный прогресс. Ниже приведен список наиболее популярных CRC кодов (или CRC полиномов).
Код |
m |
g(х) |
CRC-12 |
12 |
х12 + х11 +х3 + х2 + х+ 1 |
CRC-16 |
16 |
х16 + x15 + x2 + 1 |
CRC-СCITT |
16 |
х16 + х15 +х5+ 1 |
CRC-32 |
32 |
х32 + х26 + х23 + х22 +х16 + х12+х11 + х10 + х8 + х7 + х5 + х4 + х2 + х + 1 |