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

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

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

Матрица A X является обратимой, если там существует матрица Y, одного размера таким образом, что XY = YX = я, где я - Единичная матрица. Матрица 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];

Обращение матриц: Исключение по Гауссу-Жордану

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

Расчет Обратной матрицы с помощью Исключения по Гауссу-Жордану: Позвольте запускаются с матрицы А и записывают его с Единичной матрицей рядом с ним: [| я]

Цель состоит в том, чтобы сделать единичную матрицу путем применения преобразований строки и правой матрицы стороны, я также участвовал в преобразованиях строки, наконец уменьшаемых до 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)

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

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

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

           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Обращение матриц, и 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 System.

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

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

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

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

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

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

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

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

Ссылки по теме