Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
105
Добавлен:
07.03.2016
Размер:
6.42 Mб
Скачать
  • Complex

  • Precision

  • String

  • Array

  • Filename,

    то необходимо выполнить несколько дополнительных шагов.

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

    Чтобы создать ссылку на строку, используются функции sprintf и strcat, синтаксис которых совпадает с аналогичными функциями в языке программирования C.

    Замена комплексного параметра

    Следующий пример, показанный на рисунке 4-2, демонстрирует, как произвести замену параметра, представленного строкой.

    Рисунок 4-2

    Процесс установки изменяемого параметра похож на предыдущий пример. Здесь для определения изменяющегося параметра используется компонент VAR. Теперь рассмотрим поближе компонент WaveformCx, который является источником сигналов комплексного типа.

    Параметр, который будем изменять, – мнимая часть первого элемента двухэлементного массива комплексных чисел. Т.к. массив комплексных чисел системой HP Ptolemy трактуется как строка, для определения данной строки используем функцию sprintf, после чего выполняем замену мнимой части, как показано ниже:

    Value=sprintf("(1+j*%f)(2+j*4)", X)

    Строка "(1+j*%f)(2+j*4)", X сообщает программе, что необходимо вычислить математическое выражение для переменной X и преобразовать его в строку. %а – формат, используемый для значения с плавающей точкой (вещественного числа).

    Теперь, если изменять значение переменной X от 0 до 3, мы получим следующий результат:

    3.3 Выполнение многомерных замен

    Иногда необходимо изменять две и более переменных и увидеть общий (комплексный) результат. Например, задача анализа частоты возникновения ошибочных битов в коммуникационной системе для двух способов модуляции и при трёх различных уровнях мощности. Здесь для каждого способа модуляции X существуют три уровня мощности Y. Для выполнения такого моделирования потребуются два компонента Parameter Sweep.

    Пример другого проекта с многомерной заменой параметров представлен на рисунке 4-3.

    Рисунок 4-3

    В этом примере компонент RampFloat используется в качестве источника данных для компонента DownSample, результаты сохраняются в компоненте NumericSink. Замена параметров Factor=X и Phase=Y компонента DownSample происходит одновременно. X изменяется от 10 до 20 с шагом 2. Y изменяется от 0 до 5 с шагом 5. Всего на графике получается 6*2 линий:

    Рисунок 4-4

    Каждой линии соответствует набор значений X при постоянном значении параметра Y.

    4. Параметрическая оптимизация

    Параметрическая оптимизация представляет собой итерационный процесс, в ходе которого программа автоматически изменяет параметры проекта в указанных пользователем диапазонах для достижения указанных пользователем целей (значений некоторых характеристик проекта).

    В основе этой возможности лежат те же принципы, что и в симуляторах аналоговых и ВЧ-схем системы ADS. В данной главе эти функции описываются на примерах обработки сигналов и указываются места, где системой HP Ptolemy производится оптимизация.

    Пример 1. Оптимизация усилителя

    Следующий пример используется для объяснения того, как производится оптимизация в HP Ptolemy. Для этого создадим проект, изображённый на рисунке 5-1.

    Проект состоит из следующих компонентов:

  • источник постоянного сигнала (Const) из библиотеки Numeric Sources с параметром Level=0.5;

  • усилитель (Gain) с параметром Gain=0.5;

  • элемент вывода данных со значениями параметров по умолчанию;

  • контроллер потока данных (DataFlow) с параметрами по умолчанию.

    Будет оптимизироваться значение параметра Gain компонента G1. Условие окончания оптимизации – постоянный уровень (равный 5) выходного сигнала.

    Рисунок

    Оптимизация – это процесс изменения значений некоторых параметров для достижения заданных характеристик. Программы оптимизации сравнивают вычисленные и желаемые результаты и изменяют значения параметров с целью приближения вычисляемых результатов к желаемым.

    Например, в качестве цели оптимизации может быть отклик фильтра FIR. Нижняя и верхняя приемлемые границы производительности используются для ограничения пространства поиска. Эти параметры могут быть функциями фиксированных или изменяемых переменных, которые вычисляются в самом начале процесса оптимизации.

    Оптимизатор выполняет следующие действия:

  1. запуск программы моделирования;

  2. сравнение результатов с целевой функцией;

  3. изменение параметров схемы для приближения результатов моделирования к целевой функции;

  4. запуск программы моделирования с новыми параметрами.

Минимальные требования для выполнения оптимизации

