Этот пример демонстрирует создание нестандартной структуры решетки для сверточного энкодера с незакодированными битами и обратной связью. Энкодер не может быть создан с помощью poly2trellis
потому что специфические технические требования для энкодера не совпадают с входными требованиями poly2trellis
.
Можно вручную создать структуру решетки, и затем использовать ее в качестве входной структуры решетки для энкодера и декодера. Сверточные блоки Энкодера и Декодера Витерби, используемые в модели Convolutional Encoder with Uncoded Bits и Feedback, загружают структуру решетки, созданную здесь с помощью PreLoadFcn
'callback'.
Сверточный энкодер
Создайте уровень 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);
Create 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) блоки. Это представление выглядит очень похожим на фигуру, показывающую структуру сверточного кода.
Приёмный путь передачи, который создает представление того же сверточного энкодера с помощью блока Convolutional Encoder. В этом случае описание энкодера в параметре структуры Решетки блока. Этот фрагмент модели также включает блок Viterbi Decoder, который декодирует сверточный код.
Оба пути вычисляют количество битовых ошибок.
Открытая модель в качестве примера и исследует свое содержимое
Откройте модель 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