exponenta event banner

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

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

В этом примере выполняется следующее:

  • Выведите вектор или плоскость с помощью прямого поиска с помощью алгоритма «столбец-мажор» или «строка-мажор».

  • Сохранение семантики при переходе от алгоритма типа столбец-мажор к алгоритму тип строка-мажор.

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

Моделирование с использованием основного алгоритма строки - вывод вектора из таблицы 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. Чтобы включить основные алгоритмы строк, откройте диалоговое окно Параметры конфигурации (Configuration Parameters). На панели Математика (Math) и Типы данных (Data Types) выберите параметр конфигурации Использовать алгоритмы, оптимизированные для компоновки основного массива строк (Use algoriths optimized for row-major array layout). Кроме того, в окне команды MATLAB введите:

set_param('rtwdemo_col_dlut3d_selvector','UseRowMajorAlgorithm','on');

3. На вкладке Моделирование (Simulation) щелкните Выполнить (Run), чтобы смоделировать модель. Наблюдать за изменением выходных измерений и числовых значений, зарегистрированных в переменной рабочей области yout.

Алгоритмы «столбец-большая» и «строка-большая» семантически различаются в выборе выходного вектора. Например, в таблице 2-D Simulink выбирает вектор столбца в качестве выходного для основного алгоритма столбца и вектор строки для основного алгоритма строки. В таблице с 3-D или более высоким измерением Simulink выбирает выходной вектор из первого измерения таблицы для основного алгоритма столбца и из последнего измерения таблицы для основного алгоритма строки. Элементы выбранного вектора являются смежными в табличной памяти. В этом примере последнее измерение является третьим измерением таблицы 3-D. Из-за семантического изменения алгоритмы таблицы прямого поиска типа «столбец-большая» и «строка-большая» выводят различные векторные и числовые значения.

Эти иллюстрации сравнивают векторные выходные данные алгоритмов таблицы прямого поиска строки и столбца в таблице 3-D.

Сохранение семантики с помощью перестановки таблицы

Для таблицы прямого поиска, которая выводит вектор или матрицу 2-D, семантика модели изменяется при переключении с алгоритма «столбец-мажор» на алгоритм «строка-мажор». Чтобы сохранить семантику или обеспечить тот же выход для тех же соединений ввода-вывода блока, необходимо переставить данные таблицы. В противном случае Simulink распространяет неверные размеры на дочерние блоки.

1. Блок rtwdemo_col_dlut3d_selvector/Direct Lookup Table (n-D) имеет 3D данные о столе, которые T3d = изменяют ([1:24], 3,2,4) и два входных порта со стоимостью 0 и 1 (оба - индексы на основе 0). Выбранный выходной вектор является T3d (:, 1,2) (индекс на основе 1) для основного алгоритма столбца. Чтобы сохранить семантику для алгоритма мажор-строка в той же модели, то есть выбрать тот же вектор с теми же входами порта индекса, переставьте таблицу как T3d_p = permute (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). В дополнение к включению параметра конфигурации Use algoriths optimized for row-major array layout, на панели Code Generation > Interface установите для параметра конфигурации Array layout значение 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 (C Code) щелкните Создать (Build), чтобы создать код C. В созданном коде memcpy функция заменяет for петли. Используя memcpy уменьшает объем памяти для хранения данных. Эта оптимизация повышает скорость выполнения.

Моделируйте при помощи главного рядом алгоритма - продукция самолет от 3D стола

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

Связанные темы