Для выполнения оптимизации необходимо, чтобы были выполнены следующие условия:

  • по крайней мере один параметр в проекте должен быть описан как оптимизируемая переменная. Для этого существует множество параметров, например, оптимизация должна быть непрерывной или дискретной;

  • должна быть указана хотя бы одна цель оптимизации (компонент Goal) и помещена в окно проекта;

  • должен быть указан оптимизируемый параметр (компонент Optim) и помещён в окно проекта;

  • должен присутствовать один контроллер потока данных (DataFlow).

Компоненты Goal и Optim можно найти в библиотеке или с помощью панели компонентов Controllers.

Установка параметров компонентов для оптимизации

Последовательность действий по установке оптимизируемых параметров компонентов:

  1. Выберите необходимый компонент и разместите его в окне проекта. В данном примере используется компонент Gain.

  2. Дважды щёлкните на компоненте для редактирования его параметров.

  1. В диалоговом окне компонента в поле Select Parameter выберите параметр, подлежащий оптимизации (например, Gain), после этого нажмите кнопку Optimization/Statistics Setup (эта кнопка доступна только для параметров, которые можно оптимизировать). Появится диалоговое окно Setup с активной вкладкой Optimization.

  2. Из выпадающего списка Optimization Status выберите Enabled, чтобы получить возможность редактирования необходимых полей. Enabled – параметр будет оптимизирован во время моделирования; Disabled временно исключает этот параметр из процесса оптимизации; Clear – выбранные переменные не будут принимать участие в процессе оптимизации и исключаются из списка оптимизируемых параметров.

  3. Из выпадающего списка Type выберите надлежащий способ изменения значения переменной при оптимизации (Continuous (непрерывное) и Discrete (дискретное)). Вообще, режим Discrete используется, когда доступны только некоторые значения, как., например, в случае параметров, принимающих значения с фиксированной точкой. Для данного примера выберите Continuous.

  4. Из выпадающего списка Format выберите надлежащий формат оптимизации (min/max, +/– Delta %, +/– Delta, Unconstrained). Желательно выбирать диапазон как можно уже, в пределах которого будет происходить оптимизация. Использование больших или неограниченных (Unconstrained) диапазонов обычно приводит к резкому увеличению времени моделирования. Для данного примера выберите min/max.

  5. Если выбран формат min/max, Вы можете задать значения номинала (если Вы уверены в правильности этого значения), минимума и максимума в соответствующих полях ввода, а также указать единицы измерения заданных величин. Если выбран формат Unconstrained, то необходимо задать лишь номинал и его единицу измерения. Если выбран один из форматов Delta, то необходимо будет задать соответствующие величины. Для данного примера задайте 0.5 в качестве номинального значения (Nominal Value), 0 – в качестве минимального значения (Minimal Value) и 20 – в качестве максимального значения (Maximum Value).

Размещение контроллера потока данных (DataFlow)

Как при любом моделировании, контроллер потока данных должен быть помещён в проект перед началом оптимизации. Для нашего примера оставьте все значения по умолчанию, а значение параметра StopTime измените на 10.

Установка целей оптимизации

Установка целей оптимизации осуществляется путём помещения компонента Goal в проект и редактирования его параметров. Этот компонент можно найти в библиотеке или на панели компонентов Controllers.

При необходимости можно задать несколько целей (и разместить несколько компонентов Goal). Цели, которые будут использованы при оптимизации, указываются с помощью компонента NominalOptimization.

Чтобы задать цели оптимизации с помощью диалогового окна, необходимо следующее:

  1. Если необходимо, измените имя компонента Goal.

  2. В списке Select Parameter выберите параметр, подлежащий оптимизации, после чего произведите следующие действия:

  • Expr. Правильное математическое выражение на языке AEL для обработки результатов моделирования. В данном примере выполняется оптимизация реальных значений, поступающих в хранилище данных, поэтому выражение использоваться не будет. Введите N1 (имя хранилища данных в проекте). Могут использоваться и более сложные выражения, например, N1–5 или N1*N1.

  • SimInstanceName. Введите имя контроллера, который будет генерировать данные, используемые параметром Expr. Для нашего примера введите DF1 (имя компонентаDataFlow).

  • Min. Введите количество приемлемых минимальных значений результата. Чтобы исключить ошибку, введите 5 – точное значение в хранилище.

  • Max. Введите количество приемлемых максимальных значений результата. Чтобы исключить ошибку, введите 5 – точное значение в хранилище.

  • Weight. Здесь задаётся вес целевой функции. Обычно используется при многоцелевой оптимизации. 1 – значение по умолчанию.

  • Range Var. Имя независимой переменной (значение по оси Х). Для данного примера введите Index. (В качестве других значений могут быть time и frequency для аналоговых хранилищ данных)

  • RangeMin. Минимальное значение независимой переменной для оптимизации (в примере=0).

  • RangeMax. Максимальное значение независимой переменной для оптимизации (в примере=10). Таким образом, значение целевой функции будет вычислено в диапазоне от 0 до 10.

