Этот Lookup Table Optimizer оптимизирует интервалы между точками останова и типами данных интерполяционной таблицы, чтобы уменьшить память, используемую интерполяционной таблицей. Используя Lookup Table Optimizer и его эквивалент в командной строке, можно:
Оптимизируйте существующий Lookup Table блок.
Сгенерируйте интерполяционную таблицу из Simulink® блок, включая Math Function блок или подсистему.
Сгенерируйте интерполяционную таблицу из указателя на функцию или функцию.
Чтобы оптимизировать существующую интерполяционную таблицу, откройте модель, содержащую блок Lookup Table.
load_system('sldemo_fuelsys'); open_system('sldemo_fuelsys/fuel_rate_control/airflow_calc');
Pumping Constant
Lookup Table блок.Чтобы открыть Lookup Table Optimizer, выберите Pumping Constant
Lookup Table блок. Контекстно-зависимая вкладка Lookup Table появится на панели инструментов Simulink. На вкладке Lookup Table выберите Lookup Table Optimizer.
Выберите тип блока, который необходимо оптимизировать. Чтобы оптимизировать блок или подсистему Simulink, включая существующий Lookup Table блок или Math Function блок, выберите Simulink block or subsystem. Чтобы сгенерировать приближение интерполяционной таблицы для указателя на функцию, выберите MATLAB Function Handle.
В этом примере выберите Simulink block or subsystem, чтобы оптимизировать Pumping Constant
интерполяционная таблица. Нажмите Next.
В разделе Block Information введите путь к Pumping Constant
Lookup Table блок. Выберите блок в модели, затем щелкните Get Current Block в Lookup Table Optimizer, чтобы автоматически заполнить путь блока.
Щелкните Collect Current Values from Model, чтобы обновить диаграмму модели и позволить Lookup Table Optimizer автоматически собирать информацию, необходимую для процесса оптимизации, включая текущий тип выходных данных и входное число, тип данных и область значений значений. Можно вручную отредактировать все эти поля, чтобы задать области значений и типы данных, отличные от тех, которые в данный момент заданы в блоке.
Задайте Desired Output Data Type сгенерированной интерполяционной таблицы как numerictype
или Simulink.NumericType
объект.
Задайте тип данных каждого входа в блок как numerictype
или Simulink.NumericType
объект.
Задайте минимальное и максимальное значения каждого входа сгенерированной интерполяционной таблицы как скаляры в таблице.
В данном примере используйте текущие значения, заданные в модели. Нажмите Next.
Задайте ограничения для использования в оптимизации. Установите Output Error Tolerance, которая является приемлемой для вашего проекта.
Абсолютная погрешность определяется как абсолютное значение различия между исходным значением выхода и выхода значением оптимизированной интерполяционной таблицы.
Относительная погрешность измеряет ошибку относительно значения в этой точке, заданную как неотрицательную.
Задайте допустимые размеры слова в качестве вектора на основе типов, которые эффективны для вашего предполагаемого аппаратного целевого устройства. Для примера, если вы хотите позволить оптимизатору учитывать только 8-, 16- и 32-битные типы, задайте [8 16 32]
в поле Allowed Word Lengths (Vector).
Чтобы задать дополнительные свойства для оптимизированной интерполяционной таблицы, нажмите LUT Specification. Для получения дополнительной информации о каждом из свойств смотрите FunctionApproximation.Options
. В этом примере используйте значения по умолчанию для этих свойств.
Укажите опции оптимизации, такие как максимальное время или максимальное использование памяти для сгенерированной интерполяционной таблицы, нажав кнопку.
После установки ограничений нажмите кнопку Optimize.
Опционально можно принять решение остановить решатель оптимизации, прежде чем решатель оптимизации будет завершен, нажав Stop. Оптимизатор выберет лучшее решение, найденное в момент выбора кнопки Stop и отобразит его в приложении.
Когда оптимизация завершена, оптимизатор сообщает память оптимизированной интерполяционной таблицы. Можно отредактировать ограничения и запустить оптимизацию снова, чтобы добиться дальнейшего сокращения памяти.
Используя настройки по умолчанию, Lookup Table Optimizer уменьшает память, используемую Pumping Constant
Lookup Table блок от 1516 байтов до 505 байтов (66,69%).
Нажмите Next.
Щелкните Show Comparison Plot, чтобы просмотреть график вывода исходного блока по сравнению с выходом новой оптимизированной интерполяционной таблицы.
Щелкните Replace Original Function, чтобы сгенерировать новую интерполяционную таблицу с помощью оптимизированных настроек, найденных приложением, и заменить исходный блок.
Новый блок является маскированной подсистемой варианта, в которой активный вариант является блоком оптимизированной интерполяционной таблицы. Неактивным вариантом является исходный блок.
Можно итерационно изменить блок приближения путем редактирования настроек, используемых во время оптимизации, чтобы сгенерировать новую интерполяционную таблицу.
Дважды кликните блок Pumping Constant. Чтобы отредактировать настройки оптимизации, в диалоговом окне Параметров блоков нажмите Redesign approximate.
В Lookup Table Optimizer щелкните Next, чтобы перейти к Create странице приложения. В этом примере отредактируйте абсолютное и относительные погрешности к немного большему значению, чтобы можно было дополнительно уменьшить размер интерполяционной таблицы.
Установите допуск Absolute равным 0.01
, или 1%.
Установите допуск Relative равным 0.01
, или 1%.
Щелкните Optimize, чтобы оптимизировать интерполяционную таблицу с новыми опциями.
Используя эти значения допуска, новая интерполяционная таблица использует только 304 байта памяти.
Нажмите Next. На странице Results нажмите кнопку Replace Original Function, чтобы заменить первую итерацию блока приближения этой новейшей итерацией.
В модели дважды кликните блок Pumping Constant, чтобы открыть Параметры блоков. В Параметры блоков отображаются настройки, используемые для приближения
Чтобы сделать исходный блок или подсистему активным вариантом, рядом с Select desired function version, выберите Original
.
Чтобы удалить приближение интерполяционной таблицы из модели, в Параметры блоков нажмите Revert to original.
FunctionApproximation.LUTMemoryUsageCalculator
| FunctionApproximation.LUTSolution
| FunctionApproximation.Options
| FunctionApproximation.Problem