Выполните оптимизацию типа данных с помощью пользовательских поведенческих ограничений

В этом примере показано, как оптимизировать типы данных с фиксированной точкой с помощью fxpopt использование пользовательских поведенческих ограничений в частотный диапазон. Модели Simulink ® в этом примере демонстрируют два способа использования блоков из библиотеки Верификация модели для создания пользовательских поведенческих ограничений на ОСШ (отношение сигнал/шум) низкочастотного фильтра. В первом примере вычислите приближение уровня шума; во втором примере вычислите различие ОСШ между исходной моделью и квантованной моделью, которая использует типы данных с фиксированной точкой.

Поведенческие ограничения для оптимизации типа данных

Оптимизация типа данных стремится минимизировать целевую функцию, такую как общая ширина битов, при сохранении исходного поведения системы в пределах заданного допуска. Во время оптимизации программное обеспечение устанавливает базовую линию путем симуляции исходной модели. Затем программное обеспечение создает различные версии вашей модели с фиксированной точкой и запускает симуляции, чтобы определить поведение с помощью новых типов данных. Оптимизация выбирает модель, которая минимизирует целевую функцию, одновременно удовлетворяя заданным поведенческим ограничениям.

Чтобы определить, является ли поведение новой реализации с фиксированной точкой приемлемым, оптимизация требует четко определенных поведенческих ограничений. Необходимо задать хотя бы одно поведенческое ограничение. Существует два способа задать поведенческие ограничения для использования с fxpopt:

1. Основанные на допуске сравнения симуляции с базовой ссылкой - Можно добавить допуски для сигналов, у которых включена регистрация сигналов с помощью addTolerance метод fxpOptimizationOptions. Допуск задает огибающую проходящего поведения относительно симуляции базовой линии модели.

2. Основанные на симуляции проверки типа «assertion» - можно использовать блоки в библиотеке блоков Верификации модели для создания пользовательских верификаций выражений. Активированные блоки верификации модели в вашей модели интерпретируются как поведенческие ограничения решателем оптимизации.

Можно также использовать комбинацию допусков сигнала и блоков верификации модели, чтобы задать поведенческие ограничения для вашей модели. Дополнительные сведения см. в разделе «Задание поведенческих ограничений».

Пример 1: Вычислите приближение шумового перекрытия

В этом примере вы преобразуете фильтр lowpass, чтобы использовать оптимизированные типы данных с фиксированной точкой, используя fxpopt. Чтобы убедиться, что встроенная версия все еще соответствует требованиям ОСШ, модель mLowPass_NoiseFloor содержит дополнительную логику для вычисления уровня шума сигнала на выходе фильтра. Этот сигнал затем направляется на Validate подсистема, которая использует блок Check State Области значений из библиотеки Верификации модели блоков. Если значения уровня шума, рассчитанные во время симуляции, находятся вне заданной статической области значений, fxpopt интерпретирует модель как не проходящую через поведенческие ограничения.

Чтобы начать, откройте систему, для которой вы хотите оптимизировать типы данных.

model = 'mLowPass_NoiseFloor';
sud = [model '/Embedded_Filter'];
open_system(model);

Используйте fxpopt функция для запуска оптимизации. Поскольку блок верификации модели используется для задания ограничений, не требуется задавать допуски сигнала, используя addTolerance метод fxpOptimizationOptions.

result = fxpopt(model,sud)
	+ Starting data type optimization...
	+ Checking for unsupported constructs.
	+ Preprocessing
	+ Modeling the optimization problem
		- Constructing decision variables
	+ Running the optimization solver
		- Evaluating new solution: cost 110, meets the behavioral constraints.
		- Updated best found solution, cost: 110
	+ Optimization has finished.
		- Neighborhood search complete.
		- Reached limit of number of iterations without updates to the current best solution.
	+ Fixed-point implementation that satisfies the behavioral constraints found. The best found solution is applied on the model.
		- Total cost: 110
		- Use the explore method of the result to explore the implementation.

result = 

  OptimizationResult with properties:

                  Model: 'mLowPass_NoiseFloor'
      SystemUnderDesign: 'mLowPass_NoiseFloor/Embedded_Filter'
           FinalOutcome: 'Fixed-point implementation that satisfies the behavioral constraints found. The best found solution is applied on the model.'
    OptimizationOptions: [1x1 fxpOptimizationOptions]
              Solutions: [1x1 DataTypeOptimization.OptimizationSolution]

