Генерация 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 к единичной матрице (I), и затем выполнить те же операции на Единичной матрице (I), чтобы получить Ainv.

Расчет обратной матрицы с использованием Исключения по Гауссу-Жордану: Позвольте начать с матрицы А и запишите его с помощью матрицы Тождеств рядом с ней: [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)

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

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

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

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

Преимущества использования исключения по Гауссу-Жордану

  • Исключение по Гауссу-Жордану поддерживает все квадратные матрицы.

  • Исключение по Гауссу-Жордану поддерживает обе single и double типы данных.

Ограничения для реализации Холецкого

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

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

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

Обратная матрица подсистемы:

Обратная матрица портов:

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

Эта модель примера содержит три подсистемы: InputSubsystem, MatrixInverse, и OutputSubsystem. The InputSubsystem - вышестоящий модуль, который сериализует матричный вход в обрабатывающий модуль, когда ready включен сигнал. The OutputSubsystem - дочерний модуль, который десериализует данные из модуля обработки в матричный выход, когда outEnable включен сигнал. The 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 System.

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

  3. Сгенерируйте HDL-код для подсистемы MatrixInverse.

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

После генерации кода для подсистемы MatrixInverse сгенерированный код будет

Сгенерированная модель содержит блок MatrixInverse MATLAB System. Во время моделирования симуляции генерации кода сравниваются с выходами блоков MATLAB System.

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

Факторизация Холецкого

Исключение по Гауссу-Жордану

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