Viterbi Decoder

Декодируйте convolutionally закодированные данные с помощью алгоритма Viterbi

  • Библиотека:
  • LTE HDL Toolbox / Общие Коммуникации

Описание

Блок Viterbi Decoder декодирует convolutionally закодированные данные с помощью основанной на RAM traceback реализации. Декодирование Viterbi широко используется в TS 36.212 [1] стандарта LTE и других приложениях прямого исправления ошибок (FEC), таких как беспроводные сети (802.11a/b/g/n/ac), цифровая спутниковая связь, цифровое видео широковещательно передается (DVB), IEEE 802.16 и HiperLAN. Чтобы поддержать любой из этих стандартов, блок принимает коды свертки с продолжительностями ограничения 3 - 9, уровни кода 1/2 к 1/7, и обеспечивает непрерывные, отключенные, и усеченные режимы. Блок обеспечивает архитектуру и интерфейс, подходящий для генерации HDL-кода.

Декодирование поддержек блока проколотых кодов путем обеспечения дополнительного входного порта erasure. Можно использовать блок Depuncturer, чтобы вставить нейтральные значения в проколотый демонстрационный поток и сгенерировать сигнал erasure.

Блок Viterbi Decoder принимает входные выборки как двоичные значения трудного решения или логарифмические отношения правдоподобия (LLR) мягкого решения. Каждая выборка является вектор-столбцом, длина которого зависит от схемы кодирования. Первая форма волны показывает непрерывный режим работы с входными выборками 4-битных данных со знаком, с помощью параметров блоков по умолчанию. Traceback depth является 32. Блок возвращает первую декодируемую выборку выходных данных после 148 тактов. Задержка декодирования 4×Traceback depth + Constraint length + 13 допустимых входных циклов.

Вторая форма волны показывает три системы координат в отключенном режиме работы. Вход является 4-битными выборками без знака, и блок использует решетку (7, [171 133 112]). Traceback depth является 32. Ввод и вывод шины ctrl расширен, чтобы показать их три управляющих сигнала. Задержка от каждого входа ctrl.start к выходу ctrl.start также 148 тактов.

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

Порты

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

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

Введите выборку, заданную как n-by-1 вектор-столбец, где n является длиной полинома генератора. Блок выполняет декодирование мягкого решения, когда тип входных данных является фиксированной точкой или декодированием целочисленного и трудного решения, когда типом входных данных является Boolean или fixdt(0,1,0). Блок выполняет неквантованное декодирование мягкого решения для single и double типы данных, но эти типы данных не поддержаны для генерации HDL-кода.

Поскольку мягкое решение ввело выборки, блок поддерживает размеры слова до 16 битов. Для генерации HDL-кода размер слова больше чем 8 битов не рекомендуется из-за использования аппаратного ресурса. Входные данные должны иметь дробную длину 0.

Типы данных: int8 | int16 | uint8 | uint16 | Boolean | fixdt(0,1,0) | fixdt(S,WL,0) | single | double

Управляющий сигнал, который указывает, когда выборка от входного порта data допустима. Когда входным портом valid является 1 TRUE), блок получает значения входного порта data. Когда входным портом valid является 0 ложь), блок игнорирует входные выборки.

Зависимости

Чтобы включить этот порт, установите Operation mode на Continuous.

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

Нейтральные местоположения символа, заданные как вектор-столбец двоичных значений тот же размер как вектор входа data. Когда элементом erasure является 1 TRUE), соответствующий элемент входа data является depunctured нейтральным значением, и декодер не обновляет метрику ветви. Когда элементом erasure является 0 ложь), блок использует соответствующий элемент входа data, чтобы обновить метрику ветви. Можно использовать блок Depuncturer, чтобы управлять этим портом.

Зависимости

Чтобы включить этот порт, выберите Enable erasure input port.

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

Очистите внутреннее состояние, заданное как Boolean скаляр. Когда reset является 1 TRUE), после одного цикла блок останавливает текущее вычисление и очищает внутреннюю ветвь и метрики состояния.

Зависимости

Чтобы включить этот порт, установите Operation mode на Continuous и выберите Enable reset input port.

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

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

Зависимости

Чтобы включить этот порт, установите Operation mode на Terminated или Truncated.

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

Вывод

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

Выведите выборку, возвращенную как скаляр с совпадающим типом данных как входные выборки.

Типы данных: int8 | int16 | uint8 | uint16 | Boolean | fixdt(0,1,0) | fixdt(S,WL,0) | single | double

Управляющий сигнал, который указывает, когда выборка от выходного порта data допустима. Блок устанавливает порт valid на 1 TRUE) когда существует допустимая выборка на порте выхода data.

Зависимости

Tho включают этот порт, устанавливают Operation mode на Continuous.

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

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

