exponenta event banner

Декодер Витерби

Декодировать сверточно закодированные данные с помощью алгоритма Витерби

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

  • Viterbi Decoder block

Описание

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

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

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

Вторая форма сигнала показывает три кадра в режиме завершенной работы. Вход - это неподписанные 4-битовые выборки, а блок использует решетку (7, [171 133 112]). Глубина отслеживания составляет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

Управляющий сигнал, указывающий, когда выборка из порта ввода данных является действительной. Если действительным входным портом является 1 (true), блок захватывает значения порта ввода данных. Если действительным входным портом является 0 (false), блок игнорирует входные выборки.

Зависимости

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

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

Нейтральные местоположения символов, определяемые как вектор столбца с двоичными значениями того же размера, что и вектор входных данных. Когда элемент стирания 1 (true), соответствующий элемент входных данных является депунктированным нейтральным значением, и декодер не обновляет метрику ветвления. Когда элемент стирания 0 (false), блок использует соответствующий элемент входных данных для обновления метрики ветвления. Для управления этим портом можно использовать блок Depuncturer.

Зависимости

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

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

Очистить внутреннее состояние, указанное как Boolean скаляр. При сбросе 1 (true), после одного цикла блок останавливает текущее вычисление и очищает внутренние метрики ветвей и состояний.

Зависимости

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

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

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

Зависимости

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

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

Продукция

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

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

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

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

Зависимости

Включите этот порт, установите режим работы в значение Continuous.

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

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

Зависимости

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

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

Параметры

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

Длина ограничения решетки, заданная как целое число в диапазоне [3, 9].

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

Выберите этот параметр для активизации порта стирания.

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

Конец поведения кадра, указанный как один из следующих режимов:

  • Continuous - Блок не очищает метрику внутреннего состояния. Входной действительный сигнал квалифицирует входные выборки.

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

    Примечание

    Для этого режима требуется минимальное пространство длиной ограничения - 1 цикл между кадрами.

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

Выберите этот параметр для активизации порта сброса. При сбросе 1 (true), после одного цикла блок останавливает текущее вычисление и очищает внутренние метрики ветвей и состояний.

Зависимости

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

Алгоритмы

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

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

  • Write (Wr): Сохранение информации о пути сохранения в памяти.

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

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

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

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

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

Ссылки

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

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

[3] Шунг, С.б., П.х. Сигел, Г. Унгербек и Х.К. Тапар. «Архитектуры VLSI для метрической нормализации в алгоритме Витерби». IEEE Международная конференция по коммуникациям, включая технические сессии Supercomm: том 4. 1726-728. Нью-Йорк, Нью-Йорк: IEEE, 1990.

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

.

См. также

Блоки

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