exponenta event banner

Генерация кода HDL для инверсного системного объекта потоковой матрицы

В этом примере показано, как HDL Coder™ реализует режим потоковой передачи матричной обратной операции с конфигурируемыми размерами.

Что инверсно матрице

Матрица X является обратимой, если существует матрица Y такого же размера, что XY = YX = I, где I является матрицей идентичности. Матрица Y называется обратной от X. Матрица, не имеющая обратной, является сингулярной. Квадратная матрица является сингулярной только тогда, когда её определитель точно равен нулю.

Обратное вычисление матрицы включает в себя следующие шаги:

  1. Расчет матрицы кофакторов

  2. Транспонирование матрицы кофактора

  3. Умножить возвратно-поступательно определителя входной матрицы на транспонирование кофакторной матрицы

Пример:

             A = [4 12 -16;12 37 -43;-16 -43 98];
Cofactors of 'A' will be calculated from matrix of minors
        cof(A) = [1777 488 76;488 136 20;76 20 4];
Transpose of cofactor matrix will be
     (cof(A))' = [1777 488 76;488 136 20;76 20 4];
Multiply reciprocal of determinant of 'A' with transpose of cofactor matrix
          Ainv = (1/det(A)) * (cof(A))'
               = [49.3611 -13.5556 2.1111;-13.5556 3.7778 -0.5556;2.1111 -0.5556 0.1111];

Матрица обратная: Гаусс-Джордан устранение

Чтобы найти обратную матрицу A, используя исключение Гаусса-Джордана, мы должны найти элементарные операции строк, которые уменьшают A до единичной матрицы (I), а затем выполнить те же операции над единичной матрицей (I), чтобы получить Ainv.

Вычисление Matrix Inverse с использованием устранения Гаусса-Джордана: Позвольте начать с матрицы A, и запишите ее с матрицей Identity рядом с ней: [A | I]

Цель состоит в том, чтобы сделать A единичной матрицей путем применения преобразований строк и правой боковой матрицы I также участвовал в преобразованиях строк, наконец, уменьшенных до Ainv.

Вычисление Ainv включает в себя следующие этапы:

  1. замена строк

  2. сделать диагональные элементы 1

  3. сделать недиагональные элементы равными 0

Пример:

                    (A)       (I)
                  1  2  3 | 1  0  0
      [A | I] =   2  5  3 | 0  1  0
                  1  0  8 | 0  0  1
Find the element with maximum value in the first column and swap the current
row with maximum element row
          swap R1 and R2 rows as R2 contains the largest values.
                  2  5  3 | 0  1  0
              =   1  2  3 | 1  0  0
                  1  0  8 | 0  0  1
Make the diagonal element in the first column as '1'
          R1 --> R1/2
                  1 2.5 1.5 | 0 0.5 0
              =   1   2   3 | 1   0 0
                  1   0   8 | 0   0 1
Make the non-diagonal elements in the first column as '0'
          R2 --> R2 - R1
          R3 --> R3 - R1
                  1  2.5 1.5 | 0  0.5 0
              =   0 -0.5 1.5 | 1 -0.5 0
                  0 -2.5 6.5 | 0 -0.5 1
Now column 1 has diagonal elements '1' and other elements as
'0'. This procedure is repeated for remaining columns and matrix A
will be reduced to identity matrix, Identity matrix will be reduced to Ainv.
                  1  0  0 | -40  16   9
              =   0  1  0 |  13  -5  -3
                  0  0  1 |   5  -2  -1
                    (I)        (Ainv)

Обратная матрица: разложение Холеского

Matrix Inverse с помощью разложения холески поддерживает только симметричные положительные определенные матрицы. Положительное определенное означает, что все собственные значения матрицы должны быть положительными.

Учитывая симметричную положительную определенную матрицу A:

           A   = L * L',             L  is the lower triangular matrix
                                     L' is the transpose of L
       inv(A)  = inv(L * L')
               = inv(L') * inv(L)
               = (inv(L))' * inv(L)
       Ainv    = Linv' * Linv,       Linv is the inverse of lower triangular matrix
                                     Ainv is the inverse of input matrix

Вычисление Ainv включает в себя следующие этапы:

  1. Вычисление нижней треугольной матрицы (L)

  2. Инверсия нижней треугольной матрицы (Linv)

  3. Умножение транспонирования Linv на Linv

Пример:

             A = [4 12 -16;12 37 -43;-16 -43 98];
Lower triangular matrix(L) will be computed using cholesky decomposition
             L = [2 0 0;6 1 0;-8 5 3];
Linv will be computed using forward substitution method
          Linv = [0.5 0 0;-3 1 0;6.3333 -1.6667 0.3333];
Multiply transpose of Linv with Linv
          Ainv = Linv' * Linv
               = [49.3611 -13.5556 2.1111;-13.5556 3.7778 -0.5556;2.1111 -0.5556 0.1111];

Преимущества использования ликвидации Gauss-Jordan

  • Gauss-Jordan Elimination поддерживает все квадратные матрицы.

  • Ликвидация Гаусса-Джордана поддерживает оба single и double типы данных.

Ограничения для реализации Cholesky

  • Матрицы, для которых вычисляется обратная, должны быть симметричными положительными-определенными.

  • Типы входных данных матриц должны быть single и блок должен использоваться в Native Floating Point режим.

  • Размер входных матриц не должен превышать 64 на 64.

Интерфейс матричной обратной подсистемы:

Описание инверсных портов матрицы:

Обратная реализация матрицы

В данном примере модель содержит три подсистемы: InputSubsystem, MatrixInverse, и OutputSubsystem. InputSubsystem является восходящим модулем, который сериализует матричный ввод в модуль обработки, когда ready сигнал включен. OutputSubsystem является нисходящим модулем, который десериализует данные из модуля обработки в матричный вывод, когда outEnable сигнал включен. MatrixInverse - модуль обработки, реализующий обратную операцию матрицы.

open_system('hdlcoder_streaming_mat_inv_max_lat_cholesky');
open_system('hdlcoder_streaming_mat_inv_max_lat_gauss_jordan');

Диаграммы обратной синхронизации матрицы:

Временная диаграмма для всей системы:

Временная диаграмма для стадии обработки (разложение по Холескому):

Временная диаграмма для этапа обработки (устранение Гаусса-Джордана):

Форма сигнала результата Modelsim (разложение Холеского)

Форма сигнала результата Modelsim (исключение Гаусса-Джордана)

Параметры обратного блока матрицы:

MatrixSize      : Enter size of input matrix as a positive integer.
LatencyStrategy : Select latency strategy from drop down menu
                   ({'ZERO, 'MIN', 'MAX'}) which should be same as HDL coder
                   latency strategy. User can see processing latency
                   based on the latency strategy.
AlgorithmType   : Select algorithm type from drop down menu({'CholeskyDecomposition',
                   'GaussJordanElimination'})

Использование обратного блока матрицы

  1. Установка параметров блока системы MATLAB.

  2. Выберите входную матрицу на основе размера матрицы.

  3. Создание кода HDL для подсистемы MatrixInverse.

Сгенерированный код и сгенерированная модель

После создания кода для подсистемы MatrixInverse генерируется код

Созданная модель содержит системный блок MatrixInverse MATLAB. При моделировании моделируемого кода выходные сигналы формирования сравниваются с выходными сигналами блока системы MATLAB.

Статистика синтеза

Разложение Холеского

Ликвидация Гаусса-Джордана

Связанные ссылки