Декодируйте сверточно закодированные данные с использованием алгоритма Viterbi
Сверточная сублибрария Выявления ошибок и Коррекции
Блок Viterbi Decoder декодирует входные символы, чтобы создать двоичные выходные символы. Этот блок может обрабатывать несколько символов за раз для более высокой эффективности.
Этот блок может выводить последовательности, которые варьируются в длине во время симуляции. Для получения дополнительной информации о последовательностях, которые варьируются в длине или сигналах переменного размера, смотрите Основы сигнала переменного размера (Simulink).
Если сверточный код использует алфавит 2n возможные символы, вход вектора этого блока является L * n для некоторых положительных целочисленных L. Точно так же, если декодированные данные используют алфавит 2k возможные выходные символы, длина выходного вектора этого блока L * k.
Этот блок принимает вектор-столбец входной сигнал с любым положительным целым значением для L. Для входов переменного размера L может варьироваться во время симуляции. Операция блока определяется параметром операции mode.
Для получения дополнительной информации о типах данных, которые поддерживает каждый порт блока см. Таблицу типов Поддерживаемые данные на этой странице.
Записи входного вектора являются биполярными, двоичными или целочисленными данными, в зависимости от параметра 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 | Самый уверенный |
Блок декодера 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 потоки сигналов была бы следующей.
Компонент ACS в целом проиллюстрирован как показано на следующей схеме.
Где WL2
задается пользователем в маске.
На приведенных выше блок-схемах inNT, bMetNT, stMetNT и outNT numerictype
Объекты (Fixed-Point Designer) и bMetFIMATH и stMetFIMATH fimath (Fixed-Point Designer)
объекты.
Для некоторых обычно используемых шаблонов пункции для конкретных скоростей и полиномов, смотрите последние три ссылки.
Выполняйте декодирование 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 жесткого решения с фиксированной точкой, выполните следующее:
Откройте пример декодирования 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
с. The 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
.
Количество ветвей шпалеры для построения каждого пути следования.
Метод перехода между последовательными входными кадрами: Continuous
, Terminated
, и Truncated
.
Примечание
Когда этот блок выводит последовательности, которые варьируются в длине во время симуляции, и вы устанавливаете Operation mode равной Truncated
или Terminated
состояние блока сбрасывается при каждом входном временном шаге.
Когда вы устанавливаете этот флажок, декодер открывает вход порт, помеченный Rst
. Предоставление ненулевого входного значения этому порту заставляет блок устанавливать свою внутреннюю память в начальное состояние перед обработкой входных данных.
Когда вы выбираете эту опцию, блок Viterbi Decoder сбрасывается после декодирования закодированных данных. Эта опция доступна только, когда вы задаете Operation mode Continuous
и выберите Enable reset input port. Эта опция необходимо включить для поддержки HDL.
Тип данных выходного сигнала может быть 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'
опция для всех других типизированных входов.
Порт | Поддерживаемые типы данных |
---|---|
Вход |
|
Выход |
|
[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.