Улучшение алгоритма декодирования МППЧ-кодов в сетевом кодировании для канала со стиранием

УДК 519.688

С.М. Владимиров

Московский физико-технический институт

Улучшение алгоритма декодирования МППЧ-кодов в сетевом кодировании для канала со стиранием

Описаны причины, почему использование сетевого кодирования ведёт к уменьшению помехозащищённости при передаче данных по двоичному каналу связи со стиранием. Представлен способ изменения стандартного подхода к исправлению ошибок с использованием message-passing алгоритма с помощью расширения проверочной матрицы и восстанавливаемого кодового вектора. Данное изменение уменьшает негативный эффект от использования сетевого кодирования. Показано, что хотя в тривиальных случаях возможна оптимизация предложенного алгоритма с целью отказа от использования метода Гаусса для предварительного восстановления кодового вектора из принятых сообщений, однако в более сложных случаях подобная оптимизация приводит к отказу от декодирования.

Ключевые слова: сетевое кодирование, декодирование, МППЧ-код, двоичный канал со стиранием, message-passing алгоритм, проверочная матрица.

Передача сообщений в сетевом кодировании при использовании обычных блоковых кодов, рассчитанных на передачу кодовых слов (а не подпространств), даёт возможность использовать весь опыт и наработки по блоковым кодам. Однако, как было показано в работе Jingyu Kang et al. [1], линейные комбинации сообщений и последующее восстановление негативно сказываются на вероятности восстановления сообщений: если на вход декодера поступают сообщение а и сообщение аЪ $, то при одинаковой вероятности ошибки в блоке для поступивших сообщений после декодирования сообщение Ъ будет иметь большую вероятность ошибки. В качестве решения представленной задачи авторы предложили, во-первых, осуществлять одновременное декодирование сообщений итеративным способом, обмениваясь при этом информацией об апостериорных вероятностях декодирования битов, во-вторых, разбить сообщения на два блока, каждый из которых пойдёт по своему пути. Тем самым авторы добились уравнивания вероятностей декодирования сообщений а и Ъ за счёт модификации декодера и модификации протокола.

Усложнение структуры сети неизбежно приведёт к значительному усложнению декодера. При использовании 3-х различных путей исходное сообщение придётся разбивать на три пакета и требовать обязательной доставки каждого из них. При значительном усложнении сети сложность протокола увеличивается, а также увеличивается и сложность декодирования.

В данной работе предлагается применить способ передачи информации, когда вместо одновременного декодирования двух и более сообщений, каждое из которых состоит из нескольких пакетов, используется единственное сообщение из нескольких частей. При этом предлагается способ передачи данных, который легко обобщается

как на произвольное количество частей сообщения (путей в сети), так и на случайное сетевое кодирование, когда прохождение пакета в сети неизвестно.

I. Коды с малой плотностью проверок на чётность

Коды с малой плотностью проверок на чётность (МППЧ-коды, англ. low density parity check codes, LDPC-codes) относятся к блоковым линейным кодам. Их основной особенностью является малая плотность проверочной матрицы, то есть количество отличных от нуля значений. Существуют реализации кодеров и декодеров, позволяющие достичь значительной производительности кодирования и декодирования (O(N log N), где N — длина кодового слова) при условии малого количества стираний (aN, где а — некоторая положительная константа) [2]. Относительная простота кодирования и декодирования МППЧ-кодов позволяет использовать большие проверочные матрицы (тысячи и миллионы строк), позволяя вплотную приблизиться к границе Галлагера.

В данной работе рассматривается применение двоичных МППЧ в сетевом кодировании при использовании двух различных алгоритмов исправления ошибок в кодовых векторах — алгоритма распространения сообщений (англ. message-passing algorithm), а также sum-product алгоритм.

Двоичный МППЧ-код задаётся проверочной матрицей кода H с малым количеством единиц в строках и столбцах. Если количество единиц в каждой строке одинаково, а также одинаково количество единиц в каждом столбце, то такой код называется регулярным (K,N)-кодом, иначе — нерегулярным.

II. Использование message-passing алгоритма итеративного декодирования МППЧ-кодов в сетевом кодировании

