В этом примере показано, как Simulink выбирает вектор или 2D матрицу из табличных данных. В 2D таблице выходной вектор может быть столбцом или строкой в зависимости от алгоритмов Использования настройки конфигурации модели, оптимизированных для упорядоченного по строкам размещения массивов. В этом примере Прямой алгоритм Интерполяционной таблицы оптимизирован для упорядоченного по строкам размещения массивов. Прямой алгоритм Интерполяционной таблицы, который оптимизирован для упорядоченного по столбцам размещения массивов, также представлен как ссылка. Код, сгенерированный при помощи упорядоченного по строкам алгоритма интерполяции, выполняет с лучшей скоростью и использованием памяти при работе с табличными данными с упорядоченным по строкам размещением массивов. Код, сгенерированный при помощи упорядоченного по столбцам алгоритма, выполняет лучше всего с упорядоченным по столбцам размещением массивов.
В этом примере, вас:
Выведите вектор или плоскость при помощи прямого поиска с упорядоченным по столбцам или упорядоченным по строкам алгоритмом.
Сохраните семантику при переключении от упорядоченного по столбцам алгоритма до упорядоченного по строкам алгоритма.
Сгенерируйте код при помощи упорядоченного по строкам алгоритма и размещения массивов.
Открытые модели rtwdemo_row_dlut3d_selvector
в качестве примера и
rtwdemo_col_dlut3d_selvector
.
open_system('rtwdemo_row_dlut3d_selvector'); open_system('rtwdemo_col_dlut3d_selvector');
1. По умолчанию Simulink конфигурирует модель с упорядоченным по столбцам алгоритмом и упорядоченным по столбцам размещением массивов. Модель rtwdemo_col_dlut3d_selvector
предварительно сконфигурирован, чтобы использовать упорядоченные по столбцам алгоритмы. Симулируйте модель и наблюдайте выходной сигнал, сохраненный в переменной yout
рабочей области.
2. Чтобы включить упорядоченные по строкам алгоритмы, откройте диалоговое окно Configuration Parameters. На Математике и панели Типов данных, выберите алгоритмы Использования параметра конфигурации, оптимизированные для упорядоченного по строкам размещения массивов (Simulink) В качестве альтернативы в Окне Команды MATLAB, введите:
set_param('rtwdemo_col_dlut3d_selvector','UseRowMajorAlgorithm','on');
3. На вкладке Simulation нажмите Run, чтобы симулировать модель. Наблюдайте изменение в выходной размерности, и числовые значения вошли в систему переменная yout
рабочей области.
Упорядоченные по столбцам и упорядоченные по строкам алгоритмы отличаются семантически по выбору выходного вектора. Например, в 2D таблице, Simulink выбирает вектор-столбец, как выведено для упорядоченного по столбцам алгоритма и вектора-строки для упорядоченного по строкам алгоритма. В таблице с 3-D или более высокой размерностью Simulink выбирает выходной вектор из первой размерности таблицы для упорядоченного по столбцам алгоритма и от последней размерности таблицы для упорядоченного по строкам алгоритма. Элементы выбранного вектора непрерывны в табличной памяти устройства хранения данных. В этом примере последняя размерность является третьей размерностью 3-D таблицы. Из-за семантического изменения, упорядоченные по столбцам и упорядоченные по строкам прямые алгоритмы интерполяционной таблицы выводят различный размер вектора и числовые значения.
Эти рисунки сравнивают векторный выход упорядоченных по строкам и упорядоченных по столбцам прямых алгоритмов интерполяционной таблицы в 3-D таблице.
Для прямой интерполяционной таблицы, которая выводит векторную или 2D матрицу, изменение семантики модели, когда вы переключаетесь от упорядоченного по столбцам алгоритма до упорядоченного по строкам алгоритма. Чтобы сохранить семантику или гарантировать тот же выход, учитывая те же связи блока I/O, необходимо переставить табличные данные. В противном случае, Simulink propogates неправильные размерности с нисходящими блоками.
1. Блок rtwdemo_col_dlut3d_selvector/Direct Lookup Table (n-D)
имеет 3-D табличные данные, которые T3d = изменяют ([1:24], 3,2,4) и два входных порта со значением 0 и 1 (оба - индексы на основе 0). Выбранный выходной вектор является T3d (: 1,2) (индекс на основе 1) для упорядоченного по столбцам алгоритма. Чтобы сохранить семантику для упорядоченного по строкам алгоритма на той же модели, то есть, выбирают тот же вектор с теми же входными параметрами порта индекса, переставляют таблицу, как T3d_p = переставляют (T3d, [2,3,1]). Для упорядоченного по строкам алгоритма выбранный вектор является T3d_p (1,2, :).
T3d_str = get_param('rtwdemo_col_dlut3d_selvector/Direct Lookup Table (n-D)','Table'); set_param('rtwdemo_col_dlut3d_selvector/Direct Lookup Table (n-D)','Table',... ['permute(',T3d_str,',[2,3,1])']);
2. Когда вы данные о таблице импорта из файла, необходимо переставить табличные данные в файле прежде, чем импортировать его. Это сочетание сохраняет таблицу настраиваемой в рабочем процессе генерации кода и симуляции.
После перестановки табличных данных Simulink конфигурирует модель rtwdemo_col_dlut3d_selvector
для упорядоченной по строкам симуляции. Модель эквивалентна предварительно сконфигурированной модели rtwdemo_row_dlut3d_selvector
это переставило табличные данные и использует упорядоченный по строкам алгоритм.
1. Чтобы настроить эти модели для упорядоченной по строкам генерации кода, откройте диалоговое окно Configuration Parameters. В дополнение к включению алгоритмов Использования, оптимизированных для упорядоченного по строкам параметра конфигурации размещения массивов, на Генерации кода> Интерфейсная панель, устанавливает размещение параметра конфигурации Массивов на Row-Major
опция. Этот параметр конфигурации включает модель для упорядоченной по строкам генерации кода. В качестве альтернативы в Окне Команды MATLAB, введите:
% For model 'rtwdemo_col_dlut3d_selvector' set_param('rtwdemo_col_dlut3d_selvector', 'ArrayLayout','Row-major'); % For model 'rtwdemo_row_dlut3d_selvector' set_param('rtwdemo_row_dlut3d_selvector', 'ArrayLayout','Row-major');
2. В Прямой Интерполяционной таблице (n-D) диалоговое окно блока, исследуйте переставленные 3-D табличные данные.
3. Измените свою текущую папку в MATLAB® к перезаписываемой папке. На вкладке C Code нажмите Build, чтобы сгенерировать код С. В сгенерированном коде, memcpy
функционируйте заменяет for
циклы. Используя memcpy
уменьшает объем памяти для того, чтобы хранить данные. Эта оптимизация улучшает скорость выполнения.
open_system('rtwdemo_row_dlut3d_selplane'); open_system('rtwdemo_col_dlut3d_selplane');
1. Откройте модель rtwdemo_row_dlut3d_selplane
в качестве примера это выводит плоскую или 2D матрицу из 3-D таблицы.
2. Симулируйте и сгенерируйте код из модели путем повторения шагов, выполняемых на rtwdemo_col_dlut3d_selvector
. Упорядоченные по строкам и упорядоченные по столбцам прямые алгоритмы поиска, которые выводят 2D матрицу из 3-D таблицы, проиллюстрированы здесь.
close_system('rtwdemo_row_dlut3d_selvector',0); close_system('rtwdemo_col_dlut3d_selvector',0); close_system('rtwdemo_row_dlut3d_selplane',0); close_system('rtwdemo_col_dlut3d_selplane',0);