exponenta event banner

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

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

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

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

Создать 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);

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). Это представление очень похоже на рисунок, показывающий структуру сверточного кода.

  • Тракт передачи-приема, который строит представление того же сверточного кодера с использованием блока сверточного кодера. В этом случае описание кодера находится в пределах структурного параметра решетки блока. Эта часть модели также включает в себя блок декодера Витерби, который декодирует сверточный код.

  • Оба пути вычисляют количество битовых ошибок.

Открытие модели примера и изучение ее содержания

Открыть пример модели 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