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

редактировать
декодирует битовый поток с помощью алгоритма Витерби

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

. Существуют и другие алгоритмы для декодирования сверточно кодированного потока (например, алгоритм Фано ). Алгоритм Витерби является наиболее ресурсоемким, но он выполняет декодирование максимальной вероятности. Чаще всего он используется для декодирования сверточных кодов с ограничениями длины k≤3, но на практике используются значения до k = 15.

Декодирование Витерби было разработано Эндрю Дж. Витерби и опубликовано в статье Витерби, А. (апрель 1967). «Границы ошибок для сверточных кодов и асимптотически оптимального алгоритма декодирования». Транзакции IEEE по теории информации. 13(2): 260–269. doi : 10.1109 / tit.1967.1054010.

Существуют как аппаратные (в модемах), так и программные реализации декодера Витерби.

Декодирование Витерби используется в итеративном алгоритме декодирования Витерби.

Содержание
  • 1 Аппаратная реализация
    • 1.1 Метрическая единица ответвления (BMU)
    • 1.2 Метрическая единица пути (PMU)
    • 1.3 Единица отслеживания (TBU)
  • 2 Проблемы реализации
    • 2.1 Квантование для декодирования мягких решений
    • 2.2 Вычисление евклидовой метрики
    • 2.3 Отслеживание
  • 3 Ограничения
  • 4 Проколотые коды
  • 5 Программная реализация
  • 6 Приложения
  • 7 Ссылки
  • 8 Внешние ссылки
Аппаратная реализация
Обычный способ реализации аппаратного декодера Витерби

Аппаратный декодер Витерби для базового (не проколотого) кода обычно состоит из следующих основных блоков:

  • Метрическая единица ответвления (BMU)
  • Метрическая единица пути (PMU)
  • Единица отслеживания (TBU)

Метрическая единица ветвления (BMU)

Пример реализации метрической единицы ветвления

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

Существуют декодеры Витерби с жестким и мягким решением. Декодер Витерби с жестким решением принимает на вход простой битовый поток, и в качестве метрики используется расстояние Хэмминга. Декодер Витерби с мягким решением принимает битовый поток, содержащий информацию о надежности каждого принятого символа. Например, в 3-битном кодировании эта информация о надежности может быть закодирована следующим образом:

значениеозначает
000сильнейший0
001относительно сильный0
010относительно слабый0
011самый слабый0
100самый слабый1
101относительно слабый1
110относительно сильный1
111самый сильный1

Конечно, это не единственный способ кодирования данных о надежности.

Квадрат евклидова расстояния используется в качестве метрики для декодеров мягких решений.

Единица метрики пути (PMU)

Пример реализации единицы метрики пути для конкретного декодера K = 4

Единица метрики пути суммирует метрики ветвления, чтобы получить метрики для 2 К - 1 {\ displaystyle 2 ^ {K-1}}2 ^ {K-1} пути, где K - длина ограничения кода, один из которых в конечном итоге может быть выбран как оптимальный. Каждые часы он принимает 2 K - 1 {\ displaystyle 2 ^ {K-1}}2 ^ {K-1} решений, отбрасывая заведомо неоптимальные пути. Результаты этих решений записываются в память модуля трассировки.

Основными элементами PMU являются блоки ACS (добавить-сравнить-выбрать). Способ, которым они связаны между собой, определяется решетчатой ​​диаграммой.

конкретного кода. Поскольку метрики ветвления всегда ≥ 0 {\ displaystyle \ geq 0}\ ge 0 , должны быть дополнительная схема (на рисунке не показана), предотвращающая переполнение счетчиков метрики. Альтернативный метод, который избавляет от необходимости отслеживать рост метрики пути, состоит в том, чтобы позволить метрике пути «переходить»; Чтобы использовать этот метод, необходимо убедиться, что накопители метрики пути содержат достаточно битов, чтобы «лучшее» и «худшее» значения не попадали в пределах 2 друг от друга. Схема сравнения практически не изменилась.

Пример реализации блока ACS

Можно отслеживать уровень шума во входящем потоке битов, отслеживая скорость роста метрики «наилучшего» пути. Более простой способ сделать это - контролировать одно местоположение или «состояние» и наблюдать, как оно проходит «вверх», скажем, через четыре дискретных уровня в пределах диапазона аккумулятора. По мере прохождения вверх через каждый из этих пороговых значений счетчик получает приращение, которое отражает «шум», присутствующий во входящем сигнале.

