11.4.1. Правило максимума апостериорной вероятности (MAP).
Хотя турбо кодер является устройством с конечным числом состояний, наличие в нем перемежителя приводит к изменяющейся во времени решетчатой диаграммы, определяющей, в свою очередь, запредельную (при большой длине блока N) сложность оптимальной (максимально правдоподобной) процедуры декодирования, которая подразумевает нахождение кодового слова, ближайшего к принятому наблюдению (аналогично алгоритму Витерби с жесткими или мягкими решениями). Авторы открытия турбо-кодов предложили итеративную процедуру декодирования с мягкими решениями, которая позднее стала общепринятой для многих других кодов. В отличие от правила максимального правдоподобия (ML), состоящего в поиске кодового слова, минимизирующего вероятность перепутывания истинного кодового слова с некоторым другим, новый алгоритм декодирования направлен на минимизацию вероятности ошибки в каждом отдельном бите «чистой» информации. Эта цель может быть полностью достигнута на основе правила максимума апостериорной вероятности (MAP). Пусть
– вектор принятого наблюдения, а
– апостериорное (вычисленное после принятия
) распределение i –го информационного бита
. Тогда согласно MAP правилу решение будет вынесено в пользу наиболее апостериорно вероятного значения
:
, (11.1)
или
. (11.2)
11.4.2. Итеративная процедура декодирования.
Не существует практического метода точного вычисления апостериорной вероятности

или, что эквивалентно, совместной вероятности

для всего наблюдения

, простирающегося на все слово турбо-кода. Процедура итеративного декодирования оперирует с аппроксимациями апостериорного распределения, постепенно уточняемыми в ходе итераций. Любая следующая итерация состоит из двух шагов, каждый из которых заключается в раздельном декодировании образующих кодов и использовании на втором шаге информации, извлеченной из первого образующего кода во время первого шага. После окончания
k –й итерации (но не последней) ее результаты (
k –я итерация апостериорного распределения) используются на следующей итерации в качестве априорной информации. Общее число итераций может быть установлено заранее или определено в ходе выполнения декодирования фиксацией момента стабилизации выходных данных (согласно стоп–критерию). После заключительной итерации решение принимается по правилу MAP (11.1) или (11.2). Основной принцип процедуры иллюстрирует схема, представленная на рис. 11.7.[3]
Первоначально первый образующий декодер принимает отсчеты наблюдения, отвечающие символам первого образующего кода, и выдает мягкие оценки бит данных. Эти мягкие решения используются вторым образующим декодером в качестве априорной информации совместно с отсчетами наблюдения, отвечающими второму образующему коду, для выработки первой аппроксимации решающих статистик
. После этого вторая итерация начинает «раскодировку» первого образующего кода, но теперь с использованием
в качестве обновленной априорной информации. Уточненное мягкое решение первого декодера используется вторым декодером, как априорная информация, выдавая на выходе вторую аппроксимацию
и т.д. Данный цикл повторяется необходимое число раз, заканчиваясь принятием решения, как это было указано ранее. Сходимость этой процедуры не имеет точного теоретического обоснования, однако многочисленные эксперименты и моделирование показывают ее очень хорошее поведение.
Обращаясь к подробностям, отметим, что мягкие решения
l –го
образующего декодера на k –й итерации могут быть (что поясняется ниже) представлены в аддитивной форме:
, (11.3)
где первое слагаемое содержит априорную информацию об i – м бите данных
, извлеченную из наблюдения в процессе обработки на предшествующих шагах, второе слагаемое охватывает «непосредственную» информацию, доставляемую систематическим отсчетом наблюдения (коэффициент q есть просто отношение SNR на кодовый символ), а последнее слагаемое представляет собой избыточную (extrinsic) информацию об
, извлекаемую из отсчетов, отвечающих проверочным символам l –го образующего кода.
Первая итерация начинается с декодирования первого компонентного кода в отсутствии априорной информации:
. Затем избыточная информация, полученная на первом шаге, используется как априорная вторым образующим декодером:
.
На первом шаге второй итерации избыточная информация второго декодирования на первой итерации используется как априорная:

