Viterbi Decoder

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

  • Библиотека:
  • Wireless HDL Toolbox / Выявление ошибок и Коррекция

  • Viterbi Decoder block

Описание

Блок 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 или whdlFramesToSamples функция. Для полного описания демонстрационного интерфейса потоковой передачи смотрите Демонстрационный Интерфейс Потоковой передачи.

Порты

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

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

Введите выборку в виде 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