Этот пример показывает, как 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. Чтобы включить главные строкой алгоритмы, откройте диалоговое окно Model Configuration Parameters. На Математике и панели Типов данных, выберите алгоритмы Использования параметра конфигурации, оптимизированные для размещения главного массива строки. Также в Окне Команды MATLAB, введите:
set_param('rtwdemo_col_dlut3d_selvector','UseRowMajorAlgorithm','on');
3. Нажмите 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. Чтобы настроить эти модели для главной строкой генерации кода, откройте диалоговое окно Model 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 к перезаписываемой папке. На образцовой панели инструментов нажатие кнопки создает модель, чтобы сгенерировать код С. В сгенерированном коде функция 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);