Многопороговое декодирование кодов с низкой плотностью проверок на четность

\ КОДИРОВАНИЕ И ПЕРЕДАЧА ИНФОРМАЦИИ

УДК 621.391.251

МНОГОПОРОГОВОЕ ДЕКОДИРОВАНИЕ

КОДОВ С НИЗКОЙ плотностью

ПРОВЕРОК НА ЧЕТНОСТЬ

А. В. Белоголовый,

канд. техн. наук, ассистент Е. А. Крук,

доктор техн. наук, профессор

Санкт-Петербургский государственный университет аэрокосмического приборостроения

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

In paper the new decoding algorithm is proposed. The new algorithm belongs to fast decoding algorithms class, but due to the usage og threshold in decoding the performance becomes closer to slow decoders results. In paper there are shown the description of algorithm and the comparison with traditional and fast decoders based on simulations.

Коды с низкой плотностью проверок на четность

Коды с низкой плотностью проверок на четность были впервые предложены Р. Галлагером в 1963 году как высокоскоростные коды с малой вероятностью ошибки для передачи по каналам с шумом [1,2].

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

H =

10 0 0 1 0 0 0 1

000

1 0 0 0 1 0 0 0 1

000

1 1 1 ООО ООО ООО ООО

0 1 о 0 0 1

000

1 о о

ООО

0 1 о 0 0 1

1 о о 1 о о 0 1 1 ООО ООО ООО

0 0 10 0 0 0 0 1 0 1 0 0 0 1 0 10 0 0 0 10 0 1 0 0 0 0 0 0 0 10 0 10 0 10 0 0 0 0 0 110 0 0 0 0 111 0 0 0 0 0 0 0 0 0 0

0 1 о 0 0 1 0 0 0

1 о о 0 0 1 1 о о 0 0 0

0 1 о 0 0 0 0 0 0

1 о о 0 1 1 0 0 0

0 0 1 0 0 0 1 о о

0 1 о 0 0 1

1 о о

0 1 о 0 0 0 0 0 0 0 0 0 0 0 0

1 1 о 0 0 1

0 0 0' 1 о о

0 1 о 0 0 1 0 0 0

1 о о

0 1 о 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

1 1 1

Для всего класса кодов с низкой плотностью проверок на четность [1-3] существуют декодеры, основывающиеся только на свойствах разреженности проверочной матрицы и не использующие никакие свойства самого пространства кодовых слов. Эти алгоритмы декодирования имеют низкую сложность и позволяют достичь малой вероятности ошибки при передаче в канале с аддитивным нормально распределенным (гауссовским) шумом [1-7].

Традиционное декодирование кодов с низкой плотностью проверок на четность

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

Симметричные каналы с двоичным входом. Симметричным каналом с двоичным входом будем называть дискретный по времени канал со следующими свойствами:

входной алфавит X состоит из двух символов, обозначаемых 0 и 1;

выходной алфавит У может быть представлен как дискретное либо непрерывное вещественное множество чисел;

выход у в заданный отсчет времени зависиттоль-ко от одного входного символах;

а)

б)

Рп

Р,

и Рис. 1. Симметричные каналы с двоичным входом: а - двоичный симметричный канал; б - канал с аддитивным гауссовским шумом

для всех выходов у выполняется свойство симметрии: Р0{у) = Р]{-у). Здесь под Рх{у) понимается плотность распределения вероятности, если у -непрерывный выход, и условная вероятность, если У - дискретное множество.

На рис. 1 приведены примеры симметричных каналов с двоичным входом.

Под вектором ошибки для кодового слова

с = {с0 . Сд/--,) длины N будем понимать вектор

е - {е0, ..., такой же длины, соответствующие

элементы которого равны разностям между вектором у = {у0, ..., Уд/--)}, принятым из канала, и передаваемым кодовым словом: е, = у, - с,, 0 < /' < N. Эта запись равносильна представлению принятого вектора как суммы кодового слова и ошибки: у,- = С/ + е,, 0 < / < N.

Декодирование ошибок канала. Декодирование - это процедура поиска и исправления ошибки, наложенной каналом на кодовое слово, по принятому из канала вектору или собственно поиск кодового слова по вектору, принятому из канала.

