nrLDPCDecode

Декодирование имеющей малую плотность проверки четности (LDPC)

Описание

[out,actNumIter,finalParityChecks] = nrLDPCDecode(in,bgn,maxNumIter) возвращает LDPC-декодируемую выходную матрицу out для матрицы входных данных in, основной номер графика bgn, и максимальное количество декодирования итераций maxNumIter. Функция также возвращает фактическое количество итераций actNumIter и итоговые проверки четности на кодовую комбинацию finalParityChecks.

Декодер использует алгоритм передачи сообщений продукта суммы. Биты данных должны быть LDPC-закодированы, как задано в Разделе TS 38.212 5.3.2 [1].

пример

[out,actNumIter,finalParityChecks] = nrLDPCDecode(___,Name,Value) задает дополнительные аргументы пары "имя-значение", в дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

Создайте данные о передаче, состоящие из двух сегментов блока кода длины 2 560 и 36 битов заполнителя в конце.

C = 2;          
K = 2560;       
F = 36;    
txcbs = ones(K-F,C);
fillers = -1*ones(F,C);
txcbs = [txcbs;fillers];                

Сгенерируйте кодовую комбинацию LDPC для данных о передаче. Используйте основной график номер два.

bgn = 2; 
txcodedcbs = nrLDPCEncode(txcbs,bgn);   

Преобразуйте данные о передаче в мягкие биты. Заполнители в данных о передаче не имеют логарифмического отношения правдоподобия (LLR) мягкими битами.

rxcodedcbs = double(1-2*txcodedcbs);    
FillerIndices = find(txcodedcbs(:,1) == -1);
rxcodedcbs(FillerIndices,:) = 0;        

Декодируйте закодированную кодовую комбинацию, имеющую до 25 итераций.

[rxcbs,actualniters] = nrLDPCDecode(rxcodedcbs,bgn,25);  

Замените биты заполнителя на нуль в данных о передаче и сравните результаты кодирования и декодирования.

txcbs(end-F+1:end,:) = 0;    
isequal(rxcbs,txcbs)                
ans = logical
   1

actualniters
actualniters = 1×2

     1     1

Входные параметры

свернуть все

Уровень восстановил мягкие биты для входных сегментов блока кода в виде действительной матрицы. Количество столбцов в in равно количеству запланированных сегментов блока кода. Количество строк в in равно длине кодовой комбинации, с некоторыми систематическими проколотыми битами.

Типы данных: double | single

Основной номер графика в виде 1 или 2. Значение выбирает один из двух основных графиков, заданных в Разделе TS 38.212 5.3.2 [1].

Типы данных: double

Максимальное количество декодирования итераций в виде положительного целочисленного скаляра. Декодирование отключено, когда всем проверкам четности удовлетворяют, или после maxNumIter количество итераций.

Типы данных: double

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: [out,actNumIter,finalParityChecks] = nrLDPCDecode(in,bgn,maxNumIter,'DecisionType','hard')

Выходной формат в виде разделенной запятой пары, состоящей из 'OutputFormat' и одно из этих значений:

  • 'info' — Количество строк в out равно длине информационных битов.

  • 'whole' — Количество строк в out равно длине кодовой комбинации.

Типы данных: char | string

Метод решения, используемый для декодирования в виде разделенной запятой пары, состоящей из 'DecisionType' и одно из этих значений:

  • 'hard' — Тип данных out int8.

  • 'soft' — Выход out содержит отношения логарифмической правдоподобности совпадающего типа данных как in.

Типы данных: char | string

LDPC декодирование алгоритма в виде разделенной запятой пары, состоящей из 'Algorithm' и одно из этих значений:

  • 'Belief propagation' — Используйте эту опцию, чтобы задать алгоритм передающей веру или передачи сообщений. Для получения дополнительной информации смотрите, что Распространение Веры Декодирует.

  • 'Layered belief propagation' — Используйте эту опцию, чтобы задать многоуровневый передающий веру алгоритм, который подходит для квазициклических матриц проверки четности (PCMs). Для получения дополнительной информации смотрите, что Многоуровневое Распространение Веры Декодирует.

  • 'Normalized min-sum' — Используйте эту опцию, чтобы задать многоуровневый алгоритм распространения веры нормированным приближением суммы min. Для получения дополнительной информации смотрите, что Нормированная Сумма Min Декодирует.

  • 'Offset min-sum' — Используйте эту опцию, чтобы задать многоуровневый алгоритм распространения веры приближением суммы min смещения. Для получения дополнительной информации смотрите, что Сумма Min Смещения Декодирует.

Примечание

Когда вы задаете значение этого аргумента пары "имя-значение" как 'Normalized min-sum' или 'Offset min-sum', функция отсекает вход (отношение логарифмической правдоподобности) значения LLR к [-1e10 1e10] область значений перед декодированием.

Типы данных: char | string

Масштабный коэффициент для нормированного декодирования суммы min в виде разделенной запятой пары, состоящей из 'ScalingFactor' и действительный скаляр в области значений (0, 1].

Зависимости

Чтобы включить этот аргумент пары "имя-значение", установите 'Algorithm' аргумент пары "имя-значение" 'Normalized min-sum'.

Типы данных: double

Возместите для декодирования суммы min смещения в виде разделенной запятой пары, состоящей из 'Offset' и неотрицательный конечный действительный скаляр.

Зависимости

Чтобы включить этот аргумент пары "имя-значение", установите 'Algorithm' аргумент пары "имя-значение" 'Offset min-sum'.

Типы данных: double

