ldpcDecode

Декодируйте бинарный код LDPC

Описание

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

пример

[y,actualnumiter,finalparitychecks] = ldpcDecode(llr,decodercfg,maxnumiter) декодирует входное отношение логарифмической правдоподобности (LLR), llr, использование матрицы LDPC задано входом ldpcDecoderConfig объект настройки, decodercfg. Положительный LLR указывает, что соответствующий бит более вероятен нуль. Декодирование завершает работу, когда всем проверкам четности удовлетворяют до максимального количества итераций, заданных входом maxnumiter. Коды LDPC являются кодами системы управления линейной погрешности с разреженными матрицами проверки четности и длинами длинного блока, которые могут достигнуть эффективности около предела Шеннона.

[y,actualnumiter,finalparitychecks] = ldpcDecode(llr,decodercfg,maxnumiter,Name,Value) задает опции с помощью одних или нескольких аргументов name-value. Например, DecisionType='soft' задает декодирование мягкого решения и выходные параметры LLRs.

Примеры

свернуть все

Инициализируйте параметры для прототипной матрицы и размера блока, чтобы сконфигурировать уровень 3/4 LDPC код, заданный в IEEE 802.11. Создайте матрицу проверки четности при помощи ldpcQuasiCyclicMatrix функция.

P = [
    16 17 22 24  9  3 14 -1  4  2  7 -1 26 -1  2 -1 21 -1  1  0 -1 -1 -1 -1
    25 12 12  3  3 26  6 21 -1 15 22 -1 15 -1  4 -1 -1 16 -1  0  0 -1 -1 -1
    25 18 26 16 22 23  9 -1  0 -1  4 -1  4 -1  8 23 11 -1 -1 -1  0  0 -1 -1
     9  7  0  1 17 -1 -1  7  3 -1  3 23 -1 16 -1 -1 21 -1  0 -1 -1  0  0 -1
    24  5 26  7  1 -1 -1 15 24 15 -1  8 -1 13 -1 13 -1 11 -1 -1 -1 -1  0  0
     2  2 19 14 24  1 15 19 -1 21 -1  2 -1 24 -1  3 -1  2  1 -1 -1 -1 -1  0
    ];
blockSize = 27;
pcmatrix = ldpcQuasiCyclicMatrix(blockSize,P);

Создайте объекты настройки энкодера и декодера LDPC, отобразив их свойства.

cfgLDPCEnc = ldpcEncoderConfig(pcmatrix)
cfgLDPCEnc = 
  ldpcEncoderConfig with properties:

     ParityCheckMatrix: [162x648 logical]

   Read-only properties:
           BlockLength: 648
    NumInformationBits: 486
    NumParityCheckBits: 162
              CodeRate: 0.7500

cfgLDPCDec = ldpcDecoderConfig(pcmatrix)
cfgLDPCDec = 
  ldpcDecoderConfig with properties:

     ParityCheckMatrix: [162x648 logical]
             Algorithm: 'bp'

   Read-only properties:
           BlockLength: 648
    NumInformationBits: 486
    NumParityCheckBits: 162
              CodeRate: 0.7500

Передайте LDPC-закодированный, модулируемый QPSK поток битов через канал AWGN. Демодулируйте сигнал, декодируйте полученные кодовые комбинации, и затем считайте битовые ошибки. Используйте вложил for циклы, чтобы обработать несколько настроек SNR и систем координат с и без кодирования прямого исправления ошибок (FEC) LDPC передаваемых данных.

M = 4;
maxnumiter = 10;
snr = [20 6 3];
numframes = 10;
qpskmod = comm.PSKModulator(M,'BitInput',true);
qpskmod2 = comm.PSKModulator(M);

ber = comm.ErrorRate;
ber2 = comm.ErrorRate;

for ii = 1:length(snr)
    qpskdemod = comm.PSKDemodulator(M,'BitOutput',true, ...
        'DecisionMethod','Approximate log-likelihood ratio', ...
        'Variance',1/10^(snr(ii)/10));
    qpskdemod2 = comm.PSKDemodulator(M);
    for counter = 1:numframes
        data = randi([0 1],cfgLDPCEnc.NumInformationBits,1,'int8');
        % Transmit and receive with LDPC coding
        encodedData = ldpcEncode(data,cfgLDPCEnc);
        modSignal = qpskmod(encodedData);
        receivedSignal = awgn(modSignal,snr(ii));
        demodSignal = qpskdemod(receivedSignal);
        receivedBits = ldpcDecode(demodSignal,cfgLDPCDec,maxnumiter);
        errStats = ber(data,receivedBits);
        % Transmit and receive with no LDPC coding
        noCoding = qpskmod2(data);
        rxNoCoding = awgn(noCoding,snr(ii));
        rxBitsNoCoding = qpskdemod2(rxNoCoding);
        errStatsNoCoding = ber2(data,int8(rxBitsNoCoding));
    end
    fprintf(['SNR = %2d\n   Coded: Error rate = %1.2f, ' ...
        'Number of errors = %d\n'], ...
        snr(ii),errStats(1),errStats(2))
    fprintf(['Noncoded: Error rate = %1.2f, ' ...
        'Number of errors = %d\n'], ...
        errStatsNoCoding(1),errStatsNoCoding(2))
end
SNR = 20
   Coded: Error rate = 0.00, Number of errors = 0
Noncoded: Error rate = 0.00, Number of errors = 0
SNR =  6
   Coded: Error rate = 0.00, Number of errors = 0
