tpcdec

Декодер продукта кода (TPC)

Описание

пример

decoded = tpcdec(llr,N,K) выполняет 2-D декодирование TPC на вход журнала коэффициентах вероятности, llr, используя два линейных блочных кода, заданных длиной кодового слова N и длина сообщения K. Описание декодирования 2-D TPC смотрите в Turbo Product Code Decoding.

пример

decoded = tpcdec(llr,N,K,S) выполняет 2-D декодирование TPC на укороченном llr использование 2-D декодера TPC, заданного длиной кодового слова (NK+ S) и длина сообщения S.

decoded = tpcdec(llr,N,K,S,maxnumiter) выполняет 2-D декодирование TPC для maxnumiter итераций. Как использовать maxnumiter с полнометражными сообщениями задайте S пустой, [].

decoded = tpcdec(llr,N,K,S,maxnumiter,earlyterm) выполняет 2-D декодирование TPC и заканчивается раньше, если вычисленный синдром или проверка четности кода компонента оцениваются в нуль перед maxnumiter итерации декодирования. Как использовать maxnumiter и earlyterm с полнометражными сообщениями задайте S пустой, [].

пример

[decoded,actualnumiter] = tpcdec(___)также возвращает фактическое количество итераций декодирования после выполнения декодирования 2-D TPC с использованием любого из предыдущих синтаксисов.

Примеры

свернуть все

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

Начните с кодирования вектора случайных битов 2-D используя кодирование турбо-продукта (TPC) с расширенными кодами Хемминга и расширенными кодами BCH.

Задайте (N, K) пары кода, которые будут использоваться для кодирования TPC.

N = [32;16]; 
K = [21;11]; 

Сгенерируйте вектор-столбец из бит случайных сообщений и TPC-закодируйте сообщение. Задайте биты сообщения как вектор с длиной, равной продукту элементов в K.

msg = randi([0 1],prod(K),1);
code = tpcenc(msg,N,K);

Примените 16-QAM модуляцию. Добавьте AWGN к сигналу. Демодулируйте сигнал, выводя приблизительные LLR.

M = 16;
snr = 10;

txsig = qammod(code,M,'InputType','bit', ...
    'UnitAveragePower',true);

rxsig = awgn(txsig,snr,'measured');

llr = qamdemod(rxsig,M,'OutputType','approxllr', ...
    'UnitAveragePower',true,'NoiseVariance',10.^(-snr/10));

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

iterations = 3;
decoded = tpcdec(-llr,N,K,[],iterations);

numerr = biterr(msg,decoded)
numerr = 0

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

Начните с кодирования вектора случайных битов 2-D используя кодирование турбо-продукта (TPC) с расширенными кодами Хемминга и расширенными кодами BCH.

Задайте (N, K) пары кода и S для кодирования TPC.

N = [32;32];
K = [21;26];
S = [19;24];

Сгенерируйте вектор-столбец из бит случайных сообщений и TPC-закодируйте сообщение. Задайте укороченные биты сообщения как вектор с длиной, равной продукту элементов в S.

msg = randi([0 1],prod(S),1);
code = tpcenc(msg,N,K,S);

Примените QPSK модуляцию. Добавьте AWGN к сигналу. Демодулируйте сигнал и выход приблизительных LLR.

M = 4;
snr = 3;

txsig = qammod(code,M,'InputType','bit', ...
    'UnitAveragePower',true);

rxsig = awgn(txsig,snr,'measured');

llr = qamdemod(rxsig,M,'OutputType','approxllr', ...
    'UnitAveragePower',true,'NoiseVariance',10.^(-snr/10));

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

iterations = 2;
decoded = tpcdec(-llr,N,K,S,iterations);

[~,ber] = biterr(msg,decoded)
ber = 0.0066

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

Начните с кодирования вектора случайных битов 2-D используя кодирование турбо-продукта (TPC) с расширенными кодами Хемминга и расширенными кодами BCH. Задайте (N, K) пары кода и S для кодирования TPC и максимум 10 итераций декодирования. Выполните QPSK модуляцию сигнала.

n = [64; 32];
k = [51; 26];
s = [49; 24];
maxnumiter = 10;
M = 4;

msg = randi([0 1],prod(s),1);  % Random bits
code = tpcenc(msg,n,k,s);

txsig = qammod(code,M,'InputType','bit', ...
    'UnitAveragePower',true);

Добавьте шум к переданному сигналу.

snr = 5;
rxsig = awgn(txsig,snr,'measured');

Демодулируйте принятый сигнал с помощью аппроксимации LLR.

llr = qamdemod(rxsig,M,'OutputType', ...
    'approxllr','UnitAveragePower',true, ...
    'NoiseVariance',10.^(-snr/10));

Задайте максимальное количество итераций декодирования TPC и верните фактическое количество выполненных итераций. Раннее завершение декодирования TPC включено по умолчанию. Отображение количества ошибок и количества выполненных итераций.

[decoded,actualNumIter] = tpcdec(-llr,n,k,s,maxnumiter);
numErr = biterr(msg,decoded);
disp(['Terminated after ' num2str(actualNumIter) ' iterations.' ...
    ' Number of errors = ' num2str(numErr) '.']);
Terminated after 4 iterations. Number of errors = 0.

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

свернуть все

Журнал вероятностных коэффициентов, заданных как вектор-столбец.

  • Для полноразмерных кодов длина входного вектора-столбца является продуктом элементов в N.

  • Для укороченных кодов длина входного вектора-столбца является продуктом элементов в (NK+ S).

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