Декодирование по максимуму правдоподобия кода С обозначает нахождение по заданному принятому вектору у такого кодового слова се С, которое максимизирует вероятность того, что передавалось слово с при условии принятия вектора у : р(с/у) —> плах [51-54, 56, 60]. Задача декодирования по максимуму правдоподобия является ЫР-полной.

Для оценки качества работы различных декодеров используется оценка вероятности ошибки декодирования на информационный бит, вычисляемая как отношение количества ошибочных информационных бит после декодирования к общему количеству переданных информационных бит:

_ ^ошибок ^всех бит

Итеративные схемы декодирования кодов с низкой плотностью проверок на четность не являются декодерами по максимуму правдоподобия, но позволяют получить разумный баланс по сложности и вероятности ошибки декодирования по сравнению с декодированием по максимуму правдоподобия. Итеративное декодирование подразумевает, что нахождение кодового слова будет производиться не за один проход, а за несколько, с последовательным уточнением результата на каждом шаге [1-3,7].

«Жесткое» декодирование - это схема декодирования для двоичного симметричного канала при небольшом количестве ошибок в канале. «Жесткое» декодирование инвертированием битов - самая простая по сложности схема декодирования кодов с низкой плотностью проверок на четность [1, 2].

Как уже говорилось, под проверкой понимается любая строка Л = {/?0, ^лм} из проверочной матрицы кода с низкой плотностью проверок на четность, Будем говорить, что проверка для некоего вектора у = {у0, ..., Ул/--|} выполняется тогда, когда скалярное произведение вектора у на проверку дает ноль. Будем говорить, что элемент у, принятого вектора у участвует в проверке /7 = {/70, ..., /?Л/_1} тогда, когда соответствующий элемент проверки /?/ не равен нулю.

Одна итерация «жесткого» декодирования инвертированием битов производится следующим образом.

1. Для принятого вектора вычисляются все проверки.

2. Если некоторый бит принятого вектора участвовал более чем в половине невыполнившихся проверок, бит инвертируется.

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

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

Сложность одной итерации «жесткого» декодирования инвертированием бит является линейной, количество итераций декодирования обычно выбирается около log2(Л/), где N - длина кодового слова.

Декодирование по вероятностям является «мягким» декодированием, т. е. декодированием на основе вектора, состоящего не из дискретных значений (0 и 1), а из вещественных величин, полученных на выходе канала [1-3, 6, 7], путем пересчета вероятностей (англ. - «belief propagation decoding»).

Будем называть множеством N(m) множество символов принятого вектора, которые входят в т-ю проверку: N(m) = {п : Нтп = 1}, где Н - проверочная матрица кода с низкой плотностью проверок на четность. Будем называть множеством М(п) множество проверок, в которых участвует л-й символ принятого вектора: М{п) = {т : Нтп = 1}.

На основе принятого из канала вектора формируются два (для двоичного случая) вектора вероятностей того, что в принятом векторе на данной позиции находился заданный символ:

f° =

и f1 = (<o..f/J-i), 1/' = Р(У/=1).

где у, - элементы принятого вектора. Каждому ненулевому элементу проверочной матрицы кода с низкой плотностью проверок на четность приписывается две величины: qfj и Гц. Величина qfj является вероятностью того, что у-й символ принятого вектора имеет значение х по информации, полученной из всех проверок, кроме /-й. Величина r*j является вероятностью того, что проверка / выполняется, если у-й символ принятого вектора равен х, а все остальные символы проверок имеют распределение вероятностей, заданное величинами {qfj : у е N{i)\j).

Перед началом работы алгоритму требуется инициализация, заключающаяся в том, что значения qfj и q}j принимаются равными ff и fj соответственно, а далее алгоритм работает по принципу пересчета вероятностей символов принятого вектора (belief propagation), используя для пересчета вероятностей правило Байеса для апостериорной вероятности события. Одна итерация алгоритма представляет собой следующую последовательность действий.

1. Для всех проверок вычисляются величины

Дrjj = (qfj--q]j•) и пересчитываются веро-

jeN(i)\j

1 + (—IV* . А г •

ЯТНОСТИ Гц = -----—---ДЛЯ х = {0,1}.

2. Для всех символов принятого вектора пересчитываются вероятности qfj = a,j f*- ]""[ r*j

i'e M(j)\i

для x = {0,1} , где a j j - нормирующие коэффициенты, обеспечивающие равенство qfj + q]j = 1 .

3. Формируются векторы псевдоапостериорной вероятности д° и gj следующим образом:

