Сверточный кодер

 
в палитре на схеме

Блок осуществляет сверточное кодирование входной битовой последовательности в соответствии с заданным пользователем видом сверточного кодера. Подробную информацию о сверточных кодерах можно найти в [1].

Кодирование осуществляется последовательно, то есть в один момент времени на вход блока поступает одно информационное слово и на выходе блока формируется одно кодовое слово.

В рамках блока предусмотрена возможность задания свойств сверточного кодера в двух вариантах: в полиномиальном виде и в виде решетчатой структуры (англ. trellis).

Полиномиальное описание кодера предполагает задание четырех ключевых параметров:

Далее представлены примеры полиномиального описания для систематического кодера 1/2 с обратной связью и для несистематического кодера 2/3 без обратной связи.

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

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

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

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

Примеры полиномиального описания сверточных кодеров

Систематический сверточный кодер с обратной связью, R = 1/2

Пусть сверточный кодер имеет следующую структуру:

Рисунок 1. Сверточный кодер с обратной связью, R = 1/2

Кодер имеет в своем составе одну линию задержки, следовательно, массив кодовых ограничений будет состоять из одного элемента. Линия состоит из 4 элементов задержки, соответственно, получаем параметр Constraint = [5].

Генераторный полином в битовом представлении будет равен 11011, соответственно получим в десятичном виде число 27. Поскольку кодер имеет только один генераторный полином, размерность массива полиномов также будет равна единице. Получаем параметр PolyArray = [27].

Кодер имеет обратную связь. Полином, описывающий обратную связь, в двоичном представлении имеет вид 1111, что соответствует числу 15 в десятичной форме. Таким образом, получаем параметр Feedback = [15].

Кодер является систематическим, соответственно параметр SystematicFlag = true.

Несистематический сверточный кодер без обратной связи, R = 2/3

Пусть сверточный кодер имеет следующую структуру:

Рисунок 2. Сверточный кодер без обратной связи, R = 2/3

Кодер имеет две линии задержки, состоящие из 4 и 3 элементов соответственно. Отсюда получаем параметр Constraint = [5 4].

Генераторные полиномы в битовом представлении для первой линии задержки будут равны (сверху вниз) 10011, 11101 и 00000, для второй линии задержки 0000, 0101 и 1011. В десятичном виде получим 19, 29, 0 для первой линии и 0, 5, 11 для второй линии. Сначала в массив записываются значения для первой линии задержки, затем - для второй и так далее. Размерность массива в данном случае равна 2х3 = 6. Получаем параметр PolyArray = [19, 29, 0, 0, 5, 11].

Кодер не имеет обратной связи ни в одной из линий задержки, соответственно получим параметр Feedback = [0, 0];

Поскольку кодер не является систематическим, получаем параметр SystematicFlag = false.

Описание механизма выкалывания

С помощью механизма выкалывания возможно получение кода с более высокой скоростью кодирования относительно изначальной, определяемой параметрами полинома или соответствующей решетчатой структуры. При включении режима выкалывания в кодере часть бит в кодовом слове удаляется из передаваемого сообщения. На стороне декодера происходит обратный процесс - в заданных позициях вставляются нулевые отсчеты в принятое сообщение. Индексы пропускаемых бит обозначаются нулями в маске выкалывания, индексы значимых бит - единицами. Рассмотрим подробнее на примере маски выкалывания для преобразования кода со скоростью R = 2/3 к Rpunct=5/6. Маска выкалывания имеет следующий вид: [1, 1, 0, 1, 1, 1, 1, 1, 0, 1]. Обозначим кодовое слово без выкалывания как [a, b, c, d, e, f, g, h, i, j], тогда после выкалывания кодовое слово примет вид [a, b, d, e, f, g, h, j].

Рисунок 3. Пример выкалывания

Кодовая скорость после выкалывания: Rpunct = R * MaskLength / OnesCount, где R - исходная кодовая скорость, MaskLength - длина вектора маски выкалывания, OnesCount - число единиц в маске выкалывания.

Число бит на входе и выходе кодера в режиме выкалывания в непрерывном режиме:

Число информационных бит после выкалывания: Kpunct = K * Length, где Kpunct - число информационных бит в режиме выкалывания, K - число информационных бит в режиме без выкалывания, Length - длина маски выкалывания;

Число кодовых бит после выкалывания: Npunct = N * OnesCount, где Npunct - число кодовых бит в режиме выкалывания, N - число кодовых бит в режиме без выкалывания, OnesCount - число единиц.