Длина кодового слова, заданная как двухэлементный целочисленный вектор, [N R; N C]. N R представляет количество строк в матрице кода продукта. N C представляет количество столбцов в матрице кода продукта. Для получения дополнительной информации о N R и N C, смотрите Turbo Product Code Decoding. Список допустимых (N (i), K (i)) пар кода см. в разделе Дополнительные сведения.

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

Длина сообщения, заданная как двухэлементный целочисленный вектор, [K R; K C]. Для полноразмерного сообщения входной вектор-столбец, содержащий входные LLR, упорядочен в K R-by K C матрицу. K R представляет количество строк в матрице сообщений. K C представляет количество столбцов в матрице сообщений. Для получения дополнительной информации о K R и K C, смотрите Turbo Product Code Decoding. Список допустимых (N (i), K (i)) пар кода см. в разделе Дополнительные сведения.

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

Укороченная длина сообщения, заданная как двухэлементный целочисленный вектор, [S R; S C]. Для сокращенного сообщения входной вектор-столбец, содержащий входные LLR, упорядочен в S R-by S C матрицу. S R представляет количество строк в матрице. S C представляет количество столбцов в матрице. Для получения дополнительной информации о S R и S C, смотрите Turbo Product Code Decoding.

Когда вы задаете этот параметр, задайте N и K векторы для полноразмерных кодов TPC, которые укорочены до (N (i) - K (i) + S (i), S (i)) кодов.

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

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

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

Включите раннее прекращение декодирования, заданное как логическое. Когда earlyterm является true декодирование заканчивается раньше, если вычисленный синдром или проверка четности кода компонента оцениваются в нуль перед maxnumiter итерации декодирования.

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

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

свернуть все

Декодированное сообщение TPC, возвращенное как вектор-столбец.

  • Для полноразмерных кодов длина возвращаемого вектора-столбца является продуктом элементов в K.

  • Для укороченных кодов длина возвращаемого вектора-столбца является продуктом элементов в S.

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

Фактическое количество выполненных итераций декодирования, возвращенных как положительное целое число.

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

Подробнее о

свернуть все

Коды компонентов

В этой таблице перечислены поддерживаемые пары кода компонента для параметров строка (N R, K R) и столбец (N C, K C ).

  • N R и K R представляют количество строк в матрице кода продукта и матрице сообщений, соответственно.

  • N C и K C представляют количество столбцов в матрице кода продукта и матрице сообщений, соответственно.

В рамках каждого типа кода любые две пары кода компонента могут сформировать 2-D код TPC. Таблица также включает возможность исправления ошибок для каждой пары кода.

Тип кодаПары кода компонента (N R, K R) и (N C, K C)Возможность исправления ошибок (T)
Код Хемминга(255,247)1
(127,120)1
(63,57)1
(31,26)1
(15,11)1
(7,4)1
Расширенный код Хемминга (256,247)1
(128,120)1
(64,57)1
(32,26)1
(16,11)1
(8,4)1
Код BCH(255,239)2
(127,113)2
(63,51)2
(31,21)2
(15,7)2
Расширенный код BCH(256,239)2
(128,113)2
(64,51)2
(32,21)2
(16,7)2
Проверка кода четности(256,255)-
(128,127)-
(64,63)-
(32,31)-
(16,15)-
(8,7)-
(4,3)-

Декодирование турбо Продукта кода

Турбокоды (TPC) продукта являются формой конкатенированных кодов, используемых в качестве кодов прямой коррекции ошибок (FEC). Два или более блочных кодов компонентов, таких как систематические линейные блочные коды, используются для создания TPC. Декодер TPC достигает почти оптимального декодирования продукта кодов, используя декодирование Chase и алгоритм Pyndiah, чтобы выполнить итерационный мягкий вход, мягкий выход декодирование. Подробное описание см. в разделах [1] и [2]. Этот декодер реализует итерационное мягкое входное, мягкое выходное 2-D кодовое декодирование продукта, как описано в [2], с использованием двух линейных блочных кодов. Декодер ожидает коэффициентов правдоподобия мягкого логарифмического журнала (LLR), полученных от цифровой демодуляции, в качестве входного сигнала.

Примечание

Декодер TPC ожидает положительный биполярный сопоставленный вход, в частности -1, сопоставленный с 0 и + 1, сопоставленный с 1. Выходы от демодуляторов в Communications Toolbox™ являются отрицательным биполярным отображением, в частности, + 1 сопоставлен с 0 и -1 сопоставлен с + 1. Поэтому выход LLR от демодуляторов должен быть отменен, чтобы обеспечить положительный биполярный отображенный вход, ожидаемый декодером TPC.

Декодер TPC декодирует либо полноразмерные, либо укороченные коды.

 Декодирование TPC полноразмерных сообщений

 Декодирование сокращенных сообщений TPC

Ссылки

[1] Chase, D «. Класс алгоритмов для декодирования блочных кодов с информацией о измерениях в канале». Транзакции IEEE по теории информации, том 18, номер 1, январь 1972, стр. 170-182.

[2] Pyndiah, R. M. «Near-Optimum Decoding of Product Codes: Block Turbo Codes». Транзакции IEEE по коммуникациям. Том 46, № 8, август 1998, стр. 1003-1010.

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

.

См. также

Функции

Объекты

Блоки

Введенный в R2018a