Этот пример демонстрирует создание нестандартной решетчатой структуры для сверточного кодера с некодированными битами и обратной связью. Невозможно создать кодировщик с помощью poly2trellis потому что особые спецификации для кодировщика не соответствуют входным требованиям poly2trellis.
Можно вручную создать решетчатую структуру, а затем использовать ее в качестве входной решетчатой структуры для кодера и декодера. Блоки сверточного кодера и декодера Витерби, используемые в сверточном кодере с некодированными битами и моделью обратной связи, загружают решетчатую структуру, созданную здесь с помощью PreLoadFcn обратный вызов.
Сверточный кодер
Создайте сверточный кодер со скоростью 3/4 с соединением обратной связи, бит MSB которого остается некодированным.

Объявите переменные в соответствии со спецификациями.
K = 3; N = 4; constraintLength = 4;
Создание решетчатой структуры
Решетка представлена структурой со следующими полями:
numInputSymbols - Количество входных символов
numOutputSymbols - Количество выходных символов
numStates - Количество состояний
nextStates - Матрица следующего состояния
outputs - Выходная матрица
Дополнительные сведения об этих полях структуры см. в разделе istrellis.
Сбросить любое предыдущее вхождение myTrellis структура.
clear myTrellis;Определите поля решетчатой структуры.
myTrellis.numInputSymbols = 2^K; myTrellis.numOutputSymbols = 2^N; myTrellis.numStates = 2^(constraintLength-1);
Создать nextStates Матрица
nextStates матрица является [numStates x numInputSymbols] матрица. Элемент (i, j) матрицы следующего состояния является результирующим индексом конечного состояния, который соответствует переходу от начального состояния i для входного значения, равного j.
myTrellis.nextStates = [0 1 2 3 0 1 2 3; ... 6 7 4 5 6 7 4 5; ... 1 0 3 2 1 0 3 2; ... 7 6 5 4 7 6 5 4; ... 2 3 0 1 2 3 0 1; ... 4 5 6 7 4 5 6 7; ... 3 2 1 0 3 2 1 0; ... 5 4 7 6 5 4 7 6]
myTrellis = struct with fields:
numInputSymbols: 8
numOutputSymbols: 16
numStates: 8
nextStates: [8x8 double]
График nextStates Матрица
Используйте commcnv_plotnextstates вспомогательная функция для построения графика nextStates матрица для иллюстрации переходов ветвей между различными состояниями для данного входа.
commcnv_plotnextstates(myTrellis.nextStates);

Создать outputs Матрица
outputs матрица является [numStates x numInputSymbols] матрица. Элемент (i, j) выходной матрицы является выходным символом в восьмеричном формате, задаваемым текущим состоянием i для входа, равного j.
outputs = [0 2 4 6 10 12 14 16; ... 1 3 5 7 11 13 15 17; ... 0 2 4 6 10 12 14 16; ... 1 3 5 7 11 13 15 17; ... 0 2 4 6 10 12 14 16; ... 1 3 5 7 11 13 15 17; ... 0 2 4 6 10 12 14 16; ... 1 3 5 7 11 13 15 17]
outputs = 8×8
0 2 4 6 10 12 14 16
1 3 5 7 11 13 15 17
0 2 4 6 10 12 14 16
1 3 5 7 11 13 15 17
0 2 4 6 10 12 14 16
1 3 5 7 11 13 15 17
0 2 4 6 10 12 14 16
1 3 5 7 11 13 15 17
Использовать oct2dec для отображения этих значений в десятичном формате.
outputs_dec = oct2dec(outputs)
outputs_dec = 8×8
0 2 4 6 8 10 12 14
1 3 5 7 9 11 13 15
0 2 4 6 8 10 12 14
1 3 5 7 9 11 13 15
0 2 4 6 8 10 12 14
1 3 5 7 9 11 13 15
0 2 4 6 8 10 12 14
1 3 5 7 9 11 13 15
Копирование матрицы выходных данных в myTrellis структура.
myTrellis.outputs = outputs
myTrellis = struct with fields:
numInputSymbols: 8
numOutputSymbols: 16
numStates: 8
nextStates: [8x8 double]
outputs: [8x8 double]
График outputs Матрица
Используйте commcnv_plotoutputs вспомогательная функция для построения графика outputs матрица для иллюстрации возможных выходных символов для данного состояния в зависимости от входного символа.
commcnv_plotoutputs(myTrellis.outputs, myTrellis.numOutputSymbols);

Проверка результирующей структуры решетки
istrellis(myTrellis)
ans = logical
1
Возвращаемое значение 1 подтверждает действительность шпалерной структуры.
Модель служит блочным испытательным стендом для реализованного сверточного кода. Модель показывает, как определить и использовать решетку, описывающую сверточный код. Конкретный код в этом примере не может быть описан набором полиномов генератора и соединения обратной связи. Решетка кода не может быть создана poly2trellis поскольку эта функция ожидает полиномы генератора и соединения обратной связи в качестве входных аргументов.
Структура сверточного кода
На этом рисунке показан сверточный код.

Структура примера
Основные компоненты в этом примере включают в себя:
Тракт передачи, который строит представление сверточного кодера с использованием дискретных низкоуровневых блоков задержки и суммы (XOR). Это представление очень похоже на рисунок, показывающий структуру сверточного кода.
Тракт передачи-приема, который строит представление того же сверточного кодера с использованием блока сверточного кодера. В этом случае описание кодера находится в пределах структурного параметра решетки блока. Эта часть модели также включает в себя блок декодера Витерби, который декодирует сверточный код.
Оба пути вычисляют количество битовых ошибок.
Открытие модели примера и изучение ее содержания
Открыть пример модели slex_commcnvencoder.

Результаты и отображение
При выполнении моделирования блок помечается Compare Encoder проверяет, что два представления кодера дают один и тот же результат. Блок с меткой Compare Encoder - Decoder проверяет, правильно ли работают кодер и декодер как пара. Каждый блок Display в модели показывает нулевую частоту ошибок, как и ожидалось.
Error rate for Compare Encoder signal: 0.000 Error rate for Compare Encoder-Decoder signal: 0.000