Документация Engee

EngeeComms.ConvolutionalEncoder

Сверточное кодирование двоичных данных.

Библиотека

EngeeComms

Блок

Convolutional Encoder

Описание

Системный объект EngeeComms.ConvolutionalEncoder кодирует последовательность двоичных входных векторов для получения последовательности двоичных выходных векторов.

Чтобы выполнить сверточное кодирование двоичных данных, выполните следующие действия:

  1. Создайте объект EngeeComms.ConvolutionalEncoder и установите его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Чтобы узнать подробнее о том, как работать с системными объектами, см. Системные объекты Engee.

Создание

Синтаксис

  • object = EngeeComms.ConvolutionalEncoder создает системный объект для сверточного кодирования со свойствами по умолчанию. Пример:

    ConvEncoder = EngeeComms.ConvolutionalEncoder()
  • object = EngeeComms.ConvolutionalEncoder(trellis) создает системный объект для сверточного кодирования с описанием через решетчатую структуру TrellisStructure. Пример:

    # кодер с длиной ограничения 7 и полиномами генератора кода 171 и 133 (в восьмеричных числах)
    ConvEncoder = EngeeComms.ConvolutionalEncoder(TrellisStructure="poly2trellis(7, [171 133])"
  • object = EngeeComms.ConvolutionalEncoder(Name=Value) создает системный объект для сверточного кодирования с каждым указанным свойством Name (имя), установленным на указанное Value (значение). Вы можете указать дополнительные аргументы в виде пары имя-значение в любом порядке (Name1=Value1,…​,NameN=ValueN). Пример:

    # сохраняет состояния кодера в конце каждого входа для использования в следующем кадре
    ConvEncoder = EngeeComms.ConvolutionalEncoder(TerminationMethod="Continuous")

Свойства

TrellisStructure — описание сверточного кода через решетчатую структуру
poly2trellis(7, [171 133]) (по умолчанию) | решетчатая структура

Details

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

Для создания структуры решетки можно использовать функцию poly2trellis или создать ее вручную.

Решетчатая структура содержит следующие поля:

  • numInputSymbols — количество символов, вводимых в кодер, заданное как целое число, равное , где — количество входных битовых потоков.

  • numOutputSymbols — количество символов, выводимых из кодера, заданное как целое число, равное , где — количество выходных битовых потоков.

  • numStates — количество состояний в кодере, заданное в виде степени 2.

  • nextStates — последующие состояния для всех комбинаций текущих состояний и текущих входов, заданные в виде матрицы целых чисел. Размер матрицы должен быть numStates на .

  • outputs — выходные данные для всех комбинаций текущих состояний и текущих входных данных, заданные в виде матрицы восьмеричных чисел. Размер матрицы должен быть numStates на .

TerminationMethod — метод завершения кодированного кадра
Continuous (по умолчанию) | Truncated

Details

Метод завершения кодированного кадра, заданный как одно из этих значений:

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

  • Truncated — системный объект сбрасывает в начале каждого входного вектора. Если задать свойству InitialStateInputPort значение 0 (false), то объект сбрасывает свои состояния в состояние «все нули». Если задать свойству InitialStateInputPort значение 1 (true), то объект сбрасывает свои состояния до значений, указанных во входном аргументе initstate.

DelayedResetAction — опция задержки сброса выходных данных
0 (по умолчанию) | 1

Details

Опция задержки сброса выходных данных, задаваемая в виде одного из этих логических значений:

  • 1 (истина) — сброс внутренних состояний кодера происходит после того, как объект вычислит закодированные данные.

  • 0 (ложь) — сброс внутренних состояний кодера происходит до того, как объект вычислит закодированные данные.

Зависимости

Чтобы использовать это свойство, установите для свойства ResetInputPort значение 1.

InitialStateInputPort — опция включения входа начального состояния
0 (по умолчанию) | 1

Details

Опция включения входа начального состояния, задаваемая в виде логической 1 (истина) или 0 (ложь). При установке для этого свойства значения 1 объект позволяет задавать начальное состояние кодера для каждого входного вектора.

Зависимости

Чтобы использовать это свойство, установите для свойства TerminationMethod значение Truncated.

FinalStateOutputPort — опция включения вывода конечного состояния
0 (по умолчанию) | 1

Details

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

Зависимости

Чтобы использовать это свойство, установите для свойства TerminationMethod значение Continuous или Truncated.

PuncturePatternSource — источник шаблона перфорирования
None (по умолчанию) | Property

Details

Источник шаблона перфорирования, указывается как одно из этих значений:

  • None — объект не выполняет перфорирование.

  • Property — объект выполняет перфорирование кода. Перфорирование основывается на векторе шаблона перфорирования, который задается в свойстве PuncturePattern.

Зависимости

Чтобы использовать это свойство, установите для свойства TerminationMethod значение Continuous или Truncated.

PuncturePattern — вектор шаблона перфорирования
[1; 1; 0; 1; 0; 1] (по умолчанию) | вектор-столбец

Details

Шаблон перфорирования, заданный в виде вектора. Вектор перфорирования представляет собой шаблон из 1 и 0, где 0 обозначают перфорированные биты или биты, исключенные из выходных кодированных данных.

Зависимости

Чтобы использовать это свойство, установите для свойства TerminationMethod значение Continuous или Truncated, а для свойства PuncturePatternSource значение Property.

Использование

Синтаксис

ConvEncoder= EngeeComms.ConvolutionalEncoder()

ConvEncoder= EngeeComms.ConvolutionalEncoder(TrellisStructure="poly2trellis(3,[4 5])")

ConvEncoder= EngeeComms.ConvolutionalEncoder(TrellisStructure="poly2trellis(3,[4 5])" TerminationMethod="Truncated", FinalStateOutputPort=true)
in_data = [1; 0; 1; 0; 0; 1]
out = ConvEncoder(in_data)

Описание

  • ConvEncoder= EngeeComms.ConvolutionalEncoder() – создание системного объекта по умолчанию.

  • ConvEncoder= EngeeComms.ConvolutionalEncode(Name=Value) – создание объекта с заданными параметрами.

Выходные аргументы

out — выходное значение
[codeword, finalstate]|[codeword]

Details

Если для свойства FinalStateOutputPort установлено значение 1 (истина), то выходной аргумент out представляет собой вектор [codeword, finalstate], где codeword — сверточное кодовое слово, а finalstate — конечное состояние кодера. Если для свойства FinalStateOutputPort установлено значение 0 (ложь), то out содержит только сверточное кодовое слово [codeword].

Cверточное кодовое сообщение, возвращаемое в виде вектора-столбца с двоичными значениями. Этот выходной вектор имеет тот же тип данных и ориентацию, что и входное сообщение.

Когда сверточный кодер представляет код со скоростью , длина входного вектора равна для некоторого положительного целого числа . Объект устанавливает длину выходного вектора, равную .

Типы данных: Float64, Int8

finalstate — конечное состояние кодера
целое число

Details

Конечное состояние кодера, возвращаемое в виде целого числа.

Зависимости

Чтобы использовать этот аргумент, установите для свойства TerminationMethod значение Continuous или Truncated.

Типы данных: Float64

Методы

Общие для всех системных объектов

step!

Запустить алгоритм работы системного объекта

release!

Разрешить изменение значения свойства системного объекта

reset!

Сброс внутренних состояний системного объекта

Дополнительно

Подробнее о сверточном кодировании

Details

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

Сверточный кодер выдает битов на каждые входных битов. В процессе моделирования входные данные могут быть кратны битам.

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

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

  • Системный объект EngeeComms.APPDecoder — использует апостериорный вероятностный декодер для мягкого декодирования выходных данных сверточных кодов.

Литература

  1. Clark, George C., and J. Bibb Cain. Error-Correction Coding for Digital Communications. Applications of Communications Theory. New York: Plenum Press, 1981.

  2. Gitlin, Richard D., Jeremiah F. Hayes, and Stephen B. Weinstein. Data Communications Principles. Applications of Communications Theory. New York: Plenum Press, 1992.

  3. Yasuda, Y., K. Kashiki, and Y. Hirata. “High-Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding.” IEEE Transactions on Communications 32, no. 3 (March 1984): 315–19. https://doi.org/10.1109/TCOM.1984.1096047.

  4. Haccoun, D., and G. Begin. “High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding.” IEEE Transactions on Communications 37, no. 11 (November 1989): 1113–25. https://doi.org/10.1109/26.46505.

  5. Begin, G., D. Haccoun, and C. Paquin. “Further Results on High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding.” IEEE Transactions on Communications 38, no. 11 (November 1990): 1922–28. https://doi.org/10.1109/26.61470.