Этот пример показывает, как Simulink выбирает вектор или матрицу 2-D из данных таблицы. В 2-D таблице выходным вектором может быть столбец или строка в зависимости от настройки конфигурации модели Используйте алгоритмы, оптимизированные для размещения массива с основной строкой. В этом примере алгоритм Direct Lookup Table оптимизирован для размещения массива с основной строкой. Алгоритм Direct Lookup Table, который оптимизирован для размещения массива с основным столбцом, также представлен как ссылка. Код, сгенерированный использованием алгоритма интерполяции больших строк, выполняет с лучшей скоростью и использованием памяти при работе с данными таблицы с размещением массива больших строк. Код, сгенерированный при помощи алгоритма column-major, лучше всего работает с размещением массива column-major.
В этом примере вы:
Вывод вектора или плоскости с помощью прямого поиска с алгоритмом column-major или row-major.
Сохраните семантику при переключении с алгоритма большого столбца на алгоритм большей строки.
Сгенерируйте код с помощью алгоритма основной строки и размещения массива.
Откройте пример моделей 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. Чтобы включить алгоритмы основной строки, откройте диалоговое окно Параметров конфигурации. На панели Math and Data Types выберите параметр конфигурации Use algorithms optimized for row-major array layout Альтернативно, в Командном окне MATLAB введите:
set_param('rtwdemo_col_dlut3d_selvector','UseRowMajorAlgorithm','on');
3. На вкладке Simulation нажмите запуск, чтобы симулировать модель. Наблюдайте изменение выхода размерности и числовых значений, зарегистрированных в переменной рабочей области yout.
Алгоритмы основной и основной строки различаются семантически в выборе выхода вектора. Для примера в 2-D таблице Simulink выбирает вектор-столбец в качестве вывода для алгоритма основного столбца и вектора-строки для алгоритма большей строки. В таблице с 3-D или более высокой размерностью Simulink выбирает выходной вектор из первой размерности таблицы для алгоритма большого столбца и из последней размерности таблицы для алгоритма большей строки. Элементы выбранного вектора смежны в памяти хранилища таблиц. В этом примере последняя размерность является третьей размерностью 3-D таблицы. Из-за семантического изменения алгоритмы прямой интерполяционной таблицы с основной и основной строками выводят различные размеры вектора и числовые значения.
Эти рисунки сравнивают векторный выход алгоритмов прямой интерполяционной таблицы основной строки и основной столбца в 3-D таблице.
Для прямой интерполяционной таблицы, который выводит вектор или 2-D матрицу, семантика модели изменяется, когда вы переключаетесь с алгоритма большого столбца на алгоритм большей строки. Чтобы сохранить семантику или гарантировать тот же выход при тех же соединениях ввода-вывода блоков, необходимо переместить данные таблицы. В противном случае Simulink распространяет неправильные размерности на нисходящие блоки.
1. Блок rtwdemo_col_dlut3d_selvector/Direct Lookup Table (n-D)
имеет 3-D данных таблицы T3d = reshape ([1:24], 3,2,4) и два входных порта со значениями 0 и 1 (оба основаны на 0 индексах). Выбранный выходной вектор является T3d (:, 1,2) (на основе 1 индекса) для алгоритма основного столбца. Чтобы сохранить семантику для алгоритма большой строки на той же модели, то есть выбрать тот же вектор с теми же входами порта индекса, переместите таблицу как T3d_p = transfute (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. Чтобы настроить эти модели для генерации кода основной строки, откройте диалоговое окно Параметров конфигурации. В дополнение к включению алгоритмов Use, оптимизированных для параметра конфигурации размещения массива с основной строкой, на панели Генерация Кода > Interface установите размещение параметра конфигурации Array на 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. В Интерполяционную таблицу Direct диалогового окна блока (n-D) исследуйте данные перестановочной 3-D таблицы.
3. Измените текущую папку в MATLAB ® на папку с возможностью записи. На вкладке Кода С нажатия кнопки Build, чтобы сгенерировать Код С. В сгенерированном коде memcpy функция заменяет
for
циклы. Использование memcpy
уменьшает объем памяти для хранения данных. Эта оптимизация улучшает скорость выполнения.
open_system('rtwdemo_row_dlut3d_selplane'); open_system('rtwdemo_col_dlut3d_selplane');
1. Откройте пример модели rtwdemo_row_dlut3d_selplane
который выводит плоскость или 2-D матрицу из таблицы 3-D.
2. Симулируйте и сгенерируйте код из модели путем повторения шагов, выполненных на rtwdemo_col_dlut3d_selvector
. Алгоритмы прямого поиска основной строки и основной строки, которые выводят матрицу 2-D из 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);