Рассмотрим модель сети «бабочка», который изображён на рис. 1 [3].

~S~

а 0 Ь

©

Рис. 1. Модель сети с сетевым кодированием [3]

Исходный кодовый вектор МППЧ-кода т разбивается на две части а и Ь и передаётся двум получателям У и Z. При передаче сообщения вносятся ошибки. Будем считать, что ошибки происходят на трёх основных каналах передачи данных: Т ^ У, Ш ^ X и и ^ Z (ошибки передачи в остальных каналах будем игнорировать). В рассматриваемой модели в качестве таких каналов рассмотрим двоичные каналы со стиранием, в которых вероятность правильного приёма равно д, а вероятность стирания 1 — д. Каждый из получателей, зная структуру сети, восстанавливает вектор т' и исправляет в нём ошибки передачи с помощью проверочной матрицы МППЧ-кода. Например, для узла У два принятых сообщения можно представить в виде

т і = а + е\. т2 = а ф Ь + Є2,

где еі и Є2 — векторы ошибок (стирания).

Зная структуру сети, узел-получатель У восстанавливает (со стираниями) части исходного сообщения а' и Ь':

а' = т і = а + еі,

Ъ' = т і ф т 2 =

Далее конструируется вектор т' с помощью простой конкатенации:

т' = а'\\Ь' = т ф £4.

После восстановления в векторе m1 детектируются и исправляются стирания с помощью выбранной ранее проверочной матрицы МППЧ-кода. В рассматриваемой нами модели декодирование происходит message-passing алгоритмом. В данной модели алгоритм либо корректно исправляет все ошибки (заполняет стирания), либо оставляет некоторые биты стёртыми, однако не может привести к возникновению новых ошибок.

Тем не менее использование алгоритма уже после восстановления частей оригинального вектора а1 и b1 и после конкатенации приводит к дополнительным ошибкам, связанным с особенностями передачи в сетевом кодировании. Поясним это на примере.

Пусть первый передатчик принимает вектор m і, который отличается от оригинального вектора а стиранием некоторого i-го бита. При декодировании данный вектор будет использоваться дважды: в качестве первой части вектора т1, а также при восстановлении I)1 используя формулу (1). При этом i-й бит вектора I)1 также оказывается стёрт. В результате, даже если на вход получателя был стёрт всего І бит в двух полученных сообщениях, на вход МППЧ-декодера поступает уже вектор с двумя стёртыми сообщениями, как показано на рис. 2.

\ \

0 110 0 10 110 1

0 1 1 0 0 1 1 0 0 1

va\\\ 7/т

0 1 1 0 0 1 1 0 0 1 1

МППЧ-декодер

Рис. 2. Увеличение количества ошибок из-за необходимости восстановления сообщения на принимающем

узле

В итоге необходимость проведения линейной рекомбинации сообщений на узле получателе приводит к ухудшению корректирующей способности используемого МППЧ-кода. Для модели «бабочка» такое ухудшение достаточно просто оценить. Количество стёртых бит в принимаемом сообщении без сетевого кодирования считаем равным Np, где p = 1 — д — вероятность стирания. Тогда если сетевое кодирование используется, то в каждом из принятых векторов m 1 и m2 будет по Np/2 стёртых бит. В результате в векторе а' стёртых бит будет также Np/2, однако количество стёртых бит в векторе Ъ' нужно рассчитывать с учётом того, что при восстановлении стирание бита из вектора m 1 попадёт на стирание бита из вектора m2 (то есть не будет дополнительного стирания). Ве-

роятность последнего равна Np/2

N/2

= p.

Тогда вероятность того, что стирание из т1 попадёт на нестёртый бит и приведёт к ещё одному стиранию в Ь', равна 1 — р, что приводит к общей оценке количества стираний как

