Viterbi Decoder

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

Библиотека

Сверточная сублибрария Выявления ошибок и Коррекции

  • Viterbi Decoder block

Описание

Блок Viterbi Decoder декодирует входные символы, чтобы создать двоичные выходные символы. Этот блок может обрабатывать несколько символов за раз для более высокой эффективности.

Этот блок может выводить последовательности, которые варьируются в длине во время симуляции. Для получения дополнительной информации о последовательностях, которые варьируются в длине или сигналах переменного размера, смотрите Основы сигнала переменного размера (Simulink).

Входной и выходной размеры

Если сверточный код использует алфавит 2n возможные символы, вход вектора этого блока является L * n для некоторых положительных целочисленных L. Точно так же, если декодированные данные используют алфавит 2k возможные выходные символы, длина выходного вектора этого блока L * k.

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

Для получения дополнительной информации о типах данных, которые поддерживает каждый порт блока см. Таблицу типов Поддерживаемые данные на этой странице.

Входные значения и типы принятия решений

Записи входного вектора являются биполярными, двоичными или целочисленными данными, в зависимости от параметра Decision type.

Тип решения ПараметрВозможные значения во входе декодераИнтерпретация значенийВычисление метрики ветви

Unquantized

Действительные числа

Положительный реал: логический нуль

Отрицательный реальный: логический

Евклидово расстояние

Hard Decision

0, 1

0: логический нуль

1: логический

Расстояние Хемминга

Soft Decision

Целые числа от 0 до 2b-1, где b - Number of soft decision bits параметр.

0: наиболее уверенное решение для логического нуля

2b-1: наиболее уверенное решение для логического

Другие значения представляют собой менее уверенные в себе решения.

Расстояние Хемминга

Чтобы более четко проиллюстрировать ситуацию мягкого решения, в следующей таблице перечислены интерпретации значений для 3-битных мягких решений.

Входное значениеИнтерпретация
0 Самый уверенный нуль
1 Второй по уверенности нуль
2 Третий по уверенности нуль
3 Наименее уверенный нуль
4 Наименее уверенный
5 Третий по уверенности
6 Второй по уверенности
7 Самый уверенный

Режимы работы для входов

Блок декодера Viterbi имеет три возможных способа перехода между последовательными входными кадрами. Параметр Operation mode управляет тем, какой метод использует блок:

  • В Continuous mode, блок сохраняет свою внутреннюю метрику состояния в конце каждого входа для использования со следующей системой координат. Каждый путь следования обрабатывается независимо.

  • В Truncated mode, блок обрабатывает каждый вход независимо. Путь трассировки начинается в состоянии с лучшей метрики и всегда заканчивается в состоянии всех нулей. Этот режим подходит, когда соответствующий блок Convolutional Encoder имеет Operation mode, установленное на Truncated (reset every frame).

  • В Terminated mode, блок обрабатывает каждый вход независимо, и путь трассировки всегда начинается и заканчивается в состоянии «все нули». Этот режим подходит, когда незакодированный сигнал сообщения (то есть вход в соответствующий блок Convolutional Энкодера) имеет достаточное количество нулей в конце каждого входа, чтобы заполнить все регистры памяти feedforward энкодера. Если энкодер имеет k входные потоки и вектор длины ограничений constr (используя полиномиальное описание), «достаточное» означает k*max(constr-1). Для энкодеров обратной связи этот режим подходит, если соответствующий блок Convolutional Encoder Operation mode установлен на Terminate trellis by appending bits.

Примечание

Когда этот блок выводит последовательности, которые варьируются в длине во время симуляции, и вы устанавливаете Operation mode равной Truncated или Terminatedсостояние блока сбрасывается при каждом входном временном шаге.

Используйте Continuous режим, когда входной сигнал содержит только один символ.

Порт сброса

Порт сброса может использоваться только, когда параметр Operation mode установлен в Continuous. Выбор Enable reset input port дает блоку дополнительный входной порт, обозначенный Rst. Когда Rst вход ненулевый, декодер возвращается в свое начальное состояние путем конфигурирования его внутренней памяти следующим образом:

  • Устанавливает метрику состояния «все нули» в нуль.

  • Устанавливает все другие метрики состояния на максимальное значение.

  • Устанавливает память трассировки в нуль.

Использование порта сброса на этом блоке аналогично установке Operation mode в блоке Convolutional Encoder на Reset on nonzero input via port.

