Декодирование с низкой плотностью проверки четности (LDPC)
[ возвращает декодированную LDPC выходную матрицу out,actNumIter,finalParityChecks] = nrLDPCDecode(in,bgn,maxNumIter)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 равен количеству запланированных сегментов блока кода. Количество строк в in равен длине кодового слова, с некоторыми систематическими битами, проколотыми.
Типы данных: double | single
bgn - Базовый номер графика1 | 2Базовый номер графика, заданный как 1 или 2. Значение выбирает один из двух базовых графиков, определенных в TS 38.212 Раздел 5.3.2 [1].
Типы данных: double
maxNumIter - Максимальное количество итераций декодированияМаксимальное количество итераций декодирования, заданное как положительный целочисленный скаляр. Декодирование прекращается, когда все проверки четности удовлетворены, или после maxNumIter количество итераций.
Типы данных: double
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
[out,actNumIter,finalParityChecks] = nrLDPCDecode(in,bgn,maxNumIter,'DecisionType','hard')'OutputFormat' - Выход'info' (по умолчанию) | 'whole'Выход, заданный как разделенная разделенными запятой парами, состоящая из 'OutputFormat' и одно из следующих значений:
'info' - Количество строк в out равен длине информационных бит.
'whole' - Количество строк в out равен длине кодового слова.
Типы данных: char | string
'DecisionType' - Метод принятия решений, используемый для декодирования'hard' (по умолчанию) | 'soft'Метод принятия решений, используемый для декодирования, задается как разделенная разделенными запятой парами, состоящая из 'DecisionType' и одно из следующих значений:
Типы данных: char | string
'Algorithm' - алгоритм декодирования LDPC'Belief propagation' (по умолчанию) | 'Layered belief propagation' | 'Normalized min-sum' | 'Offset min-sum'Алгоритм декодирования 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
'ScalingFactor' - Масштабный коэффициент для нормированного декодирования min-sum0.75 (по умолчанию) | действительный скаляр в области значений (0, 1]Масштабный коэффициент для нормированного декодирования min-sum, заданный как разделенная разделенными запятой парами, состоящая из 'ScalingFactor' и действительный скаляр в области значений (0, 1].
Чтобы включить этот аргумент пары "имя-значение", установите значение ' аргумент пары "имя-значение" в Algorithm''Normalized min-sum'.
Типы данных: double
'Offset' - Смещение для декодирования смещения min-sum0.5 (по умолчанию) | неотрицательным конечным вещественным скаляромСмещение для декодирования смещения min-sum, заданное как разделенная разделенными запятой парами, состоящая из 'Offset' и неотрицательный конечный действительный скаляр.
Чтобы включить этот аргумент пары "имя-значение", установите значение ' аргумент пары "имя-значение" в Algorithm''Offset min-sum'.
Типы данных: double
'Termination' - Критерий завершения декодирования'early' (по умолчанию) | 'max'Критерии окончания декодирования, заданные как разделенная разделенными запятой парами, состоящая из 'Termination' и одно из следующих значений:
'early' Декодирование завершается, когда все проверки четности удовлетворены или после maxNumIter количество итераций.
'max' - декодирование завершается после maxNumIter количество итераций.
Типы данных: char | string
out - Декодированное кодовое слово LDPCДекодированное кодовое слово LDPC или информационные биты, возвращенные как действительная матрица. Количество столбцов в out равен количеству запланированных сегментов блока кода. Количество строк в out зависит от аргумента пары "имя-значение" 'OutputFormat'. Тип данных out зависит от аргумента пары "имя-значение" 'DecisionType'.
Типы данных: single | double | int8
actNumIter - Фактическое количество итерацийФактическое количество итераций, возвращенных как вектор-строка положительных целых чисел. Длина actNumIter равно количеству столбцов в in. The iпервый элемент в actNumIter соответствует фактическому количеству итераций, выполненных для i1-й столбец in.
Типы данных: double
finalParityChecks - Окончательные проверки четностиОкончательные проверки четности, возвращенные как матрица. Количество строк в finalParityChecks равен количеству бит проверки четности в кодовом слове LDPC. The iпервый столбец в finalParityChecks соответствует конечным проверкам четности для iвторое кодовое слово.
Типы данных: double
The nrLDPCDecode функция поддерживает эти четыре алгоритма декодирования LDPC.
Реализация алгоритма распространения убеждений основана на алгоритме декодирования, представленном в [2]. Для переданного кодового слова с кодировкой LDPC, c, где , входом для декодера LDPC является значение отношения логарифмической правдоподобности (LLR) .
В каждой итерации ключевые компоненты алгоритма обновляются на основе этих уравнений:
,
, инициализированный как перед первой итерацией, и
.
В конце каждой итерации, является обновленной оценкой значения LLR для переданного бита . Значение - выходы мягкого решения для . Если , выход жесткого решения для равен 1. В противном случае выводится значение 0.
Наборы индексов и основаны на матрице проверки четности (PCM). Наборы индексов и соответствуют всем ненулевым элементам в столбцах 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'декодирование заканчивается, когда выполняются все проверки четности () или после maxNumIter количество итераций.
Реализация алгоритма распространения многоуровневых убеждений основана на алгоритме декодирования, представленном в [3], раздел II.A. Цикл декодирования итерирует над подмножествами строк (слоев) PCM. Для каждой строки, m, в слое и каждом битовом индексе, j, реализация обновляет ключевые компоненты алгоритма на основе этих уравнений:
(1) ,
(2) ,
(3) ,
(4) , и
(5) .
Для каждого слоя уравнение декодирования (5) работает на объединенном входе, полученном из текущих входов LLR и обновляется предыдущий слой .
Поскольку в слое обновляется только подмножество узлов, алгоритм распространения многослойных убеждений быстрее по сравнению с алгоритмом распространения убеждений. Чтобы достичь той же частоты ошибок, что и при декодировании распространения убеждений, используйте половину количества итераций декодирования при использовании алгоритма распространения многоуровневых убеждений.
Реализация нормированного алгоритма декодирования min-sum следует многоуровневому алгоритму распространения убеждений с уравнением (2), замененным на
,
где α находится в области значений (0, 1] и является масштабным коэффициентом, заданным ScalingFactor. Это уравнение является адаптацией уравнения (4), представленного в [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
Указания и ограничения по применению:
Имена и значения в аргументах пары "имя-значение" должны быть константами времени компиляции. Для примера при указании типа мягкого решения включите {coder.Constant('DecisionType'),coder.Constant('soft')} в -args значение codegen функция. Для получения дополнительной информации смотрите coder.Constant (MATLAB Coder).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.