+^(1-р>+^=

= Лг(^+ |(1 -Р>) = N (|р- у) .

Если не учитывать другие эффекты, возникающие в сетевом кодировании, то изменение корректирующей способности кода можно представить как увеличение вероятности возникновения стирания с р до р, где

Nl З p2

Р = 7V = 2P~Y’ 3 1

Р= 2 - 2^9_8р/ Проведём следующее моделирование.

(З).

• Используем описанную выше модель сети «бабочка» с двоичными каналами со стиранием.

• Используется регулярный двоичный (З,6) МППЧ-код GHG. p seed = 96З N = 96 GH / spec З > GHC /96.3.963 из базы данных МакКея[4]. Скорость кода 15/З2 (примерно 1/2).

• Кодовое слово т разбивается на две части а и b равной длины в 48 бит.

Результат моделирования приведён на рис. 3. Увеличение количества стираний Nl от 1,25 (при p = 1/2) до 1,5 раз (при О < p ^ 1/2) повлекло значительное ухудшение корректирующей способности рассмотренного кода. Теоретическая оценка основана на (2), (3).

1,000

Без сетевого ♦Теоретическое С сетевым кодирования ожидание кодированием

Рис. 3. Увеличение количества ошибок из-за необходимости восстановления сообщения на принимающем узле

III. Улучшенный алгоритм на основе message-passing алгоритма

Рассмотрим улучшение к приведённому выше алгоритму восстановления сообщения на основе message-passing алгоритма. Данное улучшение, так же как и оригинальный алгоритм, можно будет обобщить и на большее число частей, на которое был разделён исходный кодовый вектор т.

Идея улучшения алгоритма в том, что декодер должен сам осуществлять и восстановление исходного сообщения тl из принятых сообщений, и восстанавливать стирания. Рассмотрим такой декодер на следующем примере. Пусть задана проверочная матрица:

1 О 1 1 О 1

H = 1 О 1 О 1 1 1

1 1 1 О 1 О

Проверочная матрица имеет 4 единицы в каждой строке и 2 единицы в каждом столбце, то есть её можно рассматривать как пример проверочной матрицы МППЧ-кода. Скорость кода с данной проверочной матрицей равна 1/3 (ранг матрицы равен 2-м). Стандартный итеративный message-passing декодер будет работать с графом Таннера, показанным на рис. 4.

Рис. 4. Граф Таннера для МППЧ-кода с проверочной матрицей

Данный граф имеет 2 группы вершин — 6 символьных, относящихся к столбцам проверочной матрицы H (и соответствующим символам декодируемого сообщения), и 3 проверочных, соответствующих трём строкам проверочной матрицы. Далее в качестве примера рассмотрим случай, когда узел-отправитель S отправляет две части исходного кодового вектора следующим образом:

т = ( 1 1 1 О 1 О ) ,

а = ( 1 1 1 ) ,

b = ( О 1 О ) .

На узле W происходит линейная комбинация векторов:

а 0 b = ( 1 О 1 ).

При передаче вектора а по двоичному каналу со стираниями T - Y в нём происходит одно стирание и также одно (но в другом бите) — при передаче вектора а 0 b по каналу X — Y, в результате чего принятые узлом Y сообщения имеют вид

т і = а + еі = (? 1 1 ),

т 2 = а 0 b + Є2 = ( 1 О 7 ).

После восстановления вектора т' он имеет уже три стирания:

а! = ті =

Ь' = т і ф т2 =

1 Т ) .

Итеративный декодер, работающий по message-passing алгоритму, не сможет восстановить все биты кодового вектора. Начальное состояние показано на рис. 5. На первом шаге с помощью третьей проверки он успешно восстановит первый бит, однако после этого и первая, и вторая оставшиеся проверки будут связаны с двумя символьными узлами с неизвестным значениями, как показано на рис. 6. Возникает отказ от декодирования.

Рис. 5. Граф Таннера для МППЧ-кода с проверочной матрицей

Рис. 6. Граф Таннера для МППЧ-кода с проверочной матрицей (4) с символьными узлами, заполненными значениями из примера (9) после первой итерации message-passing алгоритма

Однако декодеру можно подсказать, что на самом деле сообщение, которое он пытается декодировать, связано с принятыми сообщениями. Для этого на граф Таннера добавим символьные узлы, соответствующие принятым сообщениям, а также узлы «проверок», связывающих принятые сообщения и восстанавливаемый кодовый вектор, как показано на рис. Т.

В таком графе Таннера декодер, работающий по message-passing алгоритму, после восстановления первого бита вектора тг также восстановит первый бит вектора ті. Однако первый бит вектора ті, первый бит вектора т2 и четвёртый бит вектора т' связаны отношением (8) и соответствующей проверкой, что даёт возможность декодеру восстановить 4-й бит вектора т', как показано на рис. 8. После этого одна из двух «нижних» проверок восстанавливают последний бит вектора т'.

Рис. 7. Граф Таннера для МППЧ-кода с проверочной матрицей

Рис. 8. Граф Таннера для МППЧ-кода с проверочной матрицей (4), дополненный символьными и проверочными узлами на основе (7), (8), (9) после трёх итераций message-passing алгоритма

Хотя в результате работы данного алгоритма были восстановлены как биты вектора т', так и биты векторов т і и т2, нас интересуют только биты т'. Более того, так как код систематический (по первым двум битам кодового вектора), то на самом деле нас интересуют только первые два бита, а в данном случае и оригинальный алгоритм корректно их восстанавливал. Однако в более общем случае расширенный алгоритм восстанавливает большее количество бит.

Однако данный алгоритм не требует модификации декодера. Достаточно будет модифицировать входные данные декодера, добавив на графе Таннера новые символьные вершины, соответствующие принятым векторам ті и т2, а также новые проверки, соответствующие связям между принятыми сообщениями и восстанавливаемым кодовым вектором т'. Данный алгоритм можно описать следующим образом.

Построим новый вектор х' как конкатенацию частично-восстановленного вектора и принятых

сообщений:

X = ш'\\ш і\\т 2.

Количество бит в векторе — удвоенная длина кодового вектора т'. Пусть H — проверочная матрица выбранного двоичного МППЧ-кода размером n х k. Построим новую, расширенную проверочную матрицу:

Данному графу соответствует следующая расширенная матрица:

H'

H

Ei Оі,і

Оі,і Ei

Оп,к

Ei Оі,і

Ei Ei

Если оригинальная проверочная матрица двоичного МППЧ-кода H задана (4), то расширенная проверочная матрица будет иметь вид

( 1

Hl

\

/

Первые к (первые 3 для (12)) строк новой проверочной матрицы являются оригинальной проверочной матрицей, дополненной нулями. Эти строки соответствуют оригинальным проверкам в графе Таннера, как они изображены на рис. 4. Далее идут п/2 строк (строки 4-6 для (12)) соответствующие проверкам, связывающим т' и ті. Последние п/2 строк (строки 7-9 для (12)) соответствуют проверкам, связывающим ті, т2 и т'.

Однако расширенный граф Таннера и расширенную матрицу можно также составить таким образом, чтобы она отражала не то, как из векторов ті и т2 получается т', а то, как из изначального кодового вектора т получаются векторы т і и т2. Для рассматриваемого нами примера (оригинальной проверочной матрицы (4) и условий (5) и (6)) новый граф Таннера изображён на рис. 9.

Рис. 9. Граф Таннера для МППЧ-кода с проверочной матрицей

Hl

H

Ei Оі,і

Ei Ei

°n,k

Ei Оі,і

Оі,і Ei

В рассматриваемом нами примере граф Таннера и соответствующая расширенная проверочная матрица не сильно отличаются от приведённых ранее, что приводит лишь к незначительному ускорению алгоритма исправления ошибок. Однако в более общем случае (с большим количеством частей, на которые делится исходный кодовый вектор) изменения могут быть значительными. Можно сказать, что матрица (13) получается из матрицы (11) приведением правой нижней части матрицы к диагональному виду методом Гаусса. Обратная операция — приведение левой нижней части матрицы к диагональному виду, также методом Гаусса. В дальнейшем будем рассматривать только расширенные проверочные матрицы вида (13).

Расширенная проверочная матрица Н' (13) имеет следующую структуру.

• Левая верхняя часть является копией оригинальной проверочной матрицы кода Н.

• Правая верхняя часть равна нулям.

• Левая нижняя часть представляет собой группу из единичных матриц, задающих правило линейной рекомбинации сообщений, которые приходят на проверочный узел. В данном случае эти правила можно описать простой матрицей:

1 О 1 1

количество столбцов в матрице соответствует количеству частей, на которые был разделён исходный кодовый вектор т, количество строк соответствует количеству принятых сообщений. В общем случае матрица может быть не квадратной.

• Правая нижняя часть — диагональная матрица.

Данная расширенная проверочная матрица (13) используется как проверочная матрица МППЧ-кода для исправления ошибок (стираний) в векторе X (10). После исправления ошибок, если все стирания исправлены, первые n бит вектора X (по длине оригинального вектора т) используются как результат декодирования.

Моделирование данного алгоритма проводится аналогичным образом

• Используем описанную выше модель сети бабочка с двоичными каналами со стиранием.

• Используется регулярный двоичный (3,6) МППЧ-код GHG. p seed = 963 N = 96 GH / spec 3 > GHC /96.3.963 из базы данных МакКея[4]. Скорость кода 15/32 (примерно 1/2).

• Кодовое слово m разбивается на две части а и Ъ равной длины в 48 бит.

Результат моделирования показан на рис. 10. Как видно из графика, новый алгоритм даёт значительное улучшение, приближая МППЧ-код, используемый с сетевым кодированием, по эффективности исправления стираний к коду, используемого без сетевого кодирования.

1,000

' <і А

Л

0,35 0,3 0,25 0,2

Вероятность стирания

і Без сетевого  Стандартный < Улучшенный кодирования алгоритм алгоритм

Рис. 10. Увеличение количества ошибок из-за необходимости восстановления сообщения на принимающем узле

С точки зрения производительности, если скорость выполнения оригинального алгоритма оценивается как O(N log N), то нового алгоритма — O(2N log2N), то есть замедляет работу декодера чуть более чем в два раза. Тем не менее с учётом значительного выигрыша, который позволяет скомпенсировать использование сетевого кодирования, новый алгоритм стоит использовать.

Необходимость предварительного восстановления вектора m'.

Возникает желание использовать новый алгоритм без восстановления т', то есть считать первые n бит вектора X, подаваемого на вход message-passing декодера, стёртыми, и не тратить время на восстановление т' из принятых сообщений. Ведь если связи между битами принятых сообщений и вектора т' закреплены в графе Таннера (в проверочной матрице), то декодер должен сам восстановить т' из битов принятых сообщений. Такой подход действительно работает в случае простейшей модели сети с сетевым кодированием «бабочка» и даже даёт выигрыш по времени, частично нивелирующий замедление работы декодера. Однако в более сложных случаях, когда исходный кодовый вектор разделяется на большее число сообщений, данный способ оптимизации может привести к полному отказу работы декодера при некоторых условиях.

Рис. 11. Модель сети с неслучайным сетевым кодированием и разделением сообщения на три части

Рассмотрим модель сети, изображённую на рис. 11. Узел-источник выбирает некоторый кодовый вектор двоичного МППЧ-кода. Он разделяет этот вектор на три равные части а, b, с (при необходимости дополняя последнюю часть одним или двумя нулями). Эти части отсылаются узлам Ti, которые пересылают их далее узлам Ui. На узлах Ui происходит линейная рекомбинация принятых пакетов, после чего они отправляются узлу-получателю Z.

Узел-получатель Z принимает на вход три вектора:

т і = а 0 b + еі, т2 = а 0 b 0 с + в2,

т2 = b 0 с + ез.

где еі, е2, е3 — некоторые векторы ошибок (сти-

раний). Узел-получатель составляет следующую систему уравнений:

После чего решает её меодом Гаусса, получая: а = т 2 0 т з, и = т 1 0 т 2 0 т 2, с' = т 1 0 т 2.

После этого узел-получатель конструирует вектор т' = а!\\Ь'\\(С и исправляет в нём ошибки (стирания). Если используется новый метод, то конструирует расширенную проверочную матрицу Н' и вектор х для исправления в нём ошибок:

Hl =

H °k,n \

Ei Ei Оі,і

Ei Ei Ei En

Оі,і Ei Ei )

X = т'\\т і\\т 2\\тз,

где l = \п/З] — длина векторов а,), с и принятых сообщений ті, т2, тз. После чего также исправляет ошибки message-passing алгоритмом, но уже в векторе X с использованием проверочной матрицы H'.

