Этот пример демонстрирует создание нестандартной структуры решетки для сверточного энкодера с незакодированными битами и обратной связью. Энкодер не может быть создан с помощью poly2trellis
, потому что специфические спецификации для энкодера не совпадают с входными требованиями poly2trellis
.
Даже при том, что poly2trellis
не используется, чтобы создать структуру решетки, можно вручную создать структуру, затем использовать ту структуру решетки в качестве входной структуры решетки для энкодера и декодера. Сверточные блоки Энкодера и Декодера Витерби, используемые в модели Convolutional Encoder with Uncoded Bits и Feedback, загружают структуру решетки, созданную здесь с помощью коллбэка PreLoadFcn
.
Сверточный энкодер
Создайте уровень 3/4 сверточный энкодер со связью обратной связи, бит MSB которой остается незакодированным.
Объявите переменные согласно спецификациям.
k = 3; n = 4; constraintLength = 4;
Создайте структуру решетки
Решетка представлена структурой со следующими полями:
numInputSymbols
– Количество вводимых символов
numOutputSymbols
– Количество выходных символов
numStates
– Количество состояний
nextStates
– Следующая матрица состояния
выходные параметры
Выходная матрица
Для получения дополнительной информации об этих полях структуры, смотрите 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 Matrix
Матрица 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