Декодирование критериев завершения в виде разделенной запятой пары, состоящей из 'Termination' и одно из этих значений:

  • 'early' — Декодирование завершает работу, когда всем проверкам четности удовлетворяют или после maxNumIter количество итераций.

  • 'max' — Декодирование завершает работу после maxNumIter количество итераций.

Типы данных: char | string

Выходные аргументы

свернуть все

Декодируемая кодовая комбинация LDPC или информационные биты, возвращенные как действительная матрица. Количество столбцов в out равно количеству запланированных сегментов блока кода. Количество строк в out зависит от аргумента пары "имя-значение" 'OutputFormat'. Тип данных out зависит от аргумента пары "имя-значение" 'DecisionType'.

Типы данных: single | double | int8

Фактическое количество итераций, возвращенных как вектор-строка из положительных целых чисел. Длина actNumIter равно количеству столбцов в in. iэлемент th в actNumIter соответствует фактическому количеству итераций, выполняемых для iстолбец th in.

Типы данных: double

Итоговые проверки четности, возвращенные как матрица. Количество строк в finalParityChecks равно количеству битов проверки четности в кодовой комбинации LDPC. iстолбец th в finalParityChecks соответствует итоговым проверкам четности для iкодовая комбинация th.

Типы данных: double

Алгоритмы

свернуть все

nrLDPCDecode функционируйте поддерживает эти четыре LDPC декодирование алгоритмов.

Декодирование распространения веры

Реализация алгоритма распространения веры основана на алгоритме декодирования, представленном в [2]. Для переданной LDPC-закодированной кодовой комбинации, c, где c=(c0,c1,...,cn1), вход к декодеру LDPC является значением отношения логарифмической правдоподобности (LLR) L(ci)=log(Pr(ci=0|channel output for ci)Pr(ci=1|канал выход для ci)).

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

L(rji)=2atanh(iVj\itanh(12L(qij))),

L(qij)=L(ci)+jCi\jL(rji), инициализированный как L(qij)=L(ci) перед первой итерацией, и

L(Qi)=L(ci)+jCiL(rji).

В конце каждой итерации, L(Qi) обновленная оценка значения LLR для переданного бита ci. Значение L(Qi) мягкое решение выход для ci. Если L(Qi)<0, трудное решение выход для ci 1. В противном случае выход 0.

Индексируйте наборы Ci\j и Vj\i основаны на матрице проверки четности (PCM). Индексируйте наборы Ci и Vj соответствуйте всем ненулевым элементам в столбце i и строка j PCM, соответственно.

Этот рисунок подсвечивает расчет этих наборов индекса в данном PCM для i = 5 и j = 3.

Чтобы избежать бесконечных чисел в уравнениях алгоритма, atanh (1) и atanh (-1) установлены в 19,07 и –19.07, соответственно. Из-за конечной точности, MATLAB® возвращается 1 для tanh (19.07) и –1 для tanh (–19.07).

Когда аргумент пары "имя-значение" 'Termination' установлен в 'max', декодирование завершает работу после maxNumIter количество итераций. Когда 'Termination' установлен в 'early', декодирование завершает работу, когда всем проверкам четности удовлетворяют (HcT=0) или после maxNumIter количество итераций.

Многоуровневое декодирование распространения веры

Реализация многоуровневого алгоритма распространения веры основана на алгоритме декодирования, представленном в [3], Раздел II.A. Цикл декодирования выполняет итерации по подмножествам строк (слои) PCM. Для каждой строки, m, в слое и каждом битном индексе, j, реализация обновляет ключевые компоненты алгоритма на основе этих уравнений:

(1) L(qmj)=L(qj)Rmj,

(2) Amj=n  N(m)njψ(L(qmn)),

(3) smj=n  N(m)njзнак(L(qmn)),

(4) Rmj=smjψ(Amj), и

(5) L(qj)=L(qmj)+Rmj.

Для каждого слоя уравнение (5) декодирования работает над объединенным входом, полученным из текущих входных параметров LLR L(qmj) и предыдущие обновления слоя Rmj.

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

Нормированное декодирование суммы Min

Реализация нормированного алгоритма декодирования суммы min следует многоуровневому алгоритму распространения веры уравнением (2), замененным

Amj=minn  N(m)nj(|L(qmn) |α),

где α находится в области значений (0, 1], и масштабный коэффициент, заданный ScalingFactor. Это уравнение является адаптацией уравнения (4), представленного в [4].

Возместите декодирование суммы Min

Реализация алгоритма декодирования суммы min смещения следует многоуровневому алгоритму распространения веры уравнением (2), замененным

Amj =  max(minn  N(m)nj (|L(qmn)| β), 0),

где β ≥ 0 и является смещением, заданным Offset. Это уравнение является адаптацией уравнения (5), представленного в [4].

Ссылки

[1] 3GPP TS 38.212. “NR; Мультиплексирование и кодирование канала”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

[2] Gallager, Роберт Г. Имеющие малую плотность коды с проверкой четности, Кембридж, MA, нажатие MIT, 1963.

[3] Hocevar, D.E. "Уменьшаемая архитектура декодера сложности через многоуровневое декодирование кодов LDPC". В Семинаре IEEE по Системам Обработки сигналов, 2004. ГЛОТКИ 2004. doi: 10.1109/SIPS.2004.1363033

[4] Чен, Jinghu, Р.М. Таннер, К. Джонс и Ян Ли. "Улучшенные алгоритмы декодирования суммы min для неправильных кодов LDPC". В Продолжениях. Международный Симпозиум по Теории информации, 2005. ISIT 2005. doi: 10.1109/ISIT.2005.1523374

Расширенные возможности

Смотрите также

Функции

Введенный в R2018b