В теории кодирования декодирование на обобщенном минимальном расстоянии (GMD) обеспечивает эффективный алгоритм декодирования составных кодов , который основан на использовании декодера ошибок и стираний для внешнего кода .
Наивный алгоритм декодирования составных кодов не может быть оптимальным способом декодирования, поскольку не учитывает информацию, которую дает декодирование максимального правдоподобия (MLD). Другими словами, в простом алгоритме внутренние полученные кодовые слова обрабатываются одинаково, независимо от разницы между их расстояниями Хэмминга . Интуитивно понятно, что внешний декодер должен с большей уверенностью относиться к символам, внутренняя кодировка которых близка к полученному слову. Дэвид Форни в 1966 году разработал лучший алгоритм, называемый декодированием на обобщенном минимальном расстоянии (GMD), который лучше использует эту информацию. Этот метод достигается путем измерения достоверности каждого полученного кодового слова и стирания символов, достоверность которых ниже желаемого значения. Алгоритм декодирования GMD был одним из первых примеров декодеров с мягким решением . Мы представим три версии алгоритма декодирования GMD. Первые два будут рандомизированными алгоритмами , а последний — детерминированным .
- Расстояние Хэмминга : даны два вектора.
расстояние Хэмминга между
и
, обозначенный
, определяется как количество позиций, в которых
и
различаются.
- Минимальное расстояние: Пусть
быть кодом . Минимальное расстояние кода
определяется как
где 
- Конкатенация кода: задано
, рассмотрим два кода, которые мы называем внешним кодом и внутренним кодом.
![{\displaystyle C_{\text{out}}=[Q]^{K}\to [Q]^{N},\qquad C_{\text{in}}:[q]^{k}\to [ q]^{n},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7b432223854f52245cf6ae62bd998f8a6daea11f)
- и их расстояния
и
. Объединенный код может быть получен путем
где
Наконец мы возьмем
быть кодом RS , который имеет декодер ошибок и стирания, и
, что, в свою очередь, означает, что MLD внутреннего кода будет полиномиальным по
время.
- Декодирование максимального правдоподобия (MLD): MLD — это метод декодирования кодов с исправлением ошибок, который выводит кодовое слово, ближайшее к полученному слову на расстоянии Хэмминга. Функция MLD, обозначаемая
определяется следующим образом. Для каждого
.
- Функция плотности вероятности : распределение вероятностей
на выборочном пространстве
представляет собой отображение событий
к действительным числам таким, что
для любого мероприятия
, и
для любых двух взаимоисключающих событий
и 
- Ожидаемое значение : ожидаемое значение дискретной случайной величины.
является
![{\displaystyle \mathbb {E} [X]=\sum _{x}\Pr[X=x].}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2b00b4c96e658352175021ec4aad62193c660043)
Рассмотрим полученное слово
который был поврежден шумным каналом . Ниже приводится описание алгоритма для общего случая. В этом алгоритме мы можем декодировать y, просто объявляя стирание в каждой плохой позиции и запуская алгоритм декодирования ошибок и стирания для
на результирующем векторе.
Рандомизированный_декодер
Данный :
.
- Для каждого
, вычислить
.
- Набор
.
- Для каждого
, повтор: С вероятностью
, набор
в противном случае установить
.
- Ошибки запуска и алгоритм стирания для
на
.
Теорема 1. Пусть y — полученное слово такое, что существует кодовое слово
такой, что
. Тогда детерминированный алгоритм GMD выдает
.
Обратите внимание, что простой алгоритм декодирования составных кодов может корректировать до
ошибки.
- Лемма 1. Пусть выполнены предположения теоремы 1. И если
имеет
ошибки и
стирания (по сравнению с
) после шага 1 , тогда ![{\displaystyle \mathbb {E} [2e'+s']<D.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/504bbe8ae8fbbd701e22fdc916b9da981a3d91c7)
Замечание. Если
, то алгоритм на шаге 2 выведет
. Лемма выше говорит, что в ожидании это действительно так. Обратите внимание, что этого недостаточно для доказательства теоремы 1 , но может иметь решающее значение при разработке будущих вариантов алгоритма.
Доказательство леммы 1. Для каждого
определять
Это означает, что
Далее для каждого
мы определяем две индикаторные переменные :
Мы утверждаем, что закончили, если сможем показать, что для каждого
:
Понятно, что по определению
Далее, в силу линейности ожидания, получаем
Для доказательства (2) рассмотрим два случая:
-й блок правильно декодирован ( Случай 1 ),
-й блок неправильно декодирован ( Случай 2 ):
Случай 1:
Обратите внимание, что если
затем
, и
подразумевает
и
.
Далее, по определению имеем
Случай 2:
В этом случае,
и
С
. Это следует за другим анализом случая , когда
или нет.
Наконец, это подразумевает
В следующих разделах мы, наконец, покажем, что детерминированная версия приведенного выше алгоритма может выполнять уникальное декодирование
до половины расчетного расстояния.
Обратите внимание, что в предыдущей версии алгоритма GMD на шаге «3» нам не обязательно использовать «свежую» случайность для каждого
. Теперь мы придумаем еще одну рандомизированную версию алгоритма GMD, которая использует одну и ту же случайность для каждого
. Эта идея следует алгоритму, приведенному ниже.
Модифицированный_рандомизированный_декодер
Данный :
, выбирать
случайным образом. Тогда каждый за каждый
:
- Набор
.
- Вычислить
.
- Если
, набор
в противном случае установить
.
- Ошибки запуска и алгоритм стирания для
на
.
Для доказательства леммы 1 мы используем случайность только для того, чтобы показать, что
В этой версии алгоритма GMD отметим, что
Второе равенство следует из выбора
. Доказательство леммы 1 можно использовать и для того, чтобы показать
для версии 2 GMD. В следующем разделе мы увидим, как получить детерминированную версию алгоритма GMD, выбрав
из набора полиномиального размера в отличие от текущего бесконечного набора
.
Позволять
. Поскольку для каждого
, у нас есть
где
для некоторых
. Обратите внимание, что для каждого
, шаг 1 второй версии рандомизированного алгоритма выдает то же самое
. Таким образом, нам необходимо рассмотреть все возможные значения
. Это дает детерминированный алгоритм ниже.
Детерминированный_декодер
Данный :
, для каждого
, повторите следующее.
- Вычислить
для
.
- Набор
для каждого
.
- Если
, набор
в противном случае установить
.
- Запустите алгоритм устранения ошибок и стираний для
на
. Позволять
быть кодовым словом в
соответствующий выходу алгоритма, если таковой имеется.
- Среди всех
выведите в 4, выведите тот, который ближе всего к 
Каждый цикл от 1 до 4 может выполняться за полиномиальное время . Приведенный выше алгоритм также можно вычислить за полиномиальное время. В частности, каждый вызов декодера ошибок и стираний
ошибки принимает
время. Наконец, время выполнения приведенного выше алгоритма равно
где
— время работы декодера внешних ошибок и стираний.