Декодер турбо кода продукта (TPC)
выполняет 2D TPC, декодирующий на входных логарифмических отношениях правдоподобия, decoded
= tpcdec(llr
,N
,K
)llr
, использование двух линейных блочных кодов задано длиной кодовой комбинации N
и передайте длину K
. Для описания 2D декодирования TPC смотрите, что Турбо Код продукта Декодирует.
выполняет 2D декодирование TPC и завершает работу рано, если расчетный синдром или проверка четности кода компонента оценивают, чтобы обнулить перед decoded
= tpcdec(llr
,N
,K
,S
,maxnumiter
,earlyterm
)maxnumiter
декодирование итераций. Использовать maxnumiter
и earlyterm
с сообщениями во всю длину задайте S
как пустой, [].
[
также возвращает фактическое количество декодирования итераций после выполнения 2D TPC, декодирующего использующий любой из предшествующих синтаксисов.decoded
,actualnumiter
] = tpcdec(___)
Декодируйте аппроксимированный выходной сигнал отношения логарифмической правдоподобности 16-QAM демодуляции.
Начните путем кодирования случайного битового вектора с помощью 2D турбо кодирования продукта (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 в сигнал. Демодулируйте сигнал, выводя аппроксимированный LLRs.
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.
Начните путем кодирования случайного битового вектора с помощью 2D турбо кодирования продукта (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 в сигнал. Демодулируйте сигнал и выведите аппроксимированный LLRs.
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.
Начните путем кодирования случайного битового вектора с помощью 2D турбо кодирования продукта (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 demapping.
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, смотрите, что Турбо Код продукта Декодирует. Для списка допустимых (N (i), K (i)) пары кода, смотрите Больше О.
Типы данных: double
K
— Передайте длинуПередайте длину в виде двухэлементного целочисленного вектора, [K R; K C]. Для сообщения во всю длину входной вектор-столбец, содержащий вход LLRs, располагается в матрицу R-by-KC K. K R представляет количество строк в матрице сообщения. K C представляет количество столбцов в матрице сообщения. Для получения дополнительной информации о K R и K C, смотрите, что Турбо Код продукта Декодирует. Для списка допустимых (N (i), K (i)) пары кода, смотрите Больше О.
Типы данных: double
S
— Сокращенная длина сообщенияСокращенная длина сообщения в виде двухэлементного целочисленного вектора, [S R; S C]. Для сокращенного сообщения входной вектор-столбец, содержащий вход LLRs, располагается в матрицу R-by-SC S. S R представляет количество строк в матрице. S C представляет количество столбцов в матрице. Для получения дополнительной информации о S R и S C, смотрите, что Турбо Код продукта Декодирует.
Когда вы задаете этот параметр, задаете N и векторы K для кодов TPC во всю длину, которые сокращены к (N (i) – K (i) + S (i), S (i)) коды.
Типы данных: double
maxnumiter
— Максимальное количество декодирования итерацийМаксимальное количество декодирования итераций в виде положительного целого числа.
Типы данных: double
earlyterm
— Включите раннее завершениеtrue
(значение по умолчанию) | false
Включите раннее завершение декодирования в виде логического. Когда earlyterm
true
декодирование завершает работу рано, если расчетный синдром или проверка четности кода компонента оценивают, чтобы обнулить перед maxnumiter
декодирование итераций.
Типы данных: double
decoded
— TPC декодируемое сообщениеactualnumiter
— Фактическое количество декодирования итерацийФактическое количество декодирования выполняемых итераций, возвратилось как положительное целое число.
Типы данных: double
Эта таблица приводит поддерживаемые пары кода компонента для строки (N R, K R) и столбец (N C, K C) параметры.
N R и K R представляют количество строк в матрице кода продукта и матрице сообщения, соответственно.
N C и K C представляют количество столбцов в матрице кода продукта и матрице сообщения, соответственно.
В каждом типе кода любые две пары кода компонента могут сформировать 2D код 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). Два или больше блочных кода компонента, такие как систематические линейные блочные коды, используются, чтобы создать TPCs. Декодер TPC достигает почти оптимального декодирования кодов продуктов с помощью Чейза, декодирующего и алгоритма Pyndiah, чтобы выполнить итеративный мягкий вход, мягкое выходное декодирование. Для подробного описания см. [1] и [2]. Этот декодер реализует итеративный мягкий вход, мягкий выход 2D декодирование кода продукта, как описано в [2], с помощью двух Линейных Блочных кодов. Декодер ожидает мягкие битные логарифмические отношения правдоподобия (LLRs), полученный из цифровой демодуляции как входной сигнал.
Примечание
Декодер TPC ожидает положительный биполярный сопоставленный вход, в частности –1 сопоставленный к 0 и +1 сопоставленный к 1. Выход от демодуляторов в Communications Toolbox™ является отрицательным биполярным отображением, в частности +1 сопоставленный к 0 и –1 сопоставленный к +1. Поэтому LLR выход от демодуляторов должен отрицаться, чтобы обеспечить положительный биполярный сопоставленный вход, ожидаемый декодером TPC.
Декодер TPC декодирует или или сокращенные коды во всю длину.
TPC декодирование сообщений во всю длину
Закодированные входные сигналы TPC во всю длину декодируются с помощью, задал 2D пары кода TPC. Построчное декодирование использует (N C, K C) пара кода и по столбцам декодирование использования (N R, K R) пара кода. Длиной входного вектора должен быть N R × N C. Чтобы выполнить 2D декодирование TPC, вектор-столбец входа LLRs, состоявшего из сообщения и битов четности, располагается в матрицу R-by-NC N.
Декодер TPC достигает почти оптимального декодирования кодов продуктов с помощью Чейза, декодирующего и алгоритма Pyndiah, чтобы выполнить итеративный мягкий вход, мягкое выходное декодирование. Чейз, декодирующий, формирует набор возможных кодовых комбинаций для каждой строки или столбца. Алгоритм Pyndiah вычисляет мягкую информацию, запрошенную для следующего шага декодирования.
Итеративный мягкий вход, мягкий Выходной декодер
Итеративный мягкий вход, мягкое выходное декодирование, как показано в блок-схеме, выполняет два шага декодирования для каждой итерации.
Мягкими входными параметрами для декодирования является R (m) = R + α (m) W (m).
Счетчик цикла итерации i постепенно увеличивается от i = 1 к конкретному количеству итераций.
m = 2
i 1
индекс шага декодирования.
R является полученной матрицей LLR.
R (m) является мягким входом для m th декодирующий шаг.
W (m) является входной информацией о значении внешних параметров для m th декодирующий шаг.
α (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
Если раннее завершение включено, проверка сходимости кода выполнена на трудном решении о мягком входе на каждом построчном и постолбцовом шаге декодирования. Раннее завершение может быть инициировано, или после сходятся построчное декодирование или после постолбцовое декодирование.
Код сходится если для всех строк или всех столбцов,
Синдром оценивает, чтобы обнулить в кодах (Коды Хемминга, Расширенные Коды Хемминга, коды BCH или Расширенные коды BCH).
Проверка четности оценена, чтобы обнулить в кодах с проверкой четности.
Количество, о котором сообщают, итераций оценивает к значению итерации, которое в настоящее время происходит. Например, если проверке сходимости кода удовлетворяют после построчного декодирования в третьей итерации (после того, как 2,5 декодирования продвигаются), затем количество возвращенной итерации равняется 3.
TPC декодирование сокращенных сообщений
Закодированные сокращенные входные сигналы TPC декодируются с помощью, задал 2D пары кода 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). Чтобы выполнить 2D декодирование TPC сокращенных сообщений, вектор-столбец входа LLRs, состоявшего из сокращенного сообщения и битов четности, располагается в (N R – K R + S R) (N C – K C + S C) матрица.
Декодер TPC обрабатывает полученное сокращенное сообщение LLRs, похожий на полные коды за этими исключениями:
Сокращенные позиции двоичного разряда в полученной кодовой комбинации установлены в –1.
Алгоритм Преследования не рассматривает сокращенных позиций двоичного разряда при выборе наименее надежных битов.
[1] Преследуйте, D. "Класс Алгоритмов для Декодирования Блочных кодов с информацией об Измерении Канала". Транзакции IEEE на Теории информации, Объем 18, Номер 1, январь 1972, стр 170–182.
[2] Pyndiah, R. M. "Почти оптимальное Декодирование Кодов продуктов: Блокируйте Турбокоды". Транзакции IEEE на Коммуникациях. Объем 46, Номер 8, август 1998, стр 1003–1010.
Указания и ограничения по применению:
Параметры TPC N
K
, и S
должны быть постоянные значения. Если значение, используемое для каждого из этих параметров, не изменяется, то можно присвоить их по выражению или переменной.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.