q* - Uj fjX  |~[ r*j t где осу - нормирующие коэф-

ieM

фициенты, обеспечивающие равенство qf + gj = 1.

4. Формируется вектор решения с' по следую-

Jl при gj > 1/2 щему правилу: с у = < 1 . Если вектор с

[0 - иначе

является кодовым словом, декодирование заканчивается, в противном случае выполняется следующая итерация алгоритма.

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

Быстрое декодирование LDPC

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

Среди известных алгоритмов быстрого декодирования кодов с низкой плотностью проверок на четность для каналов с непрерывным выходом наиболее известен алгоритм «min-sum», являющийся упрощением декодера «belief propagation», а также алгоритм «UMP» (Uniformly Most Powerful [7]), который рассматривается ниже.

Пусть из канала был принят вещественный («мягкий») вектор у = {уо> •••. У/v—i)* Будем считать надежностью /'-го символа вектора у величину г„ характеризующую удаление принятого значения у, от

некоего порогового значения г, при котором все значения переданных символов равновероятны: ХЫ: Р(1/у,) = Р(0/у,), а;-= |у,-- Шг|. Для случая двоичной модуляции, при которой все биты кодового слова отображаются во множество {-1,+1} и передаются по симметричному каналу с двоичным входом, надежность принятого символа у, будет, таким образом, равна абсолютной величине принятого значения: г, = \у,\.

Быстрое декодирование по надежностям являет собой баланс между «жестким» декодированием и декодированием по вероятностям [1-3]. При декодировании используется вектор «жестких» решений х = {х0, хЛ/_1} (вектор, состоящий из 0 и 1 и пред-

ставляющий собой набор дискретных решений) и вектор надежностей г = (г0, ..., гЛ/_1} (вектор, состоящий из вещественных величин из интервала [0,+°°) ). По аналогии с вероятностным декодированием каждому ненулевому символу проверочной матрицы приписываются два числа: х/у- и //,/> представляющие собой «жесткое» решение относительно символа /, полученное при помощи всех проверок, кроме /-й, и надежность символов /-й проверки без учета у-го символа соответственно. Декодирование также является итеративным, одна итерация представляет собой следующую последовательность действий.

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

2. Для всех символов принятого вектора и всех проверок производится пересчет надежностей символов проверок: если проверка, в которую входил некоторый символ, не выполняется, то надежность 0,у уменьшается на величину надежности проверки //'у, в противном случае надежность //,у увеличивается на учитываются все проверки, кроме /-й. Если после применения всех проверок для какого-то символа/величина г/у стала меньше нуля, то обновленная надежность г, , берется по модулю, а жесткое решение ху-у инвертируется.

3. Аналогично пересчитываются надежности принятого вектора: если /-я проверка, в которую входит у-й символ, нарушается, то из надежности г, вычитается надежность /-й проверки, иначе надежность символа увеличивается на надежность проверки. Если после применения всех проверок для какого-то символа у величина г, стала меньше нуля, то обновленная надежность Гц берется по модулю, а жесткое решение х,_, инвертируется.

4. Если «жесткое» решение х является кодовым словом, декодирование заканчивается, иначе декодер начинает следующую итерацию.

Сложность декодера иМР (быстрого декодирования по надежностям) значительно ниже, чем

сложность декодера, пересчитывающего вероятности, за счет того, что пересчет надежностей выполняется по упрощенной схеме (схеме «взвешенного» мажоритарного голосования, в качестве «весов» используется надежность проверок), а также за счет возможности использования исключительно целочисленных операций сложения и сложения по модулю два. Общую сложность одной итерации можно оценить как сумму сложностей М{2и + \oq2J - 2) сравнений, 2Ш сложений по модулю два и 2Л/(^У + 4)(Л - 1) сложений, где /V-длина кодового слова, М - количество информационных бит в кодовом слове, Л - количество единиц в столбце проверочной матрицы кода с низкой плотностью проверок на четность.

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

Недостатком быстрого декодера по надежностям является оценка вероятности ошибки декодирования, которая для канала с аддитивным гауссовским шумом оказывается на 0,5 дБ хуже, чем вероятность ошибки декодирования вероятностного декодера. Ниже будет описана модификация алгоритма, позволяющая добиться приближения вероятности ошибки декодирования к вероятности, получаемой при вероятностном декодировании.

Многопороговое декодирование

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

Основная идея многопорогового декодирования по надежностям состоит в том, чтобы изменять значения порогов инвертирования символов от одной итерации к другой следующим образом (рис. 2):

на первых итерациях порог инвертирования символов выбирается так, чтобы количество инвертированных символов было минимальным (вплоть до инвертирования только одного символа на первой итерации);

КОДИРОВАНИЕ И ПЕРЕДАЧА ИНФОРМАЦИИ

иш

----V------

итерация 1

-----V------

итерация 2

V

итерация N

я Рис. 2. Пороги для многопорогового декодирования: О - пересчитанные надежности;

- пороги

на последующих итерациях пороги инвертирования постепенно повышаются.

Общая схема работы многопорогового декодера по надежностям изображена на рис. 3:

1. Инициализация декодера и вычисление надежностей символов проверок производится так же, как и в алгоритме быстрого декодирования по надежностям: для всех элементов принятого вектора У, вычисляется жесткое решениеX, и надежность R,, надежность является абсолютным значением Yh а также для всех те М{п) присваиваются Ymn = Rn и Хщ,п = Хп.

2. Для каждой итерации /' вычисляется пороговое значение THRr

3. Производится вычисление новых значений надежностей проверок и символов, так же, как и в алгоритме быстрого декодирования по надежностям: для всех л и теМ{п) вычисляются суммы

Sm n = X,

I X,

n'sN{m)\n

и значения

Yт,п

тіп{Ут п'}

n'eN{m)\n

4. Для всех п и всех те N{n) вычисляются

I

т'еМ{п)\т

т ,п

min.

5. Изменение текущих значений символов «жесткого» решения надежностей проверок и символов на новые значения происходит только для тех символов, для которых новое значение надежности оказывается меньше порога ТНЯ,; новое значение надежности принимается равным абсолютному значению пересчитанной надежности. Вводится «зона неопределенности»: для всех остальных символов, если значение надежности оказалось меньше нуля, надежность принимается равной нулю: для всех п вычисляются

у у >0

/77, л " u

xr

~Zm n, Zm n < THRj;

0

Хщ.п’ Zm,n > THRj 1 Ф Xmn, Zmn < THRj

Рис. 3. Схема работы многопорогового декодера по надежностям

теМ

_ \Xh.Z п> о

п Ьхп,гп<о.

6. Декодирование итеративно продолжается до тех пор, пока вектор С не станет кодовым словом или не будет выполнено заданное число итераций.

При многопороговом декодировании, если на первой итерации была исправлена хотя бы одна ошибка, декодирование на последующих итерациях становится значительно проще и общее качество декодирования улучшается [8]. По-прежнему для работы декодеру не требуется информация о шуме в канале, достаточно лишь задать надежности.

Декодер, работающий по многопороговой схеме, позволяет получить вероятность ошибки декодирования на 0,1-0,4 дБ лучшую, чем обеспечивает быстрый декодер по надежностям «иМР», практически приближаясь к вероятности ошибки, получаемой при вероятностном декодировании кодов с низкой плотностью проверок на четность. На рис. 4 приведены кривые вероятностей ошибок декодирования (ВЕИ) двоичных кодов в канале с аддитивным гауссовским шумом, имеющим математическое ожидание, равное нулю, и энергию шума Ы0 при использовании трех различных декодеров: декодера по вероятностям, быстрого декодера по надежностям и многопорогового декодера.

Помимо независимости от характеристик канала

2,5 3 3,5 4 4,5 5

Е^дБ

я Рис. 4. Вероятность ошибки при декодировании (2048, 1649) - кода с низкой плотностью проверок на четность при помощи различных декодеров для различных отношений сигнал/шум в канале: -о- - вероятностный декодер; х  - быстрый декодер; -А- -многопороговый декодер

кодеров кодов с низкой плотностью проверок на четность, а именно - универсальность и применимость для любой конструкции таких кодов.

Критерии качества и сложности декодирования

Так как декодирование LDPC является итеративным, то в общем случае сложность декодирования можно представить как произведение сложности одной итерации на общее количество итераций:

^complete ~ С one iteration ' ^iterations•

Сложность одной итерации декодирования пропорциональна числу единиц в проверочной матрице [1-3, 7]. Таким образом, чтобы анализировать всю сложность декодирования, необходимо учитывать не только сложность одной итерации декодера, но и количество итераций, требуемых для обеспечения заданного качества декодирования.

Будем понимать под скоростью сходимости зависимость вероятности ошибки декодирования от количества итераций, за которое данная вероятность ошибки декодирования была получена.

На рис. 5-7 приводятся гистограммы сходимости многопорогового декодера для различных конструкций LDPC кодов из расчета максимального количества итераций, равного 20. На осях гистограмм отложено количество итераций и количество попыток, в которых декодер закончил работу за данное число итераций. Во всех случаях конструкции кодов анализировались на отношении сигнал/шум, обеспечивавшем вероятность ошибки 10~5.

Из гистограмм видно, что требуемое количество итераций не является постоянной величиной для различных конструкций кодов, и наименьшее количество итераций требуется для декодирования Евклидово-геометрических кодов (EG-LDPC). Следовательно, общая сложность декодирования для этой конструкции будет минимальна, несмотря на большое количество единиц в проверочной матрице EG-LDPC кодов.

180000 --------------------------------------------------

160000 --------------------------------------------------

140000 - —-----------------------------------------

120000 ......- --------------------------—.......--------

100000 --------------------------------------------------

80000 -----------—--------------------------------------

60000 --------------------------------------------------

40000 |--------------------------------------------

20000 I |-----------------------------------------------

0 ...Дг ------,-т--т.,.г.-Г.Г-Т.т.

0 2 4 6 8 10 12 14 16 18 20

ш Рис. 5. Число итераций, затраченных на декодирование 1-ОРС кодов, основанных на Евклидовых геометриях [4]

45000

40000

35000

30000

25000

20000

15000

10000

5000

О

1 1

1

1

О

10 12 14 16 18 20

я Рис. 6. Число итераций, затраченных на декодирование ЬйРС кодов, основанных на кодах Рида-Соломона с двумя информационными символами [5]

2500

2000

1500

1000

500

О

! .1 llli. 1

О

10 12 14 16 18 20

я Рис. 7. Число итераций, затраченных на декодирование LDPC кодов, построенных по принципу density evolution [6]

Заключение

В данной работе предложен алгоритм многопорогового декодирования для кодов с низкой плотностью проверок на четность. Являясь представителем класса «быстрых» декодеров, алгоритм по

сложности равен алгоритму «иМР», рассмотренному в работе, и требует сложности декодирования в 10 раз меньшей, нежели сложность традиционных алгоритмов. При этом многопороговый алгоритм декодирования позволяет в гауссовском канале получить вероятность ошибки декодирования всего на 0,1-0,2 дБ хуже, чем при использовании локальнооптимальных алгоритмов, а по сравнению с быстрыми алгоритмами декодирования новый алгоритм выигрывает 0,3-0,4 дБ по вероятности ошибки.

Литература

1. Gallager R, G. Low-density parity-check codes. PhD thesis. -

1963. - 90 p.

2. Gallager R. G. Low-density parity-check codes// lEEETrans. on Inform. Theory. - Vol. IT-8. - Jan. 1968. - P. 21-28.

3. MacKay D. J. C., Neal R. M. Near Shannon limit performance of low density parity check codes // IEE Electronics Letters. - Vol. 32. - N 18. - 29 Aug. 1996. - P. 1645-1655.

4. Djurdjevic I., Xu J., Abdel-Ghaffar K., Lin S. A class of low-density parity-check codes constructed based on Reed-Solomon codes with two information symbols // IEEE Communications Letters. - Vol. 7. - N 7. - July 2003. -P. 317-319.

5. Kou Y., Lin S., Fossorier М. P. C. Low-density parity-check codes based on finite geometries: A rediscovery and new results// IEEE Transactions on Information Theory. - Vol. IT-47. - Nov. - 2001, - P. 2711-2736.

6. Richardson T. J., Shokrollahi M. A., Urbanke R. L. Design of capacity approaching irregular low-density parity-check codes // IEEE Trans. Information Theory. - Vol.47. - Feb. 2001. - P. 619-637.

7. Fossorier М. P. C., Mihaljevic М., Imai H. Reduced complexity iterative decoding of low-density parity check codes based on belief propagation // IEEE Transactions on Communications. - 47(5). - May 1999. - P. 673-680.

8. Колесник В. Д., Мирончиков Е. Т. Декодирование циклических кодов. - М.: Связь, 1968, - 252 с,