Декодируйте convolutionally закодированные данные с помощью алгоритма Viterbi
Сверточная подбиблиотека Выявления ошибок и Коррекции
Блок Viterbi Decoder декодирует вводимые символы, чтобы произвести символы двоичного выхода. Этот блок может обработать несколько символов за один раз для более быстрой эффективности.
Этот блок может вывести последовательности, которые варьируются по длине в процессе моделирования. Для получения дополнительной информации о последовательностях, которые варьируются по длине или сигналам переменного размера, смотрите Основы Сигнала Переменного Размера (Simulink).
Если сверточный код использует алфавит 2n возможные символы, длина входного вектора этого блока является L*n для некоторого положительного целочисленного L. Точно так же, если декодируемые данные используют алфавит 2k возможные выходные символы, длина выходного вектора этого блока является L*k.
Этот блок принимает на вход сигнал в виде вектора - столбца или скалярной величины с любым положительным целочисленным значением для L. Для входных параметров переменного размера L может варьироваться в процессе моделирования. Операцией блока управляет параметр режима работы.
Для получения информации о типах данных, которые поддерживает каждый порт блока см. таблицу Supported Data Types на этой странице.
Записи входного вектора являются или биполярными, бинарными, или целочисленными данными, в зависимости от параметра Decision type.
Параметр типа решения | Возможные записи во входе декодера | Интерпретация значений | Метрическое вычисление ветви |
---|---|---|---|
| Вещественные числа | Положительный действительный: логический нуль Отрицательный действительный: логическая единица | Евклидово расстояние |
| 0, 1 | 0: логический нуль 1: логическая единица | Расстояние Хемминга |
| Целые числа между 0 и 2b- 1, где b является параметром Number of soft decision bits. | 0: самое уверенное решение для логического нуля 2b- 1: самое уверенное решение для логической единицы Другие значения представляют менее уверенные решения. | Расстояние Хемминга |
Чтобы проиллюстрировать мягкую ситуацию с решением более явным образом, следующая таблица приводит интерпретации значений для 3-битных мягких решений.
Входное значение | Интерпретация |
---|---|
0 | Самый уверенный нуль |
1 | Второй самый уверенный нуль |
2 | Третий самый большой уверенный нуль |
3 | Наименее уверенный нуль |
4 | Наименее уверенный |
5 | Третий самый большой уверенный |
6 | Второй самый уверенный |
7 | Самый уверенный |
Блок Декодера Витерби имеет три возможных метода для перехода между последовательными входными кадрами. Средства управления параметром Operation mode, который метод использование блока:
В Continuous
режим, блок сохраняет свою метрику внутреннего состояния в конце каждого входа для использования со следующей системой координат. Каждый traceback путь обработан независимо.
В Truncated
режим, блок обрабатывает каждый вход независимо. traceback путь запускается в состоянии с лучшей метрики и всегда заканчивается во все-нулевом состоянии. Этот режим является соответствующим, когда соответствующему блоку Convolutional Encoder установили его Operation mode на Truncated (reset every frame)
.
В Terminated
режим, блок всегда обрабатывает каждый вход независимо и traceback путь начала и концы во все-нулевом состоянии. Этот режим является соответствующим, когда незакодированный сигнал сообщения (то есть, вход с соответствующим блоком Convolutional Encoder) имеет достаточно нулей в конце каждого входа, чтобы заполнить все регистры памяти энкодера прямого распространения. Если энкодер имеет 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
вход является ненулевым, декодер возвращается к своему начальному состоянию путем конфигурирования его внутренней памяти можно следующим образом:
Обнуляет все-нули, утверждают метрику.
Наборы все другие метрики состояния к максимальному значению.
Обнуляет traceback память.
Используя порт сброса на этом блоке походит на установку Operation mode в блоке Convolutional Encoder к Reset on nonzero input via port
.
Порт сброса поддерживает double
или boolean
введенные сигналы.
Существует три основных компонента к Viterbi, декодирующему алгоритм. Они - метрический расчет ветви (BMC), добавляют - сравнивают и выбирают (ACS) и traceback, декодирующий (TBD). Следующая схема иллюстрирует поток сигналов для k/n кода уровня.
Как пример схемы BMC, 1/2 уровня, nsdec = 3 потока сигналов были бы следующие.
Компонент ACS обычно иллюстрируется как показано в следующей схеме.
Где WL2
задан на маске пользователем.
В блок-схемах выше, inNT, bMetNT, stMetNT, и outNT является numerictype
(Fixed-Point Designer) объекты, и bMetFIMATH и stMetFIMATH, является fimath (Fixed-Point Designer)
объекты.
Для некоторых обычно используемых шаблонов прокола для определенных уровней и полиномов, смотрите последние три ссылки.
Выполнять Трудное решение Фиксированной точки Декодирование Viterbi и Выполняет Фиксированную точку Мягкое Решение Viterbi Декодирование примеров, конфигурирует блок Декодера Витерби, чтобы использовать обработку фиксированной точки для твердого - и мягкое решение сверточное декодирование.
Примеры подсвечивают атрибуты моделирования фиксированной точки Декодера Витерби, с помощью знакомого размещения.
Эти две симуляции имеют подобную структуру и есть больше всего общие параметры. Источник данных производит случайную двоичную последовательность, которая convolutionally закодирована, BPSK, модулируемый, и прошла через канал AWGN.
Сверточный энкодер сконфигурирован как уровень 1/2 энкодер. Для каждых 2 битов энкодер добавляет еще 2 избыточных бита. Чтобы вместить это и добавить правильное количество шума, параметр Eb/No (dB) блока AWGN в действительности разделен на два путем вычитания 10*log10 (2).
Для случая трудного решения демодулятор BPSK производит трудные решения в приемнике, которые передаются на декодер.
Для случая мягкого решения демодулятор BPSK производит мягкие решения, в приемнике, с помощью отношения логарифмической правдоподобности. Эти мягкие выходные параметры 3-битные квантованный и переданный на декодер.
После декодирования симуляция сравнивает полученные декодируемые символы с исходными переданными символами для того, чтобы вычислить частоту ошибок по битам. Концы симуляции после обработки 100 битовых ошибок или 1e6 биты, какой бы ни на первом месте.
Моделирование фиксированной точки включает битно-истинные симуляции, которые учитывают факторы аппаратной реализации и динамический диапазон данных/параметров. Например, если целевой компьютер является микропроцессором 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
, этот параметр должен также быть установлен, чтобы удвоиться.
После симуляции модели обратите внимание, что результатами BER и фиксированной точки с двойной точностью является то же самое. Они - то же самое, потому что параметры фиксированной точки для модели были выбраны, чтобы избежать любой потери точности все еще будучи самыми эффективными.
Эти две модели настраиваются, чтобы запуститься из BERTool, чтобы сгенерировать кривую симуляции, которая сравнивает эффективность BER для трудного решения по сравнению с декодированием мягкого решения.
Чтобы сгенерировать результаты симуляции для Выполняют Трудное решение Фиксированной точки Декодирование Viterbi, сделайте следующее:
Откройте Выполнять Трудное решение Фиксированной точки Viterbi Декодирование примера, чтобы получить simulink модель на пути.
Введите bertool
в командной строке MATLAB.
Перейдите к панели Monte Carlo.
Установите Eb/No range на 2:5
.
Установите Simulation model на cm_viterbi_harddec_fixpt
. Убедитесь, что модель находится на пути.
Установите BER variable name на BER
.
Установите Number of errors на 100
, и Number of bits к 1e6
.
Нажмите Run, и график сгенерирован.
Чтобы сгенерировать результаты симуляции для Выполняют Фиксированную точку Мягкое Решение Декодирование Viterbi, открывают пример, чтобы получить simulink модель на пути, изменить изменение Simulation model в cm_viterbi_softdec_fixpt
, и нажмите Run.
Заметьте, что как ожидалось 3-битное декодирование мягкого решения лучше, чем декодирование трудного решения, примерно в размере 1,7 дБ, и не 2 дБ, как обычно цитируется. Различие в ожидаемых результатах могло быть приписано несовершенному квантованию мягких выходных параметров от демодулятора.
MATLAB® структура, которая содержит описание решетки сверточного энкодера. Используйте то же значение здесь и в соответствующем блоке Convolutional Encoder.
Установите этот флажок, чтобы задать проколотый входной код. Поле, Punctured code, появляется.
Постоянный вектор шаблона прокола используется в передатчике (энкодер). Вектор прокола является шаблоном 1
s и 0
s. 0
s указывают на проколотые биты. Когда вы выбираете Punctured code, поле Punctured vector появляется.
Когда вы устанавливаете этот флажок, декодер открывается, входной порт пометил Era
. Через этот порт можно задать шаблон вектора стирания 1
s и 0
s, где 1
s указывают на стертые биты.
Для этих стираний во входящем потоке данных декодер не обновляет метрику ветви. Ширины и шаги расчета стирания и портов входных данных должны быть тем же самым. Входной порт стирания может иметь тип данных double
или Boolean
.
Задает использование Unquantized
, Hard Decision
, или Soft Decision
для метрического вычисления ветви.
Unquantized
решение использует Евклидово расстояние, чтобы вычислить метрики ветви.
Soft Decision
и Hard Decision
используйте Расстояние Хемминга, чтобы вычислить метрики ветви, где Number of soft decision bits равняется 1
.
Количество мягких битов решения, чтобы представлять каждый вход. Это поле активно только, когда Decision type установлен в Soft Decision
.
Установите этот флажок, чтобы выдать ошибку, когда квантованные входные значения будут вне области значений. Этот флажок активен только, когда Decision type установлен в Soft Decision
или Hard Decision
.
Количество решетки переходит, чтобы создать каждый traceback путь.
Метод для перехода между последовательными входными кадрами: Continuous
, Terminated
, и Truncated
.
Примечание
Когда этот блок выводит последовательности, которые варьируются по длине в процессе моделирования, и вы устанавливаете Operation mode на Truncated
или Terminated
, состояние блока сбрасывает на каждом входном временном шаге.
Когда вы устанавливаете этот флажок, декодер открывается, входной порт пометил Rst
. Обеспечение ненулевого входного значения к этому порту заставляет блок устанавливать свою внутреннюю память на начальное состояние прежде, чем обработать входные данные.
Когда вы выбираете эту опцию, сброс блока Viterbi Decoder после декодирования закодированных данных. Эта опция доступна только, когда вы устанавливаете Operation mode на Continuous
и выберите Enable reset input port. Необходимо включить эту опцию для поддержки HDL.
Типом данных выходного сигнала может быть double
единственный
, boolean
int8
uint8
int16
uint16
int32
uint32
, или набор к 'Inherit via internal rule'
или 'Smallest unsigned integer'
.
Когда установлено в 'Smallest unsigned integer'
, тип выходных данных выбран на основе настроек, используемых в панели Hardware Implementation диалогового окна Configuration Parameters модели. Если ASIC/FPGA
выбран в панели Hardware Implementation, типом выходных данных является ufix(1)
. Для всех других выборов это - беззнаковое целое с самым маленьким заданным соответствием wordlength символьному значению (например, uint8
).
Когда установлено в 'Inherit via internal rule'
(настройка по умолчанию), блок выбирает дважды введенные выходные параметры для двойных входных параметров, одно введенные выходные параметры для одних входных параметров, и ведет себя так же к 'Smallest unsigned integer'
опция для всех других введенных входных параметров.
Порт | Поддерживаемые типы данных |
---|---|
Входной параметр |
|
Вывод |
|
[1] Кларк, Джордж К. и J. Затвор Каин. Кодирование с коррекцией ошибок для цифровой связи. Приложения коммуникационной теории. Нью-Йорк: нажатие пленума, 1981.
[2] Gitlin, Ричард Д., Иеремия Ф. Хейз и Стивен Б. Вайнштейн. Принципы передачи данных. Приложения коммуникационной теории. Нью-Йорк: нажатие пленума, 1992.
[3] Хеллер, J. и я. Джейкобс. “Viterbi, Декодирующий для Спутника и Космической связи”. Транзакции IEEE на Коммуникационной технологии 19, № 5 (октябрь 1971): 835–48. https://doi.org/10.1109/TCOM.1971.1090711.
[4] Yasuda, Y., К. Кэшики и И. Хирэта. “Высокий показатель Проколотые Сверточные коды для Мягкого Решения Декодирование Viterbi”. Транзакции IEEE на Коммуникациях 32, № 3 (март 1984): 315–19. https://doi.org/10.1109/TCOM.1984.1096047.
[5] Haccoun, D. и G. Начало. “Высокий показатель Проколотые Сверточные коды для Viterbi и Sequential Decoding”. Транзакции IEEE на Коммуникациях 37, № 11 (ноябрь 1989): 1113–25. https://doi.org/10.1109/26.46505.
[6] Начните, G., Д. Хэккун и К. Пакуин. “Дальнейшие Результаты на Высоком показателе Проколотые Сверточные коды для Viterbi и Sequential Decoding”. Транзакции IEEE на Коммуникациях 38, № 11 (ноябрь 1990): 1922–28. https://doi.org/10.1109/26.61470.
[7] Moision, B. "Эмпирическое правило глубины усечения для сверточных кодов". В теории информации и семинаре приложений (27 января 2008 - 1 февраля 2008, Сан-Диего, Калифорния), 555-557. Нью-Йорк: IEEE, 2008.