Декодер продукта кода (TPC)
выполняет 2-D декодирование TPC на вход журнала коэффициентах вероятности, decoded
= tpcdec(llr
,N
,K
)llr
, используя два линейных блочных кода, заданных длиной кодового слова N
и длина сообщения K
. Описание декодирования 2-D TPC смотрите в Turbo Product Code Decoding.
выполняет 2-D декодирование TPC и заканчивается раньше, если вычисленный синдром или проверка четности кода компонента оцениваются в нуль перед decoded
= tpcdec(llr
,N
,K
,S
,maxnumiter
,earlyterm
)maxnumiter
итерации декодирования. Как использовать maxnumiter
и earlyterm
с полнометражными сообщениями задайте S
пустой, [].
[
также возвращает фактическое количество итераций декодирования после выполнения декодирования 2-D TPC с использованием любого из предыдущих синтаксисов.decoded
,actualnumiter
] = tpcdec(___)
Декодируйте приблизительный выходной сигнал логарифмического отношения логарифмической правдоподобности от 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.
llr
- Журнал коэффициентов правдоподобияN
- Длина кодового словаДлина кодового слова, заданная как двухэлементный целочисленный вектор, [N R; N C]. N R представляет количество строк в матрице кода продукта. N C представляет количество столбцов в матрице кода продукта. Для получения дополнительной информации о N R и N C, смотрите Turbo Product Code Decoding. Список допустимых (N (i), K (i)) пар кода см. в разделе Дополнительные сведения.
Типы данных: double
K
- Длина сообщенияДлина сообщения, заданная как двухэлементный целочисленный вектор, [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
- Укороченная длина сообщенияУкороченная длина сообщения, заданная как двухэлементный целочисленный вектор, [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
maxnumiter
- Максимальное количество итераций декодированияМаксимальное количество итераций декодирования, заданное как положительное целое число.
Типы данных: double
earlyterm
- Включить досрочное прекращениеtrue
(по умолчанию) | false
Включите раннее прекращение декодирования, заданное как логическое. Когда earlyterm
является true
декодирование заканчивается раньше, если вычисленный синдром или проверка четности кода компонента оцениваются в нуль перед maxnumiter
итерации декодирования.
Типы данных: double
decoded
- декодированное сообщение TPCactualnumiter
- Фактическое количество итераций декодированияФактическое количество выполненных итераций декодирования, возвращенных как положительное целое число.
Типы данных: 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 сообщения полноразмерного входа декодируются с использованием заданных 2-D TPC кодов пар. В строковом декодировании используется пара кода (N C, K C), а в столбцовом декодировании используется пара кода (N R, K R). Вход вектора должна быть N R × N C. Для выполнения 2-D декодирования TPC вектор-столбец входных LLR, состоящий из бит сообщения и четности, упорядочен в матрицу N R-by- N C.
Декодер TPC достигает почти оптимального декодирования продукта кодов, используя декодирование Chase и алгоритм Pyndiah, чтобы выполнить итерационный мягкий вход, мягкий выход декодирование. Декодирование Chase формирует набор возможных кодовых слов для каждой строки или столбца. Алгоритм Pyndiah вычисляет мягкую информацию, необходимую для следующего шага декодирования.
Итерационный мягкий вход, мягкий выходной декодер
Итерационное мягкое входное, мягкое выходное декодирование, как показано на блоке, выполняет два шага декодирования для каждой итерации.
Мягкие входы для декодирования R (m) = R + α (m) W (m).
Счетчик цикла итерации i с шагами от i = 1 до заданного количества итераций.
m = 2
i – 1
- индекс шага декодирования.
R - полученная матрица LLR.
R (m) является мягким входом для m -го шага декодирования.
W (m) является входной внешней информацией для m-го этапа декодирования.
α (m) = [0,0,2,0,3,0,5,0,7,0,9,1,1,...], где α является весовым коэффициентом, применяемым на основе индекса шага декодирования. Для более высоких шагов декодирования α = 1.
β (m) = [0,2,0,4,0,6,0,8,1,1,...], где β является коэффициентом надежности, применяемым на основе индекса шага декодирования. Для более высоких шагов декодирования β = 1.
D содержит декодированные биты сообщений. Выходы сообщения формируются из D путем отображения -1 на 0 и + 1 на 1, затем изменения формы блока сообщения в вектор-столбец.
Выходы сообщения формируются после итерации через заданное количество итераций или, если включено раннее завершение, после сходимости кода.
Раннее прекращение декодирования TPC
Если включено раннее завершение, проверка сходимости кода выполняется при жестком решении мягкого входа на каждом шаге декодирования строк и столбцов. Раннее завершение может быть инициировано после того, как сходится либо строковое декодирование, либо столбцовое декодирование.
Код сходится, если для всех строк или всех столбцов,
Синдром достигает нуля в кодах (кодах Hamming, кодах Extended Hamming, кодах BCH или кодах Extended BCH).
Проверка четности оценивается в нуле в проверках кода четности.
Указанное количество итераций вычисляется до значения итерации, которое в данный момент выполняется. Для примера, если проверка сходимости кода выполняется после строкового декодирования в третьей итерации (после 2,5 шагов декодирования), то количество возвращенных итераций равно 3.
Декодирование сокращенных сообщений TPC
Кодированные TPC укороченные входные сообщения декодируются с использованием заданных 2-D TPC кодовых пар. В строковом декодировании используется пара кода (N C - K C + S C, S C), а в столбцовом декодировании используется пара кода (N R - K R + S R, S R). Вход вектора должна быть (N R - K R + S R) × (N C- K C + S C). Для выполнения 2-D декодирования укороченных сообщений вектор-столбец входных LLR, составленный из укороченного сообщения и бит четности, упорядочен в (N R - K R + S R) -by- (N C - K C + S C) матрицу.
Декодер TPC обрабатывает полученные LLR укороченных сообщений, подобные кодам полной длины, за этими исключениями:
Укороченные битовые положения в принятом кодовом слове установлены на -1.
Алгоритм Chase не рассматривает укороченные битовые положения при выборе наименее надежных бит.
[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.
Указания и ограничения по применению:
Параметры TPC N
, K
, и S
должны быть постоянными значениями. Если значение, используемое для каждого из этих параметров, не меняется, можно назначить их по выражению или переменной.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.