Создание, валидация и проверка пользовательской структуры треллиса

Создайте пользовательскую структуру треллиса

Этот пример демонстрирует создание нестандартной решетчатой структуры для сверточного энкодера с незакодированными битами и обратной связью. Невозможно создать энкодер с помощью 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);

Figure contains 2 axes. Axes 1 with title Plot of {\itNextStates} Matrix contains 8 objects of type line. Axes 2 is empty.

Создание 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);

Figure contains 2 axes. Axes 1 with title Plot of {\itOutputs} Matrix contains 8 objects of type line. Axes 2 is empty.

Проверяйте полученную структуру шпалеры

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