Порт сброса поддерживает double или boolean набранные сигналы.

Схема

Потока сигналов с фиксированной точкой

В алгоритме декодирования Viterbi есть три основных компонента. Они являются метрическими расчетами ветви (BMC), add-compare и select (ACS) и декодированием traceback (TBD). Следующая схема иллюстрирует поток сигналов для кода скорости k/n.

Как пример BMC-схемы, скорость 1/2, nsdec = 3 потоки сигналов была бы следующей.

WL=nsdec+n1n=2WL=4

Компонент ACS в целом проиллюстрирован как показано на следующей схеме.

Где WL2 задается пользователем в маске.

На приведенных выше блок-схемах inNT, bMetNT, stMetNT и outNT numerictype Объекты (Fixed-Point Designer) и bMetFIMATH и stMetFIMATH fimath (Fixed-Point Designer) объекты.

Примеры пунктирного шаблона

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

Примеры декодирования с фиксированной точкой Viterbi

Выполняйте декодирование Viterbi с жестким решением с фиксированной точкой и выполняйте примеры декодирования Viterbi с мягкой точкой с фиксированной точкой, конфигурируйте блок декодера Viterbi, чтобы использовать обработку с фиксированной точкой для сверточного декодирования с твердой и мягкой решаемостью.

Примеры подсвечивают атрибуты моделирования с фиксированной точкой декодера Viterbi, используя привычное размещение.

Обзор симуляций

Эти две симуляции имеют сходную структуру и имеют большинство общих параметров. Источник данных производит случайную двоичную последовательность, которая сверточно кодируется, модулируется BPSK и передается через канал AWGN.

Сверточный энкодер сконфигурирован как кодер скорости 1/2. На каждые 2 бита энкодер добавляет еще 2 избыточных бита. Чтобы учесть это и добавить правильное количество шума, параметр Eb/No (dB) блока AWGN в эффект раз уменьшается путем вычитания 10 * log10 (2).

Для случая с жестким решением демодулятор BPSK вырабатывает жесткие решения в приемнике, которые передаются на декодер.

Для случая мягкого решения демодулятор BPSK вырабатывает мягкие решения в приемнике, используя коэффициент логарифмической правдоподобности. Эти мягкие выходы квантуются и передаются в декодер.

После декодирования симуляции сравнивает принятые декодированные символы с исходными переданными символами в порядок для вычисления частоты битовой ошибки. Симуляция заканчивается после обработки 100 битовых ошибок или 1e6 бит, в зависимости от того, что наступит раньше.

Моделирование с фиксированной точкой

Моделирование с фиксированной точкой позволяет проводить симуляции bit-true, которые учитывают факторы аппаратной реализации и динамическую область значений данных/параметров. Для примера, если целевой компьютер является микропроцессором DSP, некоторые из возможных размеров слова составляют 8, 16 или 32 бита, в то время как если целевой компьютер является ASIC или FPGA, может быть больше гибкости в выборе размера слова.

Чтобы включить декодирование Viterbi с фиксированной точкой, вход блока должен быть типа ufix1 (беззнаковое целое число размера слова 1) для жестких решений. На основе этого входа (0 или 1) метрики внутренней ветви вычисляются с использованием беззнакового целого числа размера слова = (количество выхода бит), заданное структурой шпалеры (что равняется 2 для примера жесткого решения).

Для мягких решений вход блока должен быть типа ufixN (беззнаковое целое число размера слова N), где N - количество бит мягкого решения, чтобы включить декодирование с фиксированной точкой. Входы блока должны быть целыми числами в области значений от 0 до 2N-1. Метрики внутренней ветви вычисляются с использованием беззнакового целого числа размера слова = (N + число выхода биты-1), как задано структурой шпалеры (что равняется 4 для примера мягкого решения).

Значение State metric word length задается пользователем и обычно должно быть больше, чем уже вычисленная метрика размера слова ветви. Можно настроить это как наиболее подходящее значение (на основе оборудования и/или факторов данных) путем просмотра записанных данных для системы.

Включите логгирование, выбрав Apps > Fixed-Point Tool. В графическом интерфейсе пользователя установки фиксированной точки установите Fixed-point instruments mode значение Minimums, maximums and overflows, и перезапустите симуляцию. Если вы видите переполнения, это означает, что данные не помещались в выбранном контейнере. Можно либо увеличить размер слова (если оно разрешено вашим оборудованием), либо попробовать масштабировать данные перед их обработкой. На основе минимальных и максимальных значений данных можно также определить, имеет ли выбранный контейнер соответствующий размер.

