Документация Engee

Системные объекты Engee

Страница в процессе разработки.

В этой статье описан общий подход к работе с системными объектами в Engee. Для получения справки по конкретному системному объекту обратитесь к командной строкой Engee img 41 1 2 и в режиме help? (нажмите ? для перехода в режим) введите его имя.

Системный объект — это объект среды моделирования Engee, который помогает моделировать динамические системы. Системные объекты особенно полезны для задач обработки сигналов, связи, радиолокации и управления. Они обеспечивают модульность и удобство при создании динамических систем в Engee, предоставляя простые средства для создания, настройки и использования компонентов.

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

Системные объекты создаются и используются в четыре этапа:

so diagram 1

  1. Создание компонентов — на первом этапе происходит инициализация системных объектов, которые представляют необходимые компоненты системы. Эти объекты могут моделировать генераторы сигналов, передатчики, приемники и другие устройства. Например, создается объект waveform с помощью класса EngeePhase.RectangularWaveform(), представляющий генератор прямоугольного импульса. На этом этапе создаются заготовки для будущих компонентов, но еще без детальной настройки;

  2. Настройка компонентов — после создания объекта происходит его настройка, где задаются ключевые параметры, определяющие поведение компонента. Это может включать частоту повторения импульсов, мощность сигнала, частоту дискретизации и другие важные характеристики;

  3. Сбор компонентов в систему — на этом этапе настроенные компоненты объединяются в единую систему, где они могут взаимодействовать друг с другом, создавая поток данных. Эта сборка позволяет организовать передачу и обработку сигналов между компонентами, отражая физические процессы, которые будут происходить при работе системы;

  4. Запуск системы — после завершения сборки компонентов система готова к выполнению операций. На этом этапе выполняются все необходимые вычисления и передача сигналов.


Пример запуска радиолокационной системы на основе системных объектов (подробнее см. ниже):

# Создание генератора сигнала (первый этап)
waveform = EngeePhased.RectangularWaveform()

# Настройка генератора сигнала (второй этап)
waveform.PulseWidth = 100e-6;   # Длительность импульса, 1 микросекунда
waveform.PRF = 1e3;             # Частота повторения импульсов, 1 кГц
waveform.SampleRate = 1e6;      # Частота дискретизации, 1 МГц

# Создание и настройка передатчика (1 и 2 этапы вместе, альтернативный вариант)
transmitter = EngeePhased.Transmitter(
    PeakPower = 50,                  # Пиковая мощность, 50 Вт
    Gain = 40,                        # Усиление, 40 дБ
);

# Создание и настройка приемника (1 и 2 этапы вместе, альтернативный вариант)
receiver = EngeePhased.ReceiverPreamp(
    SampleRate = 1e6,                # Частота дискретизации, 1 МГц
    NoiseFigure = 5,                 # Коэффициент шума, 5 дБ
    NoiseMethod = "Noise power",     # Способ задания шума, мощность
    NoisePower = 50000,              # Мощность шума
);

# Все предыдущие этапы формируют 3 пункт - сбор компонентов в систему, отражающую реальные физические процессы

# Запуск системы (4 этап)
signal = step!(waveform);               # Генерация очередного импульса
transmitted = transmitter(signal);      # Передача сигнала
received = receiver(transmitted);       # Приём сигнала с добавлением шумов

# (Опционально) Построение графиков сигналов
plot(abs.(signal), title="Переданный сигнал", label = false) |> display
plot(abs.(received), title="Принятый сигнал", label = false)

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

Этапы создания системы на основе системных объектов

Работа с системными объектами в Engee включает несколько основных этапов, которые помогают организовать код в логичную структуру, представляя физические процессы. Рассмотрим пример создания простой однопозиционной радиолокационной системы, где будет показано, как создаются и используются системные объекты.

Создание компонентов

Первым шагом является создание основных объектов, которые будут представлять компоненты системы. Компоненты создаются с использованием встроенных системных классов Engee, представляющих различные функциональные элементы, такие как генераторы сигналов, передатчики и приемники.

Чтобы увидеть все доступные параметры для настройки компонента, создайте компонент (выполните код) и в окне переменных variables article 2 1 наведите курсор мыши на соответствующий компонент:

so param menu 1


Пример создания генератора прямоугольного импульса:

