- •Глава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. Распределение весов
- •Глоссарий
- •Литература
4.3.1. Комментарий к алгоритмам декодирования
В отличие от БМА алгоритм Евклида (ЕА) использует все синдромы уже на первом шаге процедуры. Однако, по числу операций в конечном поле алгоритм Берлекэмпа-Мэсси (БМА) обычно эффективнее ЕА. С другой стороны, каждый шаг ЕА имеет идентичную структуру, что приводит к более эффективной аппаратной (микросхемной) реализации. Кроме того, три рассмотренных метода декодирования для (двоичных и недвоичных) кодов БЧХ являются неполными, так как исправляют ограниченное число ошибок — декодирование с ограниченным расстоянием. Вследствие этого рассмотренные алгоритмы способны обнаруживать ситуации, которые превышают их корректирующую способность.
Рассмотренные алгоритмы исправляют все комбинации ошибок ограниченного веса (до половины кодового расстояния). Многие из комбинаций ошибок большего веса не могут быть исправлены этими алгоритмами, но обнаруживаются и приводят к отказу от декодирования. В зависимости от конкретного применения кода в этом случае, либо выдаются принятые из канала информационные символы систематического кода, либо все слово заменяется символом (сигналом) стирания. Обнаружение неисправимых комбинаций ошибок происходит, либо в процедуре Ченя, когда хотя бы один из корней многочлена локаторов ошибок не принадлежит множеству локаторов позиций кодового слова, либо на этапе вычисления синдромов, когда количество нулевых синдромов оказывается больше или равным половине кодового расстояния.
Известны также и другие подходы к декодированию кодов БЧХ, из которых наиболее значительным является использование быстрых алгоритмов дискретного преобразования Фурье над полем GF(2m). Этот подход к созданию быстрых алгоритмов декодирования исследуется в [Blah], где читатель найдет необходимые подробности.
Рассмотренные выше алгоритмы принято называть декодированием в частотной области, учитывая эквивалентность между вычислением синдрома и преобразованием Фурье над конечным полем. В [Blah, Blah 1*} рассматриваются и другой подход к построению декодеров — декодирование во временной области. Этот вариант декодеров PC кодов требует большего количества операций в поле, но считается более удобным для аппаратной (микросхемной) реализации.
Сравнительно недавно Судан [Sud] предложил (алгебраический) алгоритм, исправляющий ошибки за границей минимального расстояния кода. Этот алгоритм применяется к декодированию PC и, главным образом, АГ кодов. Выходом этого алгоритма является список (ближайших в некоторой метрике) кодовых слов. Алгоритм {декодирования в список) основан на процедурах интерполяции и факторизации многочленов от двух переменных над GF(2m) и его расширением. Оригинальный алгоритм Судана был позднее улучшен в работе [Gur] и других. Важно, что на основе алгоритма Судана создан алгебраический алгоритм мягкого декодирования кодов PC и близких к ним АГ кодов.
4.3.2. Исправление ошибок и стираний
Для исправления стираний необходимое изменение в процедуре декодирования кодов PC, рассмотренной выше, состоит во введении многочлена локаторов стираний τ(х),
![]()
где уiℓ = аiℓ, локаторы стираний, 1 ≤ ℓ ≤μ.
По определению, позиции со стираниями известны. Следовательно, требуется определить только значения стертых позиций. Это может быть выполнено, как и раньше, по алгоритму Форни. Можно показать, что в процессе вычисления синдромов на стертых позициях могут быть подставлены произвольные значения символов, так как их значения не влияют на результат декодирования.
Процедура декодирования PC с исправлением стираний и ошибок аналогична исправлению только ошибок с учетом следующих ниже модификаций. Прежде всего, формируется модифицированный синдромный многочлен, или модифицированный синдром Форни,
(4.10)
Алгоритм БМ применяется для определения многочлена локаторов ошибок с учетом следующих изменений:
1. Рассогласование определяется теперь как
(4.11)
где d0=Tμ+1
2. Условие остановки алгоритма заменяется следующим:
![]()
По окончании вычисления σ(х) формируется модифицированный многочлен значений ошибок и стираний, или многочлен значений искажений, равный по определению
(4.12)
Кроме того, вычисляется следующий многочлен локаторов искажений,
(4.13)
С помощью модифицированного алгоритма Форни получаем для значений ошибок:
(4.14)
и для значений стираний:
(4.15)
Алгоритм Евклида также может быть применен к модифицированному синдрому T(х) для исправления стираний и ошибок. Для этого в алгоритме исправления только ошибок многочлен S(x) заменяется многочленом 1 + Т(х), а в начальных условиях r0(x) =xd,d = 2td+1, и r1(x) = 1 + Т(х). Алгоритм останавливается на j-ом шаге, если deg[rj(x)] ≤ |_(d - 1 +μ)/2_|, и выдает как решение w(х) = rj(х) и σ(х) = bj(x).
Пример 43. Пусть С это (15,9,7) код PC над GF(24) с нулями в точках {а, а2, ..., а6}, где примитивный элемент поля удовлетворяет равенству р(а) =а4 + а3 + 1 = 0. Для удобства ниже представлена таблица элементов GF(2m) , упорядоченная по степеням примитивного элемента а , а4 + а3 + 1 = 0. Таблица элементов GF(2m), p(x) = x4+x3+1.