Используйте explore метод для исследования проекта, содержащего оптимизированные типы данных с фиксированной точкой.

explore(result);

Пример 2. Вычисление различия ОСШ между исходной и квантованной моделями

В этом примере оптимизируйте типы данных с фиксированной точкой для модели lowpass, mLowPass_SNR, используя другой набор поведенческих ограничений, которые сравнивают ОСШ встроенного фильтра с ОСШ исходного фильтра, который использует типы данных двойной точности. The ValidateSNR сначала подсистема вычисляет ОСШ, а затем использует блок Check Static Lower Bound из библиотеки Верификации модели, чтобы утверждать, что ОСШ больше 60. Если ОСШ падает ниже этого заданного значения, то fxpopt интерпретирует модель как не проходящую через поведенческие ограничения.

Чтобы начать, откройте систему, для которой вы хотите оптимизировать типы данных.

model = 'mLowPass_SNR';
sud = [model '/Embedded_Filter'];
Source = 1;
open_system(model);

В данном примере задайте дополнительную симуляцию сценарии путем создания Simulink.SimulationInput объект. Используйте один вход синусоиды с частотой 100 рад/с и второй вход синусоиды с частотой 500 рад/с. fxpopt рассмотрит оба сценария симуляции во время оптимизации. Полный набор входных сигналов может помочь гарантировать, что полная рабочая область значений вашего проекта будет реализовываема в процессе оптимизации.

si(1) = Simulink.SimulationInput(model);
si(1) = si(1).setVariable('Source',1);
si(2) = Simulink.SimulationInput(model);
si(2) = si(2).setVariable('Source',2);

Создайте fxpOptimizationOptions объект. Используйте расширенные опции, чтобы задать сценарии симуляции, которые будут учитываться во время оптимизации.

options = fxpOptimizationOptions();
options.AdvancedOptions.SimulationScenarios = si;

Используйте fxpopt функция для запуска оптимизации. Поскольку блок верификации модели используется для задания ограничений, не требуется задавать допуски сигнала, используя addTolerance метод fxpOptimizationOptions.