Однако если попытаться оптимизировать новый метод и не восстанавливать т', а считать соответствующую ему часть в векторе X стёртой, то алгоритм работать на узле Z не будет. Чтобы проиллюстрировать это, рассмотрим часть графа Таннера, которая соответствует первым битам каждого из принятых сообщений ті, т2, тз и соответствующих бит вектора т'. Соответствующий граф Таннера показан на рис. 12.

Рис. 12. Граф Таннера с дополнительными узлами без предварительного восстановления m1

Как видно из рисунка, если предварительно не восстанавливать m', то в графе Таннера не будет ни одного узла проверки, который бы имел общее ребро только с одним символьным узлом со стиранием. С точки зрения проверочной матрицы можно сформулировать следующую лемму:

Лемма. Если восстанавливаемый кодовый вектор двоичного МППЧ-кода X может быть разбит на две группы битов Xi и X2 таким образом, что

1) первая группа битов Xi стёрта,

2) каждая строка проверочной матрицы соответствующего двоичного МППЧ-кода с равными единице битами, соответствующими первой и второй частям принятого вектора, имеет как минимум два бита, равных единице, которые соответствуют первой части принятого вектора,

то стирания в первой части Xi принятого вектора X не могут быть восстановлены с помощью итеративного message-passing алгоритма.

