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

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

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

Figure contains 2 axes objects. Axes object 1 with title P l o t blank o f blank N e x t S t a t e s blank M a t r i x contains 8 objects of type line. Axes object 2 is empty.

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);

Figure contains 2 axes objects. Axes object 1 with title P l o t blank o f blank O u t p u t s blank M a t r i x contains 8 objects of type line. Axes object 2 is empty.

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

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