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) задает необязательные аргументы аргументы пары "имя-значение" дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

Создайте данные передачи, состоящие из двух сегментов кодового блока длиной 2560 и 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 должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке 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' - Используйте эту опцию, чтобы задать слоистый алгоритм передачи убеждений, который подходит для квазициклических матриц проверки четности (PCM). Для получения дополнительной информации см. «Декодирование Многоуровневого Распространения Убеждений».

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

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

Примечание

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

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

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

Зависимости

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

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

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

Зависимости

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

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

Критерии окончания декодирования, заданные как разделенная разделенными запятой парами, состоящая из 'Termination' и одно из следующих значений:

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

  • 'max' - декодирование завершается после maxNumIter количество итераций.

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

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

свернуть все

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

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

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

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

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

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

Алгоритмы

свернуть все

The 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 для танха (19.07) и -1 для танха (-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-Sum

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

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

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

Декодирование смещения Min-Sum

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

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

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

Ссылки

[1] 3GPP TS 38.212. "NR; Мультиплексирование и канальное кодирование. "3rd Генерация Partnership Project; Группа технических спецификаций Радиосеть доступ.

[2] Gallager, Robert G. Low-Density Parity-Check Codes, Cambridge, MA, MIT Press, 1963.

[3] Hocevar, D.E. «архитектура декодера пониженной сложности посредством многоуровневого декодирования кодов LDPC». Семинар IEEE по системам обработки сигналов, 2004 год. SIPS 2004. doi: 10.1109/SIPS.2004.1363033

[4] Chen, Jinghu, R.M. Tanner, C. Jones и Yan Li. «Улучшенные алгоритмы декодирования min-sum для неправильных кодов LDPC». В производстве. Международный симпозиум по теории информации, 2005 год. ISIT 2005. doi: 10.1109/ISIT.2005.1523374

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

.
Введенный в R2018b