- •Глава 7 помехоустойчивое кодиров 7.1. Классификация корректирующих кодов
- •7.2. Принципы помехоустойчивого кодирования
- •7.3. Систематические коды
- •7.4. Код с четным числом единиц. Инверсный код
- •7.5. Коды Хемминга
- •7.6. Циклические коды
- •7.7. Коды с постоянным весом
- •7.8. Непрерывные коды
- •7.9. Обобщение теории кодирования на недвоичные коды
- •7.10. Итеративные и каскадные коды
- •7.11. Адаптивные корректирующие коды
7.9. Обобщение теории кодирования на недвоичные коды
До сих пор мы рассматривали только двоичные коды. Однако это делалось лишь для простоты. На самом деле теория линейных кодов обычно излагается сразу для m-ичных кодов, где т=рL, р — простое число, L — натуральное число, т. е. для случая, когда над символами кода могут быть осуществлены все арифметические действия, которые существуют над вещественными или комплексными числами. Для таких m-ичных кодов могут быть определены и доказаны все свойства, известные для двоичных кодов. Наиболее важным классом m-ичных кодов являются коды Рида—Соломона (кратко - PC-коды). Они могут быть построены как систематические циклические (п, к)-коды при n = q-1, n-k = 2t, где t — число исправляемых ошибок. Коды PC являются частью стандарта цифровой записи на компакт-дисках.
Можно показать, что никакой линейный систематический m-ичный (т ≥ 2) код не может иметь d >n - k+1. Действительно, если выбрать значение k минус одного информационного символа равным нулю, то это даст ненулевое кодовое слово веса не более, чем п-k+1, что по свойству линейного кода и определяет верхнюю границу для d как п-k+1. Поскольку PC-код реализует верхнюю границу для минимального кодового расстояния, то он оказывается оптимальным среди всех m-ичных (п,к)-кодов в смысле исправления и обнаружения ошибок гарантированной кратности.
Выбор длины кода n = q - 1 является достаточно сильным ограничением, поэтому можно строить так называемые укороченные коды PC, имеющие произвольную длину n ≤ q -1. Их можно получить из полных PC-кодов, имеющих длину п — q-l, если положить часть информационных символов равными нулю и выбросить их из кодовых блоков. Легко видеть, что укорочение кода не может уменьшить кодового
расстояния, и поэтому (п,к)-код при n≤q-1 будет по-прежнему иметь d = n-k+1.
Такого типа коды совместно с двоичными кодами могут быть использованы для построения каскадных кодов.
7.10. Итеративные и каскадные коды
Мощные коды (т. е. коды с длинными блоками и большим кодовым расстоянием d) при сравнительно простой процедуре декодирования можно строить, объединяя несколько коротких кодов. Так строится, например, итеративный код из двух линейных систематических кодов (n1, k1) и (п2,k2) — см. табл. 7.3. Вначале сообщение кодируется кодом первой ступени (n1, k1). Пусть k2 блоков кода 1-й ступени записаны в виде строк матрицы. Ее столбцы содержат по k2 символов, которые будем считать информационными для кода 2-й ступени (п2,k2), и подпишем к ним п2-k2 проверочных символов. В результате получится блок (матрица n1 x n2), содержащий n1n2 символов, из которых k1k2 являются информационными. Процесс построения кода можно продолжить в 3-м измерении и т. д.
Таблица 7.3.

При декодировании каждого блока 1-й ступени обнаруживают и исправляют ошибки. После того, как принят весь двумерный блок, вновь исправляют ошибки и стирания, но уже по столбцам, кодом 2-й ступени, причем приходится исправлять только те ошибки, которые не были исправлены (или были ложно "исправлены") кодом 1-й ступени. Легко убедиться, что минимальное кодовое расстояние для двухмерного итеративного кода d = d1d2, где d1 d2 и — соответственно минимальные кодовые расстояния для кодов 1-й и 2-й ступени.
Весьма эффективная разновидность мощных кодов — каскадные коды.

Рис.7.3. Схема каскадного кодирования и декодирования
Двухкаскадный код (рис. 7.3) строится следующим образом: сначала k1 двоичных символов источника рассматривается как укрупненный символ многопозиционного кода с основанием т = 2к1. Затем к последовательности из k2 таких укрупненных символов добавляется п2 - k2 проверочных символов m-ичного кода (каждый проверочный символ — это последовательность из k1 проверочных символов). На этом завершается образование внешнего кода. После этого формируется внутренний код с кодовым расстоянием d1: к каждым k1 элементарным двоичным символам внешнего кода прибавляется n1 - k1 проверочных двоичных символов, из которых k1 · k2 являются информационными. Этим каскадный код похож на итеративный. Однако декодирование каскадного кода выполняется следующим образом: сначала последовательно осуществляется декодирование всех блоков внутреннего кода (с обнаружением или исправлением ошибок), затем декодируется блок внешнего m-ичного кода (n2, k2), причем исправляются ошибки и стирания, оставшиеся после декодирования внутреннего кода. Внутренний код обычно рассчитан на исправление одиночных ошибок, внешний — на исправление пачек ошибок (которые являются одиночными ошибками в укрупненных m-ичных символах — рис. 7.3). В качестве внешнего кода используется обычно m-ичный код Рида—Соломона, обеспечивающий наибольшее возможное d2 при заданных значениях п2 и k2, если п2<m.
Построенный каскадный код эквивалентен линейному двоичному коду с минимальным расстоянием d>d1d2. Фактически рассмотренный выше алгоритм декодирования каскадного кода оказывается достаточно эффективным и простым.
Использование каскадных кодов позволяет сделать скорость передачи сколь угодно близкой к пропускной способности канала. Процесс наращивания ступеней каскадного кода можно продолжить. Каскадные коды во многих случаях наиболее перспективны среди известных блоковых помехоустойчивых кодов.
