exponenta event banner

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

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

  • Библиотека:
  • Беспроводная панель инструментов HDL/обнаружение и исправление ошибок

  • LTE Turbo Decoder block

Описание

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

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

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

Этот сигнал показывает входной кадр из 120 выборок (+ 4 концевых бита) и 2632 циклов простоя между кадрами. Каждая входная выборка представляет собой вектор из трех фиксированных значений мягкого решения. Входные и выходные шины 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 управляющие сигналы, которые указывают границы кадра и достоверность выборок.

  • start - Указывает начало входного кадра.

  • end - Указывает конец входного кадра

  • valid - Указывает, что данные на порте входных данных являются допустимыми

Дополнительные сведения см. в разделе Пример шины управления.

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

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

Зависимости

Этот порт появляется при установке для параметра «» Источник размера блока «» значения Input port.

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

Продукция

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

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

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

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

  • start - Указывает начало выходного кадра.

  • end - Указывает конец выходного кадра

  • valid - Указывает, что данные порта выходных данных являются допустимыми

Дополнительные сведения см. в разделе Пример шины управления.

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

Параметры

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

Укажите размер блока с помощью входного порта или введите фиксированное значение в качестве параметра. При выборе Propertyпоявится параметр Размер блока (Block size). При выборе Input port, появится порт blockSize.

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

Зависимости

Этот параметр появляется при установке для параметра «Источник размера блока» значения Property.

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

Алгоритмы

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

Блок реализует алгоритм итеративного декодирования с использованием одного декодера и одного перемежителя.

На этой схеме показан концептуальный алгоритм для одной итерации. Хотя диаграмма показывает два декодера и три перемежителя, блок фактически реализует алгоритм, используя только один декодер и один перемежитель. Декодер выполняет одну полуитерацию и перемежает результаты. Затем выходные данные направляются обратно на вход для следующей полуитерации. Перемежитель вычисляет индексы перемежения из размера блока. Для получения подробной информации о реализации перемежителя см. турбокодер LTE.

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

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

L (uk) ≜log (P ( uk = + 1 | y) P (uk  =  +  1  | y)) = log (∑s+p (sk 1 = s ', sk = s, y )/p (y) ∑s−p (sk − 1 = s', sk = s, y )/p (y))

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

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

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

αk = αk 1 (s ') ⋅γk  ( s ' ,  s ) βk 1 (s ') = βk (s)     ⋅γk (s', s)

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

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

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

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

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

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

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

Ссылки

[1] 3GPP TS 36.212. «Мультиплексирование и канальное кодирование». Проект партнерства 3-го поколения; техническая спецификация на сеть радиодоступа группы; Усовершенствованный универсальный наземный радиодоступа (E-UTRA). URL: https://www.3gpp.org.

[2] Bahl, L.R., J. Cocke, F. Jelinek и J. Raviv. «Оптимальное декодирование линейных кодов для минимизации частоты ошибок символов». Транзакции IEEE по теории информации. Том 1T-20, март 1974, стр. 284-287.

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

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

.

См. также

Блоки

Функции

Представлен в R2017b