Этот пример демонстрирует создание нестандартной решетчатой структуры для сверточного энкодера с незакодированными битами и обратной связью. Невозможно создать энкодер с помощью poly2trellis
потому что специфические спецификации для энкодера не соответствуют входным требованиям poly2trellis
.
Можно вручную создать структуру шпалеры, а затем использовать ее как вход шпалеры для энкодера и декодера. Блоки Convolutional Encoder и Viterbi Decoder, используемые в модели Convolutional Encoder с незакодированными битами и обратной связью, загружают решетчатую структуру, созданную здесь с помощью 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
Матрица
The 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
Матрица
The 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). Это представление выглядит очень похоже на рисунок, показывающий структуру сверточного кода.
Путь приема и передачи, который создает представление того же сверточного энкодера с использованием блока Convolutional Encoder. В этом случае описание энкодера находится в пределах параметра Trellis блока. Этот фрагмент модели также включает блок Viterbi Decoder, который декодирует сверточный код.
Оба пути вычисляют количество битовых ошибок.
Откройте модель примера и исследуйте ее содержимое
Откройте пример модели slex_commcnvencoder
.
Результаты и отображения
Когда вы запускаете симуляцию, блок помечается Compare Encoder
проверяет, что два представления энкодера дают одинаковый результат. Блок с меткой Compare Encoder - Decoder
проверяет, что энкодер и декодер работают правильно как пара. Каждое Отображение блок в модели показывает частоту нуля, как и ожидалось.
Error rate for Compare Encoder signal: 0.000 Error rate for Compare Encoder-Decoder signal: 0.000