Алгоритм прямой интерполяционной таблицы для размещения массива основных строк

Этот пример показывает, как Simulink выбирает вектор или матрицу 2-D из данных таблицы. В 2-D таблице выходным вектором может быть столбец или строка в зависимости от настройки конфигурации модели Используйте алгоритмы, оптимизированные для размещения массива с основной строкой. В этом примере алгоритм Direct Lookup Table оптимизирован для размещения массива с основной строкой. Алгоритм Direct Lookup Table, который оптимизирован для размещения массива с основным столбцом, также представлен как ссылка. Код, сгенерированный использованием алгоритма интерполяции больших строк, выполняет с лучшей скоростью и использованием памяти при работе с данными таблицы с размещением массива больших строк. Код, сгенерированный при помощи алгоритма column-major, лучше всего работает с размещением массива column-major.

В этом примере вы:

  • Вывод вектора или плоскости с помощью прямого поиска с алгоритмом column-major или row-major.

  • Сохраните семантику при переключении с алгоритма большого столбца на алгоритм большей строки.

  • Сгенерируйте код с помощью алгоритма основной строки и размещения массива.

Симулируйте при помощи алгоритма Row-Major - выводите вектор из 3-D таблицы

Откройте пример моделей 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. При импорте данных таблицы из файла необходимо переместить данные таблицы в файл перед ее импортом. Это сочетание сохраняет настраиваемую таблицу на протяжении всего рабочего процесса симуляции и генерации кода.

Генерация кода при помощи алгоритма Row-Major и размещения массива

После перестановки данных таблицы 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 уменьшает объем памяти для хранения данных. Эта оптимизация улучшает скорость выполнения.

Симулируйте при помощи алгоритма Row-Major - выводите плоскость из 3-D таблицы

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);

Похожие темы