Попробуйте запустить симуляции с различными значениями State metric word length, чтобы получить представление о его эффекте на алгоритм. Вы должны иметь возможность сузить параметр до подходящего значения, которое не оказывает неблагоприятного эффекта на результаты BER.

Сравнения с данными двойной точности

Чтобы запустить ту же модель с данными двойной точности, Выберите Apps > Fixed-Point Tool. В графическом интерфейсе пользователя Fixed-Point Tool выберите Data type override для Double. Этот выбор переопределяет все настройки типа данных во всех блоках, чтобы использовать двойную точность. Для блока Viterbi Decoder, так как Output type было установлено на Boolean, этот параметр также должен быть установлен в double.

При симуляции модели обратите внимание, что результаты BER с двойной точностью и фиксированной точкой одинаковы. Они те же самые, потому что параметры с фиксированной точкой для модели были выбраны, чтобы избежать любой потери точности, но при этом являются наиболее эффективными.

Сравнения между жестким и мягким декодированием решений

Две модели настроены на запуск из BERTool, чтобы сгенерировать кривую симуляцию, которая сравнивает эффективность BER для декодирования с твердым решением и мягким решением.

Чтобы сгенерировать результаты симуляции для выполнения декодирования Viterbi жесткого решения с фиксированной точкой, выполните следующее:

  1. Откройте пример декодирования Viterbi решения с фиксированной точкой, чтобы получить модель simulink по пути.

  2. Тип bertool в командной строке MATLAB.

  3. Перейдите к панели Monte Carlo.

  4. Установите Eb/No range равным 2:5.

  5. Установите Simulation model равным cm_viterbi_harddec_fixpt. Убедитесь, что модель находится на пути.

  6. Установите BER variable name равным BER.

  7. Установите Number of errors равным 100и Number of bits для 1e6.

  8. Нажмите Run, и создается график.

Чтобы сгенерировать результаты симуляции для выполнения декодирования Viterbi мягкого решения с фиксированной точкой, откройте пример, чтобы получить модель simulink на пути, измените Simulation model на cm_viterbi_softdec_fixpt, и нажмите Run.

Заметьте, что, как ожидалось, 3-битное декодирование с мягким решением лучше, чем декодирование с жестким решением, примерно до мелодии 1,7 дБ, а не 2 дБ, как обычно цитируется. Различие ожидаемых результатов может быть объяснено несовершенным квантованием мягких выходных параметров от демодулятора.

Параметры

Trellis structure

MATLAB® структура, которая содержит описание решетки сверточного энкодера. Используйте то же значение здесь и в соответствующем блоке Convolutional Encoder.

Punctured code

Установите этот флажок, чтобы задать проколотый входной код. Появится поле Punctured code.

Puncture vector

Вектор постоянного шаблона, используемый в передатчике (энкодере). Вектор прокола является шаблоном 1s и 0с. The 0s указывает проколотые биты. При выборе Punctured code появляется Punctured vector поле.

Enable erasures input port

Когда вы устанавливаете этот флажок, декодер открывает вход порт, помеченный Era. Через этот порт можно задать векторный шаблон стирания 1s и 0s, где 1s указывает стертые биты.

Для этих стираний во входящем потоке данных декодер не обновляет метрику ветви. Ширина и шаги расчета портов стирания и входных данных должны быть одинаковыми. Входной порт стирания может быть типа данных double или Boolean.

Decision type

Задает использование Unquantized, Hard Decision, или Soft Decision для вычисления метрики ветви.

  • Unquantized решение использует Евклидово расстояние, чтобы вычислить метрики ветви.

  • Soft Decision и Hard Decision используйте Расстояние Хемминга, чтобы вычислить метрики ветви, где Number of soft decision bits равен 1.

Number of soft decision bits

Количество бит мягкого решения, чтобы представлять каждый вход. Это поле активно только, когда Decision type установлено на Soft Decision.

Error if quantized input values are out of range

Установите этот флажок, чтобы выдать ошибку, когда квантованные входные значения находятся вне области значений. Этот флажок активен, только если для Decision type задано значение Soft Decision или Hard Decision.

Traceback depth

Количество ветвей шпалеры для построения каждого пути следования.

Operation mode

Метод перехода между последовательными входными кадрами: Continuous, Terminated, и Truncated.

