Турбо декодер

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

  • Библиотека:
  • LTE HDL Toolbox / Выявление ошибок и Исправление

Описание

Блок Turbo Decoder реализует турбо декодер, требуемый TS 36.212 [1] стандарта LTE, и обеспечивает интерфейс и архитектуру, оптимизированную для аппаратного развертывания и генерации HDL-кода. Блок выполняет итерации более чем двух декодеров MAX. Можно задать количество итераций. Уровень кодирования является 1/3. Блок принимает закодированные биты как вектор 3 на 1 мягко закодированных значений, [S P1 P2]. В этом векторе S является систематическим битом, и P1 и P2 являются битами четности от этих двух энкодеров.

Этот блок использует демонстрационный интерфейс потоковой передачи с шиной для связанных управляющих сигналов. Этот интерфейс позволяет блоку действовать независимо от формата кадра и соединиться легко с другими блоками LTE HDL Toolbox™. Блок принимает и возвращает значение, представляющее одну выборку и шину, содержащую три управляющих сигнала. Эти сигналы указывают на валидность каждой выборки и контуры кадра. Чтобы преобразовать матрицу в демонстрационный поток и эти управляющие сигналы, используйте блок Frame To Samples или функцию ltehdlFramesToSamples. Для полного описания интерфейса смотрите Демонстрационный Интерфейс Потоковой передачи.

Блок может принять следующий кадр только после того, как это завершило декодирование предыдущего кадра. Необходимо оставить Iterations *2*HalfIterationLatency+BlockSize+4 неактивными циклами между входными кадрами. Задержка полуитерации описана в разделе Algorithms. Также можно использовать выходной сигнал ctrl.end, чтобы определить, когда блок готов к новому входу.

Эта форма волны показывает входной кадр 120 выборок (+ 4 бита хвоста) и 2 632 неактивных цикла между кадрами. Каждая входная выборка является вектором трех значений мягкого решения фиксированной точки. Ввод и вывод шины ctrl расширен, чтобы показать управляющие сигналы. start и end показывают контуры кадра, и valid квалифицирует выборки данных.

Порты

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

развернуть все

Введите выборку, заданную как трехэлементный целочисленный вектор. Значения представляют мягко закодированные вероятности. Если значение будет отрицательно, бит, более вероятно, будет 0. Если значение будет положительно, бит, более вероятно, будет 1. Первый элемент является последовательным битом, и другие два элемента являются битами четности. Блок ожидает входные кадры BlockSize + 12 выборок. Этот формат кадра включает биты хвоста в порядке, заданном TS 36.212 [1] стандарта LTE.

Для аппаратной реализации используйте фиксированную точку с двумя или тремя целочисленными битами и одним - четырьмя дробными битами. Внутренние типы данных выведены от этого типа данных, и более низкие типы точности могут привести к потере декодирования точности. Если тип входных данных имеет нулевые дробные биты или меньше чем два целочисленных бита, блок возвращает предупреждение. double и single поддерживаются для симуляции, но не для генерации HDL-кода.

Типы данных: fixdt(1,WL,FL) | single | double

Управляющие сигналы, сопровождающие демонстрационный поток, заданный как шина samplecontrol. Шина включает start, end и управляющие сигналы valid, которые указывают на контуры кадра и валидность выборок.

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

Размер блока турбокода, заданный как целое число. Это значение должно быть одним из этих 188 значений, заданных в стандарте LTE, от 40 до 6 144 в этих интервалах: [40:8:512 528:16:1024 1056:32:2048 2112:64:6144].

Зависимости

Этот порт появляется, когда вы устанавливаете Block size source на Input port.

Типы данных: single | double | uint16 | fixdt(0,13,0)

Вывод

развернуть все

Выведите выборку, возвращенную как бинарный скаляр. double и single поддерживаются для симуляции, но не для генерации HDL-кода.

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

Управляющие сигналы, сопровождающие демонстрационный поток, возвращенный как шина samplecontrol. Шина включает start, end и управляющие сигналы valid, которые указывают на контуры кадра и валидность выборок.

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

Параметры

развернуть все

Выберите, задаете ли вы размер блока с входным портом или вводите фиксированное значение в качестве параметра. Если вы выбираете Property, параметр Block size появляется. Если вы выбираете Input port, порт blockSize появляется.