Зависимости

Чтобы включить этот порт, установите Operation mode на Terminated или Truncated.

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

Параметры

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

Продолжительность ограничения решетки, заданная как целое число в области значений [3, 9].

Полином генерации кода, заданный как 1 n вектором восьмеричных значений, где n является длиной полинома. Блок принимает полиномы от 2 до 7 элементов долго.

Выберите этот параметр, чтобы включить порт erasure.

Количество ветвей решетки раньше создавало каждый traceback путь, заданный как целое число. Блок поддерживает traceback глубину в области значений [3, 128]. Для непроколотых выборок рекомендуемая глубина 5×constraintLength. Для проколотых выборок рекомендуемая глубина 10×constraintLength. Эти значения точность декодирования баланса с используемым объемом памяти.

Конец поведения системы координат, заданного как один из этих режимов:

  • Continuous – Блок не очищает метрику внутреннего состояния. Сигнал входа valid квалифицирует входные выборки.

  • Truncated – Блок сбрасывает метрики состояния после каждой системы координат, и traceback путь запускается в состоянии с лучшей метрики и концов во все-нулевом состоянии. Шина входа ctrl квалифицирует входные выборки и отмечает контуры системы координат.

    Примечание

    Этот режим требует минимального пространства Constraint length –1 цикл между системами координат.

  • Terminated – Блок сбрасывает метрики состояния после каждой системы координат, и traceback путь всегда запускается и заканчивается во все-нулевом состоянии. Шина входа ctrl квалифицирует входные выборки и отмечает контуры системы координат.

Выберите этот параметр, чтобы включить порт reset. Когда reset является 1 TRUE), после одного цикла блок останавливает текущее вычисление и очищает внутреннюю ветвь и метрики состояния.

Зависимости

Чтобы включить этот параметр, установите Operation mode на Continuous.

Алгоритмы

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

Блок Viterbi Decoder реализует основанный на RAM traceback использование K - указатель нечетный алгоритм [2]. Параметр K является количеством указателей чтения, требуемых в алгоритме. Эта реализация имеет значение K два, и доступы три памяти с помощью двух чтений и указателей записи. Три типа операций:

  • Запишите (Wr): Сохраните информацию пути оставшегося в живых в памяти.

  • Traceback (Тбайт): Считайте информации пути оставшегося в живых из памяти и вычислите предыдущее состояние на основе ветви оставшегося в живых и текущего состояния. Самое раннее состояние, прослеженное этим процессом, затем используется в качестве начального состояния, чтобы декодировать предыдущий блок памяти данных.

  • Декодирование (декабря): Считайте информации пути оставшегося в живых из памяти и декодируйте вход.

Каждой этими тремя памятью является Traceback depth (tbd) размер. K - алгоритм указателя берет 4×Traceback depth циклы, чтобы декодировать данные.

Схема показывает, как эти три операции используют эти три сегмента памяти. Для двух множителей Traceback depth напишите метрики оставшегося в живых в прямом направлении к Mem#1 и Mem#2. Затем продолжая писать в Mem#3, traceback от Mem#2, чтобы найти минимальный индекс. Используйте тот индекс в качестве указателя на traceback от Mem#1 и получите декодируемое значение. После того, как декодируемое значение читается, блок пишет новый входной путь оставшегося в живых к тому же местоположению. Эта запись запускает следующий цикл декодирования.

В алгоритме Viterbi выдерживает сравнение добавление - логика может вызвать метрическое переполнение состояния. Это переполнение ухудшает производительность декодера. Modulo normalization используется, чтобы смягчить последствия переполнения [3]. Блок реализует арифметику в остаточных классах с помощью дополнительных сумматоров и вычитающих устройств two как показано в схеме. Вычитающее устройство используется вместо компаратора. Переполнение обнаруживается путем проверки старшего значащего бита (MSB) (m1-m2), где m1 m2 является метриками нормализации. Когда переполнение обнаруживается, m1 и m2 вводят перенесенное значение.

Ссылки

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

[2] Horwitz, M. и Р. Браун. "Обобщенный метод проектирования для управления памятью оставшегося в живых Traceback в декодерах Витерби". Продолжения 1 997 южноафриканских симпозиумов по коммуникациям и обработке сигналов: 63-68. Пискатауэй, NJ: IEEE, 1997.

[3] Shung, C.b., P.h. Зигель, Г. Анджербоек и H.k. Thapar. "Архитектура VLSI для Метрической Нормализации в алгоритме Viterbi". Международная конференция IEEE по вопросам Коммуникаций, Включая Суперкомма Текникэла Сешнза: vol 4. 1726-728. Нью-Йорк, Нью-Йорк: IEEE, 1990.

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

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

Введенный в R2018b