Установка рабочих параметров с использованием компонента Nominal Optimization

Для установки рабочих параметров нужно поместить компонент Nominal Optimization (Optim в библиотеке или на панели Controllers) и задать все необходимые параметры в диалоговом окне данного компонента.

Чтобы установить параметры, надо:

  1. Разместить компонент Nominal Optimization в окне проекта. Получится следующее:

    Рисунок 5-2

    Дважды щёлкните на компоненте для вызова его диалогового окна.

  2. Задайте параметры в каждой вкладке диалогового окна, как описано в трёх следующих частях.

Выбор оптимизатора и целей оптимизации (вкладка Setup)

  1. В поле Optimization type выберите Gradient (значение по умолчанию – Random). Подробности описаны в приложении B.

  2. По умолчанию, все компоненты Goal, имеющиеся в проекте, неявно связаны с контроллерами оптимизации, у которых список OptGoal пуст. Если с проекте имеется пять компонентов Goal, а Вы хотите использовать только три из них, то необходимо отредактировать этот список. Если этот список не пуст, то при оптимизации будут использоваться только те цели, которые здесь указаны. Кнопки Add (добавить), Cut (удалить) и Paste (вставить) предназначены для редактирования данного списка.

  3. В поле Stopping criterion задаётся число итераций при оптимизации.

Для оптимизации типа Random (Random, Random Minimax, Random Max, Genetic) это количество попыток. В качестве начальных значений рекомендуется использовать значения в диапазоне 50–100.

При итерационной оптимизации (Gradient, Gradient Minimax, Quasi-Newton, Least Pth, Minimax) это количество итераций (уточнений функции ошибки). В качестве начальных рекомендуются значения меньше 10.

Значение по умолчанию = 25 попыток/итераций.

  1. Нажмите Apply для сохранения введённых параметров и перейдите к вкладке Parameters.

Установка атрибутов параметров (вкладка Parameters)

  1. В поле Data to save укажите данные, которые необходимо сохранить после оптимизации:

  • Solutions to dataset – сохранение всех результатов.

  • Optimization variables to dataset – сохранение значений переменных, по которым происходит оптимизация, при нахождении очередного приближения к цели.

  • Goals to dataset – сохранение значений каждой целевой функции (записанной в поле Expr).

  1. В поле Levels введите номер требуемого уровня аннотации во время моделирования. Допустимые значения: от 0 до 4 (4 – выдаётся наиболее полная информация в окне Status). 2 – значение по умолчанию.

  2. В поле Other задаётся начальное значение для генератора случайных чисел (Seed) и порядок нормы оптимизации (Order of optimization norm). Если поле Seed оставить пустым, то программа сама будет выбирать начальное значение.

  3. Допустимые значения для поля Order of optimization norm: 2, 4, 8 и 16 (2 – значение по умолчанию).

  4. Выберите Apply для сохранения введённых параметров и перейдите к вкладке Display.

Управление анализируемыми данными (вкладка Display)

Для выбора параметров оптимизации, которые будут отображаться на схеме, используется вкладка Display диалогового окна компонента Nominal Optimization (по умолчанию выбраны все параметры).

Кнопка Set All предназначена для выбора всех параметров в списке, кнопка Clear All выполняет обратное действие.

По окончании ввода всех данных для завершения работы с диалоговым окном нажмите OK. Если необходимо внести коррективы в других вкладках, нажмите Apply и перейдите к соответствующим вкладкам.

Запуск оптимизации

Для начала оптимизации используйте команду Simulate или кнопку Simulate на панели инструментов. Состояние процесса оптимизации отображается в окне Status, включая начальное и текущее значение функции ошибки, а также номер текущей итерации/попытки.

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

Обновление оптимизированных параметров в проекте

Выберите пункт меню Simulate ??Update Optimization Values, если Вы хотите назначить соответствующим параметрам компонентов значения, полученные после успешного завершения процесса оптимизации. После этого можно сохранить полученный проект с помощью пунктов меню File ??Save или File ? Save As.

Результаты моделирования

После моделирования примера выберите Window ? New Data Display и создайте график для N1. Вы увидите следующее:

Рисунок 5-3

Табличное представление результатов моделирования:

Рисунок 5-4.

Оптимизация параметров различных типов