Примечание

Когда этот блок выводит последовательности, которые варьируются в длине во время симуляции, и вы устанавливаете Operation mode равной Truncated или Terminatedсостояние блока сбрасывается при каждом входном временном шаге.

Enable reset input port

Когда вы устанавливаете этот флажок, декодер открывает вход порт, помеченный Rst. Предоставление ненулевого входного значения этому порту заставляет блок устанавливать свою внутреннюю память в начальное состояние перед обработкой входных данных.

Delay reset action to next time step

Когда вы выбираете эту опцию, блок Viterbi Decoder сбрасывается после декодирования закодированных данных. Эта опция доступна только, когда вы задаете Operation mode Continuous и выберите Enable reset input port. Эта опция необходимо включить для поддержки HDL.

Output data type

Тип данных выходного сигнала может быть double, single, boolean, int8, uint8, int16, uint16, int32, uint32, или установить на 'Inherit via internal rule' или 'Smallest unsigned integer'.

Когда установлено значение 'Smallest unsigned integer'тип выходных данных выбирается на основе настроек, используемых в панели Hardware Implementation диалогового окна Параметры конфигурации модели. Если ASIC/FPGA выбран на панели Hardware Implementation, тип выходных данных ufix(1). Для всех других вариантов выбора это беззнаковое целое число с наименьшей заданной длиной слова, соответствующей значению char (например uint8).

Когда установлено значение 'Inherit via internal rule' (настройка по умолчанию), блок выбирает двухтипные выходы для двойных входов, однотипные выходы для одинарных входов и ведет себя аналогично 'Smallest unsigned integer' опция для всех других типизированных входов.

Поддерживаемые типы данных

ПортПоддерживаемые типы данных

Вход

  • Плавающая точка двойной точности

  • Плавающая точка с одной точностью

  • Логическое значение для Hard decision способ

  • 8-, 16- и 32-битные целые числа со знаком (для Hard decision и Soft decision режимы)

  • 8-, 16- и 32-битные беззнаковые целые числа (для Hard decision и Soft decision режимы)

  • ufix (n), где n представляет Number of soft decision bits

Выход

  • Плавающая точка двойной точности

  • Плавающая точка с одной точностью

  • Булев

  • 8-, 16- и 32-битные целые числа со знаком

  • 8-, 16- и 32-битные беззнаковые целые числа

  • ufix (1) для ASIC/FPGA способ

Ссылки

[1] Clark, George C., and J. Bibb Cain. Кодирование с исправлением ошибок для цифровых коммуникаций. Приложения теории связи. Нью-Йорк: Пленум Пресс, 1981.

[2] Гитлин, Ричард Д., Иеремия Ф. Хейс и Стивен Б. Вайнштейн. Принципы передачи данных. Приложения теории связи. Нью-Йорк: Пленум Пресс, 1992.

[3] Хеллер, Дж., и И. Джейкобс. Viterbi Decoding for Satellite and Space Communication (неопр.) (недоступная ссылка). Транзакции IEEE по коммуникационным технологиям 19, № 5 (октябрь 1971 года): 835-48. https://doi.org/10.1109/TCOM.1971.1090711.

[4] Ясуда, Я., К. Касики, и Я. Хирата. «Высокоскоростные проколотые сверточные коды для мягкого декодирования Viterbi». Транзакции IEEE по коммуникациям 32, № 3 (март 1984 года): 315-19. https://doi.org/10.1109/TCOM.1984.1096047.

[5] Haccoun, D., and G. Begin. «Высокоскоростные прокалываемые сверточные коды для Viterbi и последовательного декодирования». Транзакции IEEE по сообщениям 37, № 11 (ноябрь 1989 года): 1113-25. https://doi.org/10.1109/26.46505.

[6] Begin, G., D. Haccoun, and C. Paquin. «Дальнейшие результаты высокоскоростных прокалываемых сверточных кодов для Viterbi и последовательного декодирования». Транзакции IEEE по коммуникациям 38, № 11 (ноябрь 1990 года): 1922-28. https://doi.org/10.1109/26.61470.

[7] Moision, B. «Правило глубины усечения большого пальца для сверточных кодов». В семинаре по теории информации и применениям (27 января 2008-February 1 2008, Сан-Диего, Калифорния), 555-557. Нью-Йорк: IEEE, 2008.

Подробнее о

расширить все

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ Simulink ®

.
Представлено до R2006a