Входные порты

  • in bits - кодируемое информационное сообщение в виде двоичного вектора длины k бит.

Выходные порты

  • out bits - кодовое слово в виде двоичного вектора длиной n бит.

Свойства

  • Способ описания кодера - способ описания кодера: полиномиальное представление или решетчатая структура;
  • Режим работы кодера - режим работы кодера: непрерывный или пакетный;
  • Размер пакета - размер пакета (свойство доступно только в пакетном режиме работы кодера);
  • Режим выкалывания бит - флаг включения/выключения режима выкалывания бит;
  • Матрица выкалывания - маска выкалывания выходных бит кодера. Задается в виде вектора из нулей и единиц. Единицами обозначаются значащие элементы, нулями - выколотые. Метрики выколотых оценок не рассчитываются. Пример маски для преобразования кодовой скорости от 1/2 к 3/4: [1, 1, 0, 1, 1, 0] (свойство доступно только в режиме выкалывания бит);
  • Начальное состояние кодера - начальное состояние регистров линий задержки кодера. Задается в виде целого числа, биты которого соответствуют элементам линий задержки;
  • Младший бит - первый - определяет интерпретацию очередности бит во входном и выходном векторах. В случае, если флаг выставлен в true, первый бит сообщений на входе и выходе кодера считается младшим, в противном случае - старшим;
  • Описание решетчатой структуры - способ описания решетчатой структуры. Структура может быть описана пользователем вручную, либо загружена из файла, сформированного моделью расчета решетчатых структур (свойство доступно только при способе задания кодера в виде решетчатой структуры);
  • Файл решетчатой структуры - имя файла с описанием решетчатой структуры (свойство доступно только при описании решетчатой структуры при помощи файла);
  • Количество символов на входе - количество возможных комбинаций бит на входе кодера (свойство доступно только при описании решетчатой структуры вручную);
  • Количество символов на выходе - количество возможных комбинаций на выходе кодера (свойство доступно только при описании решетчатой структуры вручную);
  • Количество состояний - количество возможных состояний кодера (свойство доступно только при описании решетчатой структуры вручную);
  • Массив состояний - таблица возможных состояний кодера размерностью [NumStates]x[NumInCombs]. Задается в виде одномерного массива, в который таблица переписывается построчно (свойство доступно только при описании решетчатой структуры вручную);
  • Массив выходов - таблица возможных выходных значений кодера размерностью [NumStates]x[NumInCombs]. Задается в виде одномерного массива, в который таблица переписывается построчно (свойство доступно только при описании решетчатой структуры вручную);
  • Кодовое ограничение - массив кодовых ограничений кодера. Количество элементов массива соответствует количеству линий задержки в составе кодера (свойство доступно только при полиномиальном описании кодера);
  • Массив полиномов - массив генераторных полиномов кодера. Задается в виде одномерного массива, в который поочередно заносятся генераторные полиномы для каждой линии задержки кодера. В случае, если линия задержки не имеет связей с каким-либо из элементов XOR, в соответствующий элемент массива записывается 0. Размерность массива - [количество линий задержки]х[количество элементов XOR, формирующих выходное сообщение] (свойство доступно только при полиномиальном описании кодера);
  • Массив полиномов обратной связи - массив полиномов, описывающих обратную связь кодера. Количество элементов равно количеству линий задержки в составе кодера. В случае отсутствия в линии задержки обратной связи в соответствующий элемент массива записывается 0 (свойство доступно только при полиномиальном описании кодера);
  • Систематический код - определяет вид кодера. Если флаг установлен в true, кодер будет считаться систематическим, то есть входные биты будут передаваться на выход блока, в противном случае кодер будет интерпретироваться как несистематический (свойство доступно только при полиномиальном описании кодера);

Параметры

Нет

Расчет решетчатых структур

В директории установки программы (C:\SImInTech\Demo\Цифровая связь\Расчет Trellis-структур) представлены модели, которые позволяют сформировать файлы решетчатых структур, описывающих произвольные кодеры и декодеры:

Список источников

Скляр Бернард. Цифровая связь: теоретические основы и практическое применение / Скляр Б. ; Гроза Е.Г. [и др.] (пер. с англ.). — 2-е изд. — М. [и др.] : Вильямс, 2016. — 1099 с. — Пер. изд.: Digital communications / Sklar Bernard. — 2d ed. Upper Saddle River (N.J.) : Prentice Hall, cop. 2001. — ISBN 978-5-8459-2071-3.