Вышеописанная последовательность действий применима для параметров, имеющих тип Real, Integer или Fixed Point. Для оптимизации параметров, имеющих тип

  • Complex;

  • Precision;

  • String;

  • Array;

  • Filename

    необходимо произвести дополнительные действия.

    Чтобы оптимизировать параметры этих типов, надо создать строку, в которой содержится ссылка на переменные, подлежащие оптимизации. Это из-за того, что программа моделирования может оптимизировать только числа, а параметры этих типов интерпретируются программой как строки. Оптимизируемые переменные должны быть описаны в компоненте VAR с режимом ввода Standard entry mode и выбранной опцией Optimization/Statistic Setup.

    Чтобы создать ссылку на строку, используются функции sprintf и strcat, синтаксис которых совпадает с аналогичными функциями в языке программирования C.

    Пример 2: оптимизация разрядности входа и выхода (в битах)

    В этом примере выполняется оптимизация параметра, принимающего значения с фиксированной точкой. Этот проект можно создать вручную или найти в каталоге examples\Tutorial. Файл проекта верхнего уровня – dspopt_prj, файл проекта – simpleopt2.

    Рисунок 5-5

    Оптимизироваться будет формат входного и выходного сигналов (точность) компонента G1, пока на выходе (на входе хранилища данных) не будет получено значение 0.2. Цель оптимизации – представление значения (0.2) с использованием минимального количества битов.

    Составные части проекта:

  • Источник постоянного сигнала (компонент ConstFix) с параметром Level=1.0.

  • Источник постоянного сигнала (компонент ConstInt) с параметром Level=D (назначение данного параметра будет объяснено далее).

  • Компонент GainSyn с параметром Gain=0.2.

  • Два компонента Numeric Sink с параметрами по умолчанию.

  • Компонент Data Flow с параметрами по умолчанию.

  • Компонент VAR (будет описан далее).

  • Компонент Optim (Nominal Optimization); MaxIters=30, P=2, Optimizer type – Random.

  • Компонент Goal для выражения N1.

  • Компонент Goal для выражения N2 (будет описан далее).

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

В данном примере рассматривается реальная проблема: оптимизация разрядности фильтра. Здесь же будет рассмотрено использование функций sprintf и strcat.

Установка параметров компонента VAR

Посмотрим на компонент VAR:

Рисунок 5-6

Дважды щёлкните на этом компоненте для появления диалогового окна. Установка всех необходимых значений:

  1. Введите W=2. W – количество битов слева от десятичной точки, включая знаковый бит.

  2. Введите D=1. D – количество битов справа от десятичной точки. 1 – номинальное значение перед оптимизацией. Здесь должно быть ваше наилучшее номинальное значение.

  3. После установки D=1 нажмите на кнопку Optimization/Statistics Setup.

  4. Установите Optimization Status=Enabled.

  5. Установите Type=Discrete.

  6. Minimum Value=1.

  7. Maximum Value=16.

  8. Step Value=1.

    Последние 4 шага сообщают программе, что при оптимизации будут использоваться дискретные значения от 1 до 16 с шагом 1.

  9. Нажмите OK, чтобы вернуться в основное диалоговое окно Variables and Equations.

  10. Введите sD=sprintf("%d", D). D замещается строкой sD. Запись ("%d", D) предписывает программе преобразовать значение переменной D в строку sD.

  11. Введите sW=sprintf("%d.", W). W замещается строкой sW. Запись ("%d.", W) предписывает программе преобразовать целое значение переменной W в строку sW и добавить десятичную точку.

  12. Введите S2=echo(strcat(sW, sD)). Программа создаёт одну строку S2 путём объединения строк sW и sD. Ключевое слово echo используется для обновления информации в окне Status во время моделирования.

  13. Нажмите OK.

Установка параметров компонентов ConstInt, Second Sink и Second Goal

Оптимизация разрядности требует размещения дополнительных компонентов: второго источника сигналов (ConstInt), второго хранилища данных (Numeric Sink) и второго компонента Goal. Соедините вторые компоненты ConstInt и Numeric Sink. Назначение этих дополнительных компонентов – создание второй цели оптимизации, которая будет использоваться, пока будет удовлетворять критерию первая целевая функция. Сделайте следующее:

  1. Установите в компоненте ConstInt параметр Level=D. D – количество битов справа от десятичной точки, переменная определена в компоненте VAR.

  2. У компонента N2 (второй Numeric Sink) оставьте все значения по умолчанию.

  3. Установите следующие параметры компонента OptimGoal2 (Goal):

Expr="N2"

SimInstanceName="DF1"

Min=0

Max=0

Weight=1

RangeVar=Index

RangeMin=0

RangeMax=0

Весовой коэффициент

Параметр Weight отражает важность одной цели относительно других. Поэтому, т.к. функция ошибки первой цели значительно меньше по сравнению со второй целью, установите для первой цели Weight=1e9.

Выполнение оптимизации

Теперь всё готово для запуска процесса оптимизации.

Остальные шаги уже были описаны ранее и являются общими для оптимизации параметров любых типов.