waveform = EngeePhased.RectangularWaveform()

Здесь EngeePhased.RectangularWaveform — это класс, представляющий генератор прямоугольных импульсов. Объект waveform станет основой для генерации сигналов, которые будут передаваться через систему. На этом этапе создается только сам объект, без указания параметров, чтобы его можно было настроить позднее. Альтернативно, можно одновременно создать и настроить компонент (подробнее см. ниже).

Настройка компонентов

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

  1. Настройка при создании компонента:

    waveform = EngeePhased.RectangularWaveform(
        PulseWidth = 100e-6,
        PRF = 1e3,
        SampleRate = 1e6,
    );
  2. Настройка через свойства объекта после создания:

    waveform = EngeePhased.RectangularWaveform()
    
    waveform.PulseWidth = 100e-6;
    waveform.PRF = 1e3;
    waveform.SampleRate = 1e6;

Здесь:

  • PulseWidth — длительность импульса. Здесь она задана как 1 микросекунда.

  • PRF — частота повторения импульсов (Pulse Repetition Frequency), которая определяет, как часто генерируются импульсы. Установлена на 1 кГц.

  • SampleRate — частота дискретизации, определяющая, с какой скоростью система обрабатывает данные. Установлена на 1 МГц.

По аналогии настраиваются другие компоненты, необходимые для сбора системы:

# Создание и настройка передатчика
transmitter = EngeePhased.Transmitter(
    PeakPower = 50,              # Пиковая мощность, 50 Вт
    Gain = 40                    # Усиление, 40 дБ
);

# Создание и настройка приемника
receiver = EngeePhased.ReceiverPreamp(
    SampleRate = 1e6,            # Частота дискретизации, 1 МГц
    NoiseFigure = 5,             # Коэффициент шума, 5 дБ
    NoiseMethod = "Noise power", # Способ задания шума, мощность
    NoisePower = 50000           # Мощность шума
);

Сбор компонентов в систему

На этом этапе все необходимые компоненты созданы и настроены, но их взаимодействие еще не определено. Сборка системы заключается в подготовке объектов, которые будут представлять элементы реального процесса передачи и приема сигнала, однако поток данных между ними пока не организован.

В приведенном коде создаются и настраиваются компоненты системы: генератор сигнала, передатчик и приемник. Эти объекты станут основой для дальнейшего моделирования, однако пока они остаются изолированными — реальное взаимодействие и передача данных между компонентами будут реализованы на следующем этапе.

# Создание и настройка генератора сигнала
waveform = EngeePhased.RectangularWaveform()
waveform.PulseWidth = 100e-6    # Длительность импульса, 1 микросекунда
waveform.PRF = 1e3              # Частота повторения импульсов, 1 кГц
waveform.SampleRate = 1e6       # Частота дискретизации, 1 МГц

# Создание и настройка передатчика
transmitter = EngeePhased.Transmitter(
    PeakPower = 50,             # Пиковая мощность, 50 Вт
    Gain = 40                    # Усиление, 40 дБ
)

# Создание и настройка приемника
receiver = EngeePhased.ReceiverPreamp(
    SampleRate = 1e6,           # Частота дискретизации, 1 МГц
    NoiseFigure = 5,            # Коэффициент шума, 5 дБ
    NoiseMethod = "Noise power", # Способ задания шума, мощность
    NoisePower = 50000           # Мощность шума
)

Таким образом, на этапе сборки подготовлены все компоненты, необходимые для создания системы, которая будет обрабатывать сигнал.

Запуск системы

Теперь, когда все компоненты созданы и настроены, их можно объединить в систему, организовав передачу данных между ними. В данном этапе выход одного компонента становится входом для другого, имитируя реальный процесс передачи и приема сигнала:

signal = step!(waveform);
transmitted = transmitter(signal);
received = receiver(transmitted);

Описание процесса передачи данных:

  1. Генерация сигнала — объект waveform генерирует прямоугольный импульс;

  2. Передача сигнала — объект transmitter усиливает сигнал и передает его. Параметр PeakPower задает пиковую мощность передатчика, а Gain — усиление;

  3. Прием сигнала — объект receiver принимает сигнал и добавляет шум, используя заданные параметры. NoiseFigure определяет уровень шума, NoiseMethod указывает, что используется метод добавления шума по мощности, а NoisePower задает мощность шума.