Блок обратной трассировки (TBU)

Пример реализации блока обратной трассировки

Блок обратной трассировки восстанавливает (почти) путь максимального правдоподобия из решений, принятых PMU. Поскольку он делает это в обратном направлении, декодер Витерби содержит буфер FILO (first-in-last-out) для восстановления правильного порядка.

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

Проблемы реализации

Квантование для декодирования с мягким решением

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

T = N 0 2 k, {\ displaystyle \, \! T = {\ sqrt {\ frac {N_ {0}} {2 ^ {k}} }},}{\ displaystyle \, \! T = {\ sqrt {\ frac {N_ {0}} {2 ^ {k}}}},}

где N 0 {\ displaystyle N_ {0}}N_ {0} - спектральная плотность мощности шума, а k - количество битов для мягкого решения.

Вычисление евклидовой метрики

Квадрат нормы (ℓ 2 {\ displaystyle \ ell _ {2}}\ ell _ {2} ) расстояния между принятые и фактические символы в кодовом алфавите могут быть дополнительно упрощены до линейной формы суммы / разности, что делает ее менее трудоемкой с точки зрения вычислений.

Рассмотрим сверточный кодер 1/2 , который генерирует 2 бита (00, 01, 10 или 11) для каждого входного бита (1 или 0). Эти сигналы возврата к нулю переводятся в форму без возврата к нулю, показанную рядом.

кодовый алфавитвекторное отображение
00+1, +1
01+1, -1
10-1, +1
11-1, -1

Каждый принятый символ может быть представлен в векторной форме как vr= {r 0, r 1 }, где r 0 и r 1 - значения мягкого решения, величины которых означают совместную надежность полученного вектора, vr.

Каждый символ в кодовый алфавит также может быть представлен вектором vi= {± 1, ± 1}.

Фактическое вычисление метрики евклидова расстояния:

D = (vr → - vi →) 2 = vr → 2-2 vr → vi → + vi → 2 {\ displaystyle \, \! D = ({\ overrightarrow {v_ {r}}} - {\ overrightarrow {v_ {i}}}) ^ {2} = {\ overrightarrow {v_ {r}}} ^ {2} -2 {\ overrightarrow { v_ {r}}} {\ overrightarrow {v_ {i}}} + {\ overrightarrow {v_ {i}}} ^ {2}}\, \! D = (\ overrightarrow {v_r} - \ overrightarrow {v_i}) ^ 2 = \ overrightarrow {v_r} ^ 2 - 2 \ overrightarrow {v_r} \ overrightarrow {v_i} + \ overrightarrow {v_i} ^ 2

Каждый квадратный член представляет собой нормированное расстояние, отображающее энергию символа. Например, энергия символа vi= {± 1, ± 1} может быть вычислена как

vi → 2 = (± 1) 2 + (± 1) 2 = 2 {\ displaystyle \, \ ! {\ overrightarrow {v_ {i}}} ^ {2} = (\ pm 1) ^ {2} + (\ pm 1) ^ {2} = 2}\, \! \ overrightarrow {v_i} ^ 2 = (\ pm 1) ^ 2 + (\ pm 1) ^ 2 = 2

Таким образом, энергетический член всех символов в кодовый алфавит постоянен (при (нормализованном) значении 2).

Операция Добавить-Сравнить-Выбрать (ACS) сравнивает метрическое расстояние между полученным символом || v r||и любыми двумя символами в кодовом алфавите, чьи пути сливаются в узле в соответствующем решетка, || v i||и || v i||. Это эквивалентно сравнению

D 0 = vr → 2 - 2 vr → vi 0 → + vi 0 → 2 {\ displaystyle \, \! D_ {0} = {\ overrightarrow {v_ {r}}} ^ { 2} -2 {\ overrightarrow {v_ {r}}} {\ overrightarrow {v_ {i} ^ {0}}} + {\ overrightarrow {v_ {i} ^ {0}}} ^ {2}}\, \! D_0 = \ overrightarrow {v_r} ^ 2 - 2 \ overrightarrow {v_r} \ overrightarrow {v_i ^ 0} + \ overrightarrow {v_i ^ 0} ^ 2

и

D 1 = vr → 2 - 2 vr → vi 1 → + vi 1 → 2 {\ displaystyle \, \! D_ {1} = {\ overrightarrow {v_ {r}}} ^ {2} - 2 {\ overrightarrow {v_ {r}}} {\ overrightarrow {v_ {i} ^ {1}}} + {\ overrightarrow {v_ {i} ^ {1}}} ^ {2}}\, \! D_1 = \ overrightarrow {v_r} ^ 2 - 2 \ overrightarrow {v_r} \ overrightarrow {v_i ^ 1} + \ overrightarrow {v_i ^ 1} ^ 2

