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

Convolutional Encoder

Кодирует двоичные данные с помощью схемы сверточного кодирования.

Тип: ConvolutionalEncoder

Путь в библиотеке:

/Communication Systems/Error Detection And Correction/Convolution/Convolutional Encoder

Описание

Блок Convolutional Encoder кодирует входное двоичное сообщение, используя схему сверточного кодирования, заданную структурой решетки.

Значок блока и количество входных и выходных портов меняется в зависимости от значения параметров Specify initial state via input port и Output final state.

Порты

Выход

# OUT_1 — выходной сигнал
двоичный вектор-столбец

Details

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

На иконке блока этот порт не имеет названия.

Если кодер производит выходных битовых потоков (то есть может произвести возможных выходных символов), длина выходного вектора блока равна для некоторого положительного целого числа . Этот выход наследует тип данных от входа In.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

Поддержка комплексных чисел

Нет

# FSt — конечное состояние регистров
неотрицательное целое число

Details

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

Зависимости

Чтобы использовать этот порт, установите для параметра Operation mode одно из значений: Continuous, Truncated (reset every frame), или Reset on nonzero input via port и установите флажок Output final state.

Типы данных

Float64

Поддержка комплексных чисел

Нет

Вход

# In — входной сигнал
двоичный вектор-столбец

Details

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

Кодер принимает только один входной битовый поток .

Пример: [1 1 0 1 0 0 1 1] задает сообщение в виде двоичного вектора строк с восемью элементами.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

Поддержка комплексных чисел

Нет

# ISt — начальное состояние регистров
неотрицательное целое число

Details

Начальное состояние регистров кодера для каждого кадра, поступающего в блок, заданное в виде неотрицательного целого числа.

Зависимости

Чтобы использовать этот порт, установите для параметра Operation mode значение Truncated (reset every frame) и установите флажок Specify initial state via input.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

Поддержка комплексных чисел

Нет

Параметры

Основные

# Trellis structure — описание сверточного кода через кодовую решетку
String

Details

Решетчатое описание сверточного кода, заданное в виде структуры решетки для кода со скоростью , где — это количество входных битовых потоков, а — количество выходных битовых потоков.

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

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

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

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

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

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

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

Значение по умолчанию

poly2trellis(7, [171 133])

Имя для программного использования

TrellisStructure

Настраиваемый

Нет

Вычисляемый

Да

# Operation mode — метод завершения кодированного кадра
Continuous | Truncated (reset every frame)

Details

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

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

  • Truncated (reset every frame) — блок обрабатывает каждый вход независимо. В начале каждого входного кадра состояния кодера сбрасываются в состояние «все нули» или, если установлен флажок Specify initial state via input port, в состояние, указанное портом ISt.

Значения

Continuous | Truncated (reset every frame)

Значение по умолчанию

Continuous

Имя для программного использования

OperationMode

Настраиваемый

Нет

Вычисляемый

Нет

# Specify initial state via input port — задать начальное состояние через входной порт
Logical

Details

Выберите этот параметр, чтобы добавить входной порт ISt в блок.

Зависимости

Чтобы использовать этот параметр, установите для параметра Operation mode значение Truncated (reset every frame).

Значение по умолчанию

false (выключено)

Имя для программного использования

SpecifyInitialStateViaInputPort

Настраиваемый

Нет

Вычисляемый

Нет

# Output final state — выводить конечное состояние
Logical

Details

Выберите этот параметр, чтобы добавить порт вывода FSt в блок.

Зависимости

Чтобы использовать этот параметр, установите для параметра Operation mode значение Continuous или Truncated (reset every frame).

Значение по умолчанию

false (выключено)

Имя для программного использования

OutputFinalState

Настраиваемый

Нет

Вычисляемый

Нет

# Puncture code — включение перфорирования сверточного кода
Logical

Details

Установите этот флажок, чтобы использовать параметр Puncture vector.

Значение по умолчанию

false (выключено)

Имя для программного использования

PunctureCode

Настраиваемый

Нет

Вычисляемый

Нет

# Puncture vector — шаблон перфорирования

Details

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

Длина вектора должна быть целым числом, кратным length(In), длине вектора входного сообщения.

Некоторые часто используемые шаблоны проколов для определенных скоростей и полиномов приведены в [3], [4], [5].

Зависимости

Чтобы использовать этот параметр, установите флажок Puncture code

Значение по умолчанию

[1; 1; 0; 1; 0; 1]

Имя для программного использования

PunctureVector

Настраиваемый

Нет

Вычисляемый

Да

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

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

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

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

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

  • Блок Viterbi Decoder — использует алгоритм Витерби с жестким и мягким декодированием.

  • Блок APP Decoder — использует апостериорный вероятностный декодер для мягкого декодирования выходных данных сверточных кодов.

Определение кодера

Чтобы определить сверточный кодер, используйте параметр Trellis structure. Структуру решетки можно задать с помощью вызова функции poly2trellis.

Например, чтобы использовать кодер с длиной ограничения 7, полиномами генератора кода 171 и 133 (в восьмеричных числах), задайте для параметра Trellis structure значение poly2trellis(7,[171 133]).

Литература

  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.