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

Convolutional Encoder

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

convolutional encoder

Описание

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

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

Порты

Вход

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

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

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

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

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

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

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

Зависимости

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

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

Выход

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

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

На значке блока этот порт не назван.

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

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

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

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

Зависимости

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

Параметры

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

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

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

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

numInputSymbols — количество символов, вводимых в кодер
2K

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

numOutputSymbols — количество символов, выводимых из кодера
2N

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

numStates — количество состояний в кодере
степень 2

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

nextStates — последующие состояния
матрица целых чисел

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

outputs — выходные данные
матрица восьмеричных чисел

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

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

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

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

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

Specify initial state via input port — задать начальное состояние через входной порт
выключено (по умолчанию) | включено

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

Зависимости

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

Output final state — выводить конечное состояние
выключено (по умолчанию) | включено

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

Зависимости

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

Puncture code — включение перфорирования сверточного кода
выключено (по умолчанию) | включено

Выберите этот параметр, чтобы включить параметр Puncture vector.

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

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

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

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

Зависимости

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

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

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

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

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

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

  • Блок 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.