MATLAB® сохраняет матричные данные и массивы (1-D, 2-D,...) в формате основной столбец в качестве вектора. Simulink® и генератор кода может хранить данные массива в формате основной или основной строки. Для массива, хранящегося в размещении основного столбца, элементы столбцов смежны в памяти. В основных размещениях элементы строк смежны. Размещение массива также упоминается как порядок, формат и представление. Порядок хранения элементов может быть важным для интегрирования, удобства использования и эффективности. Некоторые алгоритмы лучше работают с данными, хранящимися в конкретном порядке.
Языки и окружения программирования предполагают одно размещение массива для всех данных. MATLAB и Фортран по умолчанию используют размещение основной столбца, в то время как C и C++ используют размещение основной строки. С помощью Coder™ Simulink можно сгенерировать код C/C + +, который использует размещение основной строки или размещение основной столбца.
Память компьютера хранит данные в терминах одномерных массивов. Для примера, когда вы объявляете матрицу 3 на 3, программное обеспечение хранит эту матрицу как одномерный массив с девятью элементами. По умолчанию MATLAB хранит эти элементы с размещением массива основного столбца. Элементы каждого столбца смежны в памяти.
Рассмотрим матрицу A
:
A = 1 2 3 4 5 6 7 8 9
A
переводится в массив длиной 9 в следующем порядке: A(1) = A(1,1) = 1; A(2) = A(2,1) = 4; A(3) = A(3,1) = 7; A(4) = A(1,2) = 2; A(5) = A(2,2) = 5;
В формате основной колонки доступ к следующему элементу массива в памяти осуществляется путем увеличения первого индекса массива. Для примера эти пары элементов сохраняются последовательно в памяти:
A(i)
и A(i+1)
B(i,j)
и B(i+1,j)
C(i,j,k)
и C(i+1,j,k)
Матрица A
представлен в памяти по умолчанию с таким расположением:
1 4 7 2 5 8 3 6 9
В размещении массива с основной строкой язык программирования сохраняет элементы строк непрерывно в памяти. В размещении с основной строкой элементы массива хранятся как:
1 2 3 4 5 6 7 8 9
Можно хранить N-мерные массивы в основном или строковом размещении. В размещении с основным столбцом элементы из первого (крайнего левого) размерности или индекса смежны в памяти. В основной строке размещения элементы из последнего (крайнего правого) размерности или индекса смежны.
Для получения дополнительной информации о внутреннем представлении данных MATLAB, см. MATLAB Data.
Программное обеспечение генерации кода по умолчанию использует формат основной колонки по нескольким причинам:
Мир обработки сигналов и массивов в значительной степени находится в основной для столбцов размещении массива: библиотеках MATLAB, LAPack, Fortran90 и DSP.
Столбец эквивалентен каналу при обработке на основе кадров. В этом случае хранилище основной емкости столбца является более эффективным.
Массив с основным столбцом самосогласован со своими подматрицами компонентов:
Массив 2-D основной столбец является простой конкатенацией 1-D массивов.
Основной трехмерный массив столбца является простой конкатенацией 2-D массивов.
stride - это количество расположений памяти для индекса к следующему элементу той же размерности. Шаг первой размерности является одним элементом. Шаг n-го элемента измерения является продуктом размеров нижних размерностей.
Основной для строк n-D массивы имеют шаг 1 для наивысшей размерности. Манипуляции с Submatrix обычно получают доступ к набору данного , имеющего разброса в памяти, что не позволяет эффективно индексировать.
C использует формат основной строки. По умолчанию MATLAB и Simulink используют основной формат столбца. Можно сконфигурировать программное обеспечение генерации кода, чтобы сгенерировать код с размещением массива основной строки. Если вы интегрируете внешние Коды С с сгенерированным кодом, смотрите факторы, перечисленные в этой таблице.
Действие | Рассмотреть |
---|---|
Сконфигурируйте размещение массива модели для генерации кода. | В диалоговом окне Параметров конфигурации установите значение параметра конфигурации модели Array layout Column-major или Row-major . |
Включите эффективные алгоритмы основной строки для симуляции и генерации кода. | Выберите Use algorithms optimized for row-major array layout параметра конфигурации модели. |
Интеграция внешних функций кода С с сгенерированным кодом в размещение массива с основной строкой. | Создайте S-функции, которые интегрируют функции внешнего кода с сгенерированным кодом при помощи:
Используйте блок C Caller для вызова внешних функций C в Simulink. Задайте размещение массива пользовательских функций C с помощью параметра конфигурации модели Default function array layout. Вы также можете использовать |
Скомпилированный файл модели,
, представляет матрицы как векторы символов в синтаксисе MATLAB, без подразумеваемого формата памяти. Этот формат позволяет вам скопировать вектор символов из model
.rtw.rtw
файл, вставьте его в файл MATLAB и убедитесь, что MATLAB распознает его.
Для примера матрица 3 на 3 в блоке Constant
1 2 3 4 5 6 7 8 9
model
.rtw
какParameter { Identifier "Constant_Value" LogicalSrc P0 Protected no Value [1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0] CGTypeIdx 18 ContainerCGTypeIdx 19 ReferencedBy Matrix(1,4) [[0, -1, 0, 0];] GraphicalRef Matrix(1,2) [[0, 1];] BHMPrmIdx 0 GraphicalSource [0, 1] OwnerSysIdx [0, -1] VarGroupIdx [1, 0] WasAccessedAsVariable 1 }
The
файл объявляет фактическое хранилище для матричного параметра. Вы можете увидеть, что формат в основном размещении.model
_data.c
Parameters model_P = { /* Expression: [ [1,2,3] ; [4,5,6] ;[7,8,9]] * Referenced by: '<Root>/Constant ' */ { 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 } };
Для примера матрица 3 на 3 в блоке Constant
1 2 3 4 5 6 7 8 9
model
.rtw
какParameter { Identifier "Constant_Value" LogicalSrc P0 Protected no Value [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] CGTypeIdx 18 ContainerCGTypeIdx 19 ReferencedBy Matrix(1,4) [[0, -1, 0, 0];] GraphicalRef Matrix(1,2) [[0, 1];] BHMPrmIdx 0 GraphicalSource [0, 1] OwnerSysIdx [0, -1] VarGroupIdx [1, 0] WasAccessedAsVariable 1 }
The
файл объявляет фактическое хранилище для матричного параметра. Вы можете увидеть, что формат в основном размещении.model
_data.h
Parameters model_P = { /* Expression: [ [1,2,3] ; [4,5,6] ;[7,8,9]] * Referenced by: '<Root>/Constant ' */ { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 } };
Форматирование внутреннего хранилища данных Simulink и генератора кода отличается от форматирования внутреннего хранилища данных MATLAB только хранением комплексных массивов чисел. В MATLAB действительная и мнимая части хранятся в отдельных массивах. В Simulink и генераторе кода части хранятся в перемеженном формате. Цифры в памяти чередуются реальные, мнимые, реальные, мнимые и так далее. Это соглашение позволяет эффективно реализовывать маленькие сигналы на линиях Simulink, для блоков Mux и других блоков виртуальной манипуляции сигналами. Например, сигналы не активно копируют свои входы, только ссылки.
Генератор кода не поддерживает эти блоки для генерации кода в размещении массива с основной строкой.
Производная
Интегратор
Интегратор с ограниченной ответственностью
Интегратор второго порядка
Интегратор, Second-Order Limited
ПИД-регулятор
ПИД-регулятор (2DOF)
Пространство состояний
Передача Fcn
Задержка транспортировки
Переменная задержка по времени
Переменная задержка транспорта
Ноль-полюс
Интерпретированная функция MATLAB
Level-2 S-функцию MATLAB
Система MATLAB
Из электронной таблицы
IC
Сигналы переменного размера не поддерживаются для генерации кода основной строки.