Noncoded: Error rate = 0.02, Number of errors = 196
SNR =  3
   Coded: Error rate = 0.02, Number of errors = 353
Noncoded: Error rate = 0.07, Number of errors = 976

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

свернуть все

Отношения логарифмической правдоподобности в виде матрицы с количеством строк равняются BlockLength свойство входа decodercfg. Каждый столбец llr соответствует кодовой комбинации. Функция декодирует каждый столбец независимо. Положительный LLR указывает, что соответствующий бит более вероятен нуль.

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

Настройка декодера LDPC в виде ldpcDecoderConfig объект.

Максимальное количество декодирования итераций в виде положительной скалярной величины.

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

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

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

Пример: Termination='max'

Выходной формат в виде одного из этих значений:

  • 'info' — Выведите только декодируемые информационные биты. Количество строк, что функциональные выходные параметры равняются NumInformationBitsсвойство для входа decodercfg.

  • 'whole' — Выведите все декодируемые биты кодовой комбинации LDPC, включая информационные биты и биты проверки четности. Количество строк, что функциональные выходные параметры равняются BlockLength свойство для входа decodercfg.

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

Тип решения для LDPC, декодирующего в виде одного из этих значений:

  • 'hard' — Выполните декодирование трудного решения и выведите декодируемые биты как значения int8 тип данных.

  • 'soft' — Выполните декодирование мягкого решения и выход LLRs с совпадающим типом данных как вход.

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

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

Зависимости

Чтобы включить это свойство, установите Algorithm свойство входа decodercfg к 'norm-min-sum'.

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

Возместите для алгоритма декодирования суммы min в виде скаляра. Для получения дополнительной информации смотрите, что Сумма Min Смещения Декодирует.

Зависимости

Чтобы включить это свойство, установите Algorithm свойство входа decodercfg к 'offset-min-sum'.

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

Декодирование критериев завершения в виде одного из этих значений:

  • 'early' — Оконечные итерации декодирования, когда всем проверкам четности удовлетворяют до максимального количества итераций, заданных входом maxnumiter.

  • 'max' — Оконечное декодирование, когда максимальное количество итераций, maxnumiter, завершены.

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

Включите многопоточное выполнение в виде логического 1 TRUE) или 0 ложь). Когда вы запускаете MATLAB® в интерпретированном режиме и наборе этот аргумент к true, функция выполняет алгоритм декодирования с несколькими потоками.

Совет

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

Зависимости

Чтобы включить это свойство, запустите MATLAB в интерпретированном режиме.

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

свернуть все

Декодируемые кодовые комбинации, возвращенные как матрица со строками K, которые представляют декодируемые биты для llr(1:K, :). K равняется NumInformationBits свойство входа decodercfg. Для операции декодирования, каждого столбца llr соответствует кодовой комбинации. Функция декодирует каждый столбец независимо. 'OutputFormat' аргумент значения имени задает, содержит ли выход декодируемые информационные биты (значение по умолчанию) или целые биты кодовой комбинации LDPC. 'DecisionType' аргумент значения имени задает и определяет тип решения декодирования и тип данных этого выхода.

Для получения дополнительной информации см. Алгоритмы.

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

Фактическое количество декодирования итераций, возвращенных как вектор-строка. Если всем проверкам четности для кодовой комбинации удовлетворяют, декодирование может остановиться перед максимальным количеством итераций, maxnumiter, достигнут. Этот выход является вектором-строкой из фактического количества итераций, которые функция выполняет для кодовых комбинаций.

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

Итоговые проверки четности для каждой кодовой комбинации, возвращенной как матрица с количеством строк, равняются ParityCheckBits свойство входа decodercfg. Для операции декодирования каждый столбец этого выхода является итоговыми проверками четности для соответствующей кодовой комбинации.

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

Алгоритмы

свернуть все

LDPC, декодирующий использование одного из этих алгоритмов передачи сообщений.

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

Реализация алгоритма распространения веры основана на алгоритме декодирования, представленном Gallager [2].

Block diagram of the belief propagation algorithm.

Для переданной LDPC-закодированной кодовой комбинации c = c 0, c 1, …, cn-1, вход к декодеру 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 (Q i) содержит обновленную оценку значения LLR для переданного битного c i. Значение L (Q i) является мягким решением выход для ci. Если L (Q i) <0, трудное решение выход для c i 1 год. В противном случае трудное решение выход для ci 0.

Если декодирование сконфигурировано, чтобы остановиться, когда всем проверкам четности удовлетворяют, алгоритм проверяет уравнение проверки четности (H c' = 0) в конце каждой итерации. Когда всем проверкам четности удовлетворяют, или если максимальное количество итераций достигнуто, декодируя остановки.

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

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

Computation of C and V index sets for a given parity-check matrix.

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

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

Реализация многоуровневого алгоритма распространения веры основана на алгоритме декодирования, представленном в Hocevar [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], и масштабный коэффициент, заданный MinSumScalingFactor входной параметр к ldpcDecode функция. Это уравнение является адаптацией уравнения (4), представленного в Чене [4].

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

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

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

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

Ссылки

[1] Станд. IEEE 802.11™-2016 (Версия Станд. IEEE 802.11-2012). "Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования". Стандарт IEEE для Информационных технологий — Телекоммуникации и обмен информацией между системами. Локальные сети и городские компьютерные сети — Конкретные требования.

[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

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

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

Функции

Объекты

Введенный в R2021b