Размер блока турбокода, заданный как целое число. Это значение должно быть одним из этих 188 значений, заданных в стандарте LTE, от 40 до 6 144 в этих интервалах: [40:8:512 528:16:1024 1056:32:2048 2112:64:6144]. Это значение указано для каждого кадра, когда ctrl.start = 1 (true).

Зависимости

Этот параметр появляется, когда вы устанавливаете Block size source на Property.

Сколько итераций декодирования MAX, чтобы выполнить, заданный как положительное целое число. Реализация декодера использует один декодер MAX с выходными данными каждой полуитерации, направленной назад к входу. Более высокое количество итерации увеличивает точность и добавляет задержку. Приблизительно после 15 итераций алгоритм не обеспечивает дальнейшую точность.

Алгоритмы

развернуть все

Блок реализует итеративный алгоритм декодирования с помощью одного декодера и одного interleaver.

Эта схема показывает концептуальный алгоритм для одной итерации. Несмотря на то, что схема показывает два декодера и три interleavers, блок на самом деле реализует алгоритм с помощью только одного декодера и одного interleaver. Декодер выполняет одну полуитерацию и чередует результаты. Затем вывод направляется назад к входу для следующей полуитерации. interleaver вычисляет индексы чередования из размера блока. Для получения дополнительной информации interleaver реализации, смотрите Турбо Энкодер.

Нечетные полуитерации вычисляют отношение правдоподобия из нечередованных битов (P1, S, и устраненные чередование результаты декодирования P2). Ровные полуитерации вычисляют отношение правдоподобия из чередованных битов (P2 и чередованные результаты P1 и S, декодирующего).

Блок декодера использует алгоритм BCJR, чтобы найти отношение правдоподобия конкретного бита [2].

L(uk)журнал(P(uk=+ 1 | y)P(uk=+ 1 | y))         =журнал(s+p(sk1=s',sk=s,y)/p(y)sp(sk1=s',sk=s,y)/p(y))

Вероятности могут также быть представлены с точки зрения текущих и будущих состояний:

p(s',s,y)=αk1(s')γk(s',s)βk(s)αk1(s')=P(s',y<k)γk(s',s)=P(yk,s | s')βk(s)=P(y<ks)

α вероятность представляет предыдущее состояние, β представляет вероятность текущего состояния, и ɣ представляет следующее состояние. Алгоритм вычисляет ɣ от входных значений. α и β вероятности вычисляются с помощью прямой и обратной рекурсии по возможным состояниям решетки, и также зависят от ɣ. Все вычисления сделаны в области log.

αk=αk1(s')γk(s',s)         βk1(s')=βk(s)γk(s',s)    

Начальные условия для α и β:

α0(s)={1,s=00,s0β0(s)={1,s=00,s0

Эта схема показывает декодер полуитерации и interleaver архитектуру. Начальная вероятность обнуляется.

В нормальной архитектуре BCJR алгоритм не может вычислить β, пока целый кадр не находится в памяти. Это должно выполнить полный кадр, вперед прослеживают, и затем полный кадр назад прослеживает, что означает, что задержка одной полуитерации является двумя длинами кадра. Необходимой памятью является BlockSize*NumStates*DataWidth. В этом случае NumStates равняется восьми от TS 36.212 [1] стандарта LTE.

Однако эта реализация декодера использует раздвижное окно, чтобы уменьшать необходимую память и задержку алгоритма [3]. Размер окна является 32 выборками, который является пять раз продолжительностью ограничения решетки 7. Задержка одной полуитерации:

(ceil(BlockSizeWinSize)+2)×WinSize+PipeDelay

Необходимая память с раздвижным окном 2*32*NumStates*DataWidth. Эти данные показывают, как β вычисление прослеживает и декодирует одно окно за один раз, чередуя вход между A и блоками вычисления B.

Ссылки

[1] 3GPP TS 36.212. "Мультиплексирование и кодирование канала". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group; Развитый Универсальный Наземный Радио-доступ (к E-UTRA). URL: http://www.3gpp.org.

[2] Bahl, L. R. Дж. Кок, Ф. Елинек и Дж. Рэвив. "Оптимальное Декодирование Линейных Кодов для Минимизации Коэффициента ошибок Символа". Транзакции IEEE на Теории информации. Vol 1T-20, март 1974, стр 284–287.

[3] Viterbi, Эндрю Дж. "Интуитивное выравнивание и упрощенное внедрение декодера MAP для сверточных кодов". Журнал IEEE на выбранных областях в коммуникациях. Издание 16, № 2, февраль 1998.

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

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

Блоки

Функции

Введенный в R2017b