result = fxpopt(model,sud,options);
	+ Starting data type optimization...
	+ Checking for unsupported constructs.
	+ Preprocessing
	+ Modeling the optimization problem
		- Constructing decision variables
	+ Running the optimization solver
		- Evaluating new solution: cost 112, does not meet the behavioral constraints.
		- Evaluating new solution: cost 168, does not meet the behavioral constraints.
		- Evaluating new solution: cost 224, does not meet the behavioral constraints.
		- Evaluating new solution: cost 280, does not meet the behavioral constraints.
		- Evaluating new solution: cost 336, does not meet the behavioral constraints.
		- Evaluating new solution: cost 392, does not meet the behavioral constraints.
		- Evaluating new solution: cost 448, does not meet the behavioral constraints.
		- Evaluating new solution: cost 504, does not meet the behavioral constraints.
		- Evaluating new solution: cost 560, does not meet the behavioral constraints.
		- Evaluating new solution: cost 616, does not meet the behavioral constraints.
		- Evaluating new solution: cost 672, does not meet the behavioral constraints.
		- Evaluating new solution: cost 728, does not meet the behavioral constraints.
		- Evaluating new solution: cost 784, does not meet the behavioral constraints.
		- Evaluating new solution: cost 840, does not meet the behavioral constraints.
		- Evaluating new solution: cost 896, does not meet the behavioral constraints.
		- Evaluating new solution: cost 952, does not meet the behavioral constraints.
		- Evaluating new solution: cost 1008, meets the behavioral constraints.
		- Updated best found solution, cost: 1008
		- Evaluating new solution: cost 1007, meets the behavioral constraints.
		- Updated best found solution, cost: 1007
		- Evaluating new solution: cost 1006, meets the behavioral constraints.
		- Updated best found solution, cost: 1006
		- Evaluating new solution: cost 1005, meets the behavioral constraints.
		- Updated best found solution, cost: 1005
		- Evaluating new solution: cost 1004, meets the behavioral constraints.
		- Updated best found solution, cost: 1004
		- Evaluating new solution: cost 1003, meets the behavioral constraints.
		- Updated best found solution, cost: 1003
		- Evaluating new solution: cost 1002, meets the behavioral constraints.
		- Updated best found solution, cost: 1002
		- Evaluating new solution: cost 1000, meets the behavioral constraints.
		- Updated best found solution, cost: 1000
		- Evaluating new solution: cost 999, does not meet the behavioral constraints.
		- Evaluating new solution: cost 999, does not meet the behavioral constraints.
		- Evaluating new solution: cost 999, does not meet the behavioral constraints.
		- Evaluating new solution: cost 999, does not meet the behavioral constraints.
		- Evaluating new solution: cost 999, does not meet the behavioral constraints.
		- Evaluating new solution: cost 999, does not meet the behavioral constraints.
		- Evaluating new solution: cost 999, meets the behavioral constraints.
		- Updated best found solution, cost: 999
		- Evaluating new solution: cost 998, meets the behavioral constraints.
		- Updated best found solution, cost: 998
		- Evaluating new solution: cost 997, meets the behavioral constraints.
		- Updated best found solution, cost: 997
		- Evaluating new solution: cost 996, meets the behavioral constraints.
		- Updated best found solution, cost: 996
		- Evaluating new solution: cost 995, meets the behavioral constraints.
		- Updated best found solution, cost: 995
		- Evaluating new solution: cost 994, meets the behavioral constraints.
		- Updated best found solution, cost: 994
		- Evaluating new solution: cost 981, meets the behavioral constraints.
		- Updated best found solution, cost: 981
		- Evaluating new solution: cost 980, meets the behavioral constraints.
		- Updated best found solution, cost: 980
		- Evaluating new solution: cost 979, meets the behavioral constraints.
		- Updated best found solution, cost: 979
		- Evaluating new solution: cost 978, meets the behavioral constraints.
		- Updated best found solution, cost: 978
		- Evaluating new solution: cost 977, meets the behavioral constraints.
		- Updated best found solution, cost: 977
		- Evaluating new solution: cost 976, does not meet the behavioral constraints.
		- Evaluating new solution: cost 976, meets the behavioral constraints.
		- Updated best found solution, cost: 976
		- Evaluating new solution: cost 975, does not meet the behavioral constraints.
		- Evaluating new solution: cost 975, meets the behavioral constraints.
		- Updated best found solution, cost: 975
		- Evaluating new solution: cost 974, does not meet the behavioral constraints.
		- Evaluating new solution: cost 974, meets the behavioral constraints.
		- Updated best found solution, cost: 974
		- Evaluating new solution: cost 973, does not meet the behavioral constraints.
		- Evaluating new solution: cost 973, meets the behavioral constraints.
		- Updated best found solution, cost: 973
		- Evaluating new solution: cost 972, meets the behavioral constraints.
		- Updated best found solution, cost: 972
		- Evaluating new solution: cost 971, meets the behavioral constraints.
		- Updated best found solution, cost: 971
		- Evaluating new solution: cost 970, meets the behavioral constraints.
		- Updated best found solution, cost: 970
		- Evaluating new solution: cost 969, meets the behavioral constraints.
		- Updated best found solution, cost: 969
		- Evaluating new solution: cost 968, meets the behavioral constraints.
		- Updated best found solution, cost: 968
		- Evaluating new solution: cost 967, meets the behavioral constraints.
		- Updated best found solution, cost: 967
		- Evaluating new solution: cost 966, meets the behavioral constraints.
		- Updated best found solution, cost: 966
		- Evaluating new solution: cost 965, does not meet the behavioral constraints.
		- Evaluating new solution: cost 965, does not meet the behavioral constraints.
		- Evaluating new solution: cost 965, does not meet the behavioral constraints.
		- Evaluating new solution: cost 965, meets the behavioral constraints.
		- Updated best found solution, cost: 965
		- Evaluating new solution: cost 964, does not meet the behavioral constraints.
		- Evaluating new solution: cost 964, does not meet the behavioral constraints.
		- Evaluating new solution: cost 964, does not meet the behavioral constraints.
		- Evaluating new solution: cost 964, does not meet the behavioral constraints.
		- Evaluating new solution: cost 964, meets the behavioral constraints.
		- Updated best found solution, cost: 964
		- Evaluating new solution: cost 963, does not meet the behavioral constraints.
	+ Optimization has finished.
		- Neighborhood search complete.
		- Maximum number of iterations completed.
	+ Fixed-point implementation that satisfies the behavioral constraints found. The best found solution is applied on the model.
		- Total cost: 964
		- Use the explore method of the result to explore the implementation.

Используйте explore метод для исследования проекта, содержащего оптимизированные типы данных с фиксированной точкой.

explore(result);