Порождающий многочлен кода С равен
![]()
Положим, что ассоциированный с кодовым словом полином равен
![]()
Пусть принятое слово представлено полиномом

Предположим, что приемник располагает дополнительной информацией о том, что позиции с локаторами а0 и а5 ненадежны и заявлены как стирания.
Заметим, что многочлен искажений имеет вид е(х) = а14 + а8x3 + а5х5 + ах12.
Таким образом, кроме принятого слова r(х) декодеру известны локаторы μ = 2 двух стираний, а0 и а5. Это позволяет вычислить многочлен локаторов стираний
(4.16)
Синдромы для принятого слова равны:
![]()
Соответственно, синдромный многочлен равен:
(4.17)
Модифицированный синдром (4.10) равен

Алгоритм Берлекэмпа-Мэсси для исправления ошибок и стираний
• Итерация 0: Начальные установки.
![]()
• Итерация 1:

• Итерация 2:

• Итерация 3:

• Итерация 4

Таким образом, получаем многочлен локаторов ошибок
![]()
Напомним, что в последнем равенстве с помощью процедуры Ченя найдены обратные величины локаторов ошибок в поле GF(2m). Действительно, проверка дает σ(а12) = 0 и о(а3) = 0. Следовательно, локаторами ошибок являются а-12 = а3 и a-3 = а12.
Из определения (4.12) находим модифицированный многочлен значений искажений
(4.18)
Многочлен локаторов искажений равен
![]()
и, следовательно, ф'(х) = 1.
Значения ошибок и стираний могут быть вычислены по формулам (4.14) и (4.15), соответственно,

Отсюда следует, что многочлен искажений равен
![]()
Результат декодирования v(x) = г(х) + е(х) совпадает с переданным словом v(x). Исправлены две ошибки и два стирания.
Прямое вычисление значений искажений
Для кодов PC с малым кодовым расстоянием значения стираний можно получить как решение системы линейных уравнений. Пусть е(х) полином ошибок, ассоциированный с комбинацией v ошибок и μ стираний,
(4.19)
Тогда справедлива следующая система линейных уравнений, аналогичная (4.8), связывающая синдромы и значения искажений:
(4.20)
где 1 ≤i≤ 2td. Как и раньше, может быть использовано любое подмножество v +μ≤td уравнений для определения значений всех стираний и ошибок.
Пример 44. Рассмотрим прямое вычисление значений искажений из предыдущего примера. После выполнения алгоритма Берлекэмпа-Мэсси и процедуры Ченя декодеру известны локаторы искажений и многочлен ошибок в виде
![]()
Значения искажений могут быть найдены из системы линейных уравнений (4.20), которая в матричной форме имеет
следующий вид
(4.21)
Легко проверить, что решением (4.21) являются f0 = а14, е3 = а8,f5 = а5, e12 = а. Эти значения совпадают со значениями искажений, вычисленными модифицированным алгоритмом Форни.