Доказательство. Аналогичным образом на две группы делятся соответствующие битам столбцы проверочной матрицы, а также символьные узлы графа Таннера.

Строки проверочной матрицы можно разделить на три группы.

• Имеющие единицы в столбцах, соответствующих только первой группе бит.

• Имеющие единицы в столбцах, соответствующих и первой группе, и второй группе бит.

• Имеющие единицы в столбцах, соответствующих только второй группе бит.

Каждой такой строке соответствует проверка, то есть узел проверки в граффе Таннера. Узлы проверок в графе Таннера объединим аналогичным образом.

На первой итерации алгоритма первая группа узлов проверок будет связана только с теми символьными узлами, биты которых стёрты, поэтому никаких изменений в первую группу бит эти проверки не внесут. Каждая из проверок второй группы будет связана как минимум с двумя символьными узлами из первой группы (согласно условию леммы), однако соответствующие им биты стёрты, поэтому изменений в битах первой группы также не будет. Ни одна из проверок третьей группы не вносит изменения в биты первой группы, так как не связана с соответствующими символьными узлами.

В результате после окончания первой итерации все биты первой группы так и останутся стёртыми. Аналогичная ситуация происходит на последующих итерациях. Что и требовалось доказать.

Как следует из леммы, если для вектора X не восстанавливать предварительно вектор m', а просто заполнить стираниями (это будет соответствовать первой группе бит), и дополнить принятыми сообщениями (вторая группа бит), то из особенностей построения расширенной проверочной матрицы H' для рассматриваемого случая (удовлетворяющей условиям леммы) стирания в первой части вектора не будут восстановлены. Такая ситуация возникает всегда, если на принимающей узел поступают только сообщения, содержащие линейные комбинации как минимум двух частей исходного кодового вектора, и ни одного такого сообщения, который бы содержал только одну часть исходного кодового вектора m.

Литература

1. Kang J., Zhou B., Ding Z., Lin S. LDPC coding schemes for error control in a multicast network // Information Theory, 2008. ISIT 2008. IEEE International Symposium on — 2008. — P. 822 --826.

2. Д.К. Зигангиров, К.Ш. Зигангиров Декодирование низкоплотностных кодов с проверочными матрицами, составленными из перестановочных матриц, при передаче по каналу со стираниями //

Проблемы передачи информации. — 2006. — Т. 42, В. 2. — С. 44-52.

3. R. Ahlswede, N. Cai, S.R. Li, R.W. Yeung Network information flow // IEEE Transactions on Information Theory — V. 46. — 2000. — P. 1204-1216.

4. D.J.C. Mackay Encyclopedia of Sparse Graph Codes. — 2010. — http://www.inference.phy.cam.ac .uk/mackay/codes/data.html.

Поступила в редакцию 03.09.2010.