и т.д.: на любом шаге избыточная информация, добытая на предшествующем шаге используется в качестве априорной. Как видно из приведенных соотношений взаимосвязь между образующими кодерами исключает рециркуляцию (повторное использование) старой априорной информации, что обеспечивается блоками вычитания в схеме на рис. 11.7. Поскольку благодаря перемежению в кодере i –й систематический бит имеет различное местоположение в образующих кодах, то систематические отсчеты наблюдения и мягкие решения первого декодера должны претерпевать аналогичное перемежение, что и в турбо кодере, перед подачей на второй декодер. Указанные операции осуществляются двумя перемежителями. Аналогичным образом, мягкие решения второго кодера должны располагаться на соответствующих позициях в обратной связи к первому декодеру, т.е. перемешиваться в обратном порядке тому, которое выполняется деперемежителем.
11.4.3. Компонентное декодирование и прямой–обратный алгоритм.
Существуют различные возможные стратегии компонентного декодирования. Одним из вариантов служит алгоритм Витерби с мягкими решениями на входе и выходе (Soft-in-Soft-out Viterbi algorithm (SOVA)). Альтернативным путем является точное вычисление апостериорной вероятности для одиночного образующего кода с использование прямого–обратного алгоритма (иное наименование BCJR[4] или алгоритм Баля). Для определенности начнем с первого образующего кода половинной скорости, обозначив через
вектор наблюдения, включающий только отсчеты, необходимые для первого декодирования:
(см. рис. 11.6). Целью k –го шага итераций является вычисление
.
Введем совместную вероятность
комбинации трех следующих событий: (1) к приходу i –го бита источника
первый образующий кодер находится в состояние
, (2) под воздействием
он переходит в состояние
и (3) вектор наблюдения принимает определенное значение
. Суммирование
по всем возможным парам состояний, связанным между собой через
, очевидно даст
, аналогично, суммирование по всем парам, связанным через
, даст
, так что
. (11.4)
Прямой–обратный алгоритм вычисляет
рекурсивно по i, используя решетчатую структуру сверточного кода и канальную переходную вероятность. В частности,
раскладывается на множители вида
, (11.5)
где
– совместная вероятность того, что текущим состоянием решетки является
, а все отсчеты наблюдений, предшествующие текущему наблюдению
, принимали значения
;
– вероятность того, что все отсчеты наблюдения после
будут
при условии, что следующим за текущим окажется состояние
;
– совместная условная вероятность того, что следующее состояние будет
и текущее наблюдение –
при условии, что текущим состоянием является
.
Из трех вышеприведенных функций с самого начала известна
, поскольку
,
где первый множитель представляет собой условную вероятность перехода сверточного кодера в состояние
из фиксированного текущего состояния
, которая полностью определяется априорной вероятностью
появления символа
. Второй множитель полностью задается переходной вероятностью канала без памяти
, поскольку фиксированные начальное и конечное состояния решетки определяет ветвь решетки, т.е. группа из n кодовых символов, отвечающих ветви. Например, для систематического компонентного кода половинной скорости фиксированные
и
определяют пару
(см. рис. 11.6), так что
(11.6)
для любой пары состояний
, соединенных общей ветвью, которая отвечает
, и
для любой другой пары
. Очевидно, что это все относится к каналу без памяти.
Знание
позволяет вычислить значения
с помощью прямой рекурсии по i при начальной инициализации вида
для
, отвечающего начальному состоянию кодера, т.е. нулевому состоянию, и
для всех остальных состояний
:
. (11.7)
По завершению прямой рекурсии при
начинается обратная рекурсия по вычислению
с начального состояния (в предположении, что используются
хвостовых бит для установки кодера в нулевое состояние)
для состояния
, отвечающего нулевому, и
– в противном случае:
. (11.8)
Подстановка значений
(11.5), найденных с помощью соотношений (11.6)–(11.8), в выражение (11.4) для
совместно с переходной вероятностью гауссовского канала при BPSK входных сигналах
и разложение
на множители
и
, независящие от состояний решетки, приводят к предсказанному ранее результату (11.3)
,
с априорным компонентом

и избыточным компонентом
.
Функция
в последнем соотношении представляет собой часть
, зависящую лишь от
проверочных символов компонентного кода, передаваемых в течение интервала, занимаемого i –м битом данных. Например, для образующего кода с половинной скоростью
,
тогда как в общем случае, она представляет собой произведение переходных канальных вероятностей для отсчетов наблюдения, отвечающих
проверочных символов. Таким образом, концептуально избыточный компонент содержит в себе информацию о бите данных
, извлеченную только из проверочных (а не из систематических) отсчетов.
Декодирование второго кода выполняется аналогично, а обмен избыточной информацией между обоими компонентными декодерами и последовательные итерации выполняются так, как это было описано в п. 11.4.2.