Но, сверху мы знаем, что энергия viпостоянна (равна (нормированному) значению 2), а энергия vrодинакова в обоих случаях. Это сокращает сравнение до функции минимума между 2 (средними) скалярными элементами,

min (- 2 vr → vi 0 →, - 2 vr → vi 1 →) = max (vr → vi 0 →, vr → vi 1 →) {\ displaystyle \, \! \ min (-2 {\ overrightarrow {v_ {r}}} {\ overrightarrow {v_ {i} ^ {0}}}, - 2 { \ overrightarrow {v_ {r}}} {\ overrightarrow {v_ {i} ^ {1}}}) = \ max ({\ overrightarrow {v_ {r}}} {\ overrightarrow {v_ {i} ^ {0}) }}, {\ overrightarrow {v_ {r}}} {\ overrightarrow {v_ {i} ^ {1}})}{\ displaystyle \, \! \ Min (-2 {\ overrightarrow {v_ {r}}} {\ overrightarrow {v_ {i} ^ {0}}}, - 2 {\ overrightarrow { v_ {r}}} {\ overr ightarrow {v_ {i} ^ {1}}}) = \ max ({\ overrightarrow {v_ {r}}} {\ overrightarrow {v_ {i} ^ {0}}}, {\ overrightarrow {v_ {r}) }} {\ overrightarrow {v_ {i} ^ {1}}})}

, поскольку операция min для отрицательных чисел может интерпретироваться как эквивалентная операция max для положительных величин.

Каждый член скалярного произведения может быть расширен как

max (± r 0 ± r 1, ± r 0 ± r 1) {\ displaystyle \, \! \ Max (\ pm r_ {0} \ pm r_ {1}, \ pm r_ {0} \ pm r_ {1})}{\ displaystyle \, \! \ max (\ pm r_ {0} \ pm r_ {1}, \ pm r_ {0} \ pm r_ {1})}

где знаки каждого термина зависят от сравниваемых символов viи vi. Таким образом, вычисление квадрата евклидовой метрики расстояния для вычисления метрики ветвления может быть выполнено с помощью простой операции сложения / вычитания.

Traceback

Общий подход к трассировке заключается в накоплении метрик пути до пятикратной длины ограничения (5 (K - 1)), нахождении узла с наибольшей накопленной стоимостью и начать обратную трассировку с этого узла.

Обычно используемое эмпирическое правило глубины усечения в пять раз больше памяти (длина ограничения K-1) сверточного кода является точным только для кодов со скоростью 1/2. Для произвольной скорости точное практическое правило составляет 2,5 (K - 1) / (1 - r), где r - кодовая скорость.

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

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

Ограничения

Физическая реализация декодера Витерби не даст точного потока максимального правдоподобия из-за квантования входного сигнала, метрик ветвления и пути и конечного длина трассировки. Практические реализации действительно приближаются к 1 дБ от идеала.

На выходе декодера Витерби при декодировании сообщения, поврежденного аддитивным гауссовым каналом, ошибки сгруппированы в пакеты ошибок. Коды с исправлением одиночных ошибок сами по себе не могут исправить такие пакеты, поэтому либо сверточный код и декодер Витерби должны быть спроектированы достаточно мощными, чтобы снизить количество ошибок до приемлемой скорости, либо необходимо использовать пакетные коды с исправлением ошибок.

Проколотые коды

Аппаратный декодер Витерби проколотых кодов обычно реализуется следующим образом:

  • Депунктор, который преобразует входной поток в поток, который выглядит как исходный (не проколотый) поток с метками ERASE в местах стирания битов.
  • Базовый декодер Витерби, понимающий эти метки ERASE (то есть не использующий их для вычисления метрики ветвления).
Программная реализация

Одной из наиболее трудоемких операций является ACS-бабочка, которая обычно реализуется с использованием языка ассемблера и соответствующих расширений набора команд (например, SSE2 ), чтобы ускорить время декодирования.

Приложения

Алгоритм декодирования Витерби широко используется в следующих областях:

Ссылки
Внешние ссылки
Викискладе есть носители, относящиеся к кодированию Витерби.
Последняя правка сделана 2021-06-18 04:10:58
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте