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.