Этот этап завершает процесс построения системы и позволяет начать моделирование передачи и приема сигнала с учетом шумов и других характеристик.

Визуализация (опциональный этап)

На опциональном этапе после запуска системы можно визуализировать полученные результаты. Этап помогает проанализировать поведение системы и качество принимаемого сигнала после прохождения через шумы и усиление. В данном примере строятся графики для оценки переданного и принятого сигналов:

plot(abs.(signal), title="Переданный сигнал", label = false) |> display
plot(abs.(received), title="Принятый сигнал", label = false)

Здесь abs.(signal) и abs.(received) применяют функцию abs к каждому элементу массива, чтобы получить амплитуду сигнала. Функция plot строит графики, чтобы визуально сравнить, как изменился сигнал после прохождения через передатчик и приемник.

so graph 1

so graph 2

Исходя из представленных графиков:

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

  • Нижний график показывает принятый сигнал, который содержит шумовую составляющую. Можно видеть, что в начале сигнала (до примерно 250 отсчетов) присутствует заметный уровень амплитуды, а затем она снижается и становится более шумной. Это характерно для принятого сигнала, где из-за воздействия шума и ослабления сигнала его амплитуда снижается, и основная информация становится менее выраженной.

Графики демонстрируют, что система на основе системных объектов успешно выполняют свои функции в моделировании радиолокационного сигнала. Системные объекты позволяет реализовать основные этапы — генерацию, передачу, прием и добавление шумов — на уровне блоков, без необходимости погружаться в детали моделирования посредством блоков библиотеки Engee.

Общие методы системных объектов

Системные объекты в Engee предлагают ряд общих методов, которые упрощают управление и настройку их поведения. Ниже приведено описание каждого из них.

step!

Метод step! запускает основную логику или алгоритм, связанный с системным объектом. Он используется для выполнения вычислений или обработки данных на основе текущего состояния объекта. Например, в радиолокационной системе вызов step! для генератора сигнала запускает процесс генерации следующего импульса:

# Генерация импульса
signal = step!(waveform)

# Передача и прием сигнала
transmitted = step!(transmitter, signal)
received = step!(receiver, transmitted)

Здесь метод step! последовательно запускает каждый компонент: генератор сигнала (waveform), передатчик (transmitter) и приемник (receiver), обеспечивая прохождение сигнала через всю систему. Каждый вызов step! выполняет одну итерацию обработки данных.

release!

После того как системный объект был настроен и использован, некоторые его свойства могут быть заблокированы. Метод release! позволяет разблокировать объект и изменить его свойства, если требуется перенастроить его параметры. Этот метод полезен, когда необходимо внести изменения в уже настроенный объект — например, изменить мощность передатчика или частоту генератора, не создавая новый объект. Использование release! освобождает объект для внесения новых значений в его параметры. Например:

release!(waveform) # Разрешаем изменения в объекте генератора сигнала

waveform.SampleRate = 2e6       # Изменение частоты дискретизации на 2 МГц

release!(transmitter) # Разрешаем изменения в объекте передатчика

transmitter.Gain = 45           # Изменение усиления на 45 дБ

В этом примере метод release! позволяет внести изменения в уже существующие объекты waveform и transmitter, не создавая их заново. Это полезно, если параметры системы нужно подстроить под другие условия работы.

setup!

Метод setup! выполняет одноразовые действия, необходимые для начальной настройки системного объекта. Он подготавливает объект к работе, например, проверяет корректность заданных параметров и выделяет необходимые ресурсы.

Метод setup! вызывается автоматически при первом запуске step!, но его можно вызвать вручную, чтобы заранее проверить готовность объекта и убедиться в корректности его настроек.

Этот метод удобен для этапа подготовки модели, когда важно убедиться, что все объекты корректно настроены перед началом основной обработки. Например:

setup!(waveform)

По умолчанию метод setup! не может выполнить никаких изменений для объекта waveform (из примера выше). Для изменения характеристик объекта необходимо сначала вызвать метод release!. В противном случае система выдаст предупреждение:

so warning 1

Поэтому сперва требуется разблокировать объект для изменений и уже после вызвать setup!:

release!(waveform)

setup!(waveform)