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

Ветвление алгорима решения

В представленном примере демонстрируется использование блока Multiport Switch для реализации механизма выбора одной из нескольких ветвей в модели. Этот блок позволяет переключаться между различными вариантами решения в зависимости от заданного режима.

Работа системы организована следующим образом.

Выбор режима работы. Первый входной порт блока Multiport Switch используется для управления режимом. Это управляющий сигнал, который определяет, какую ветвь решения необходимо активировать.

Варианты ветвей:

  • Первая ветвь формирует чистую синусоидальную волну. Это сигнал без добавления каких-либо искажений или шума.
  • Вторая ветвь генерирует случайный шум, который может использоваться для моделирования помех или случайных сигналов.
  • Третья ветвь объединяет сигналы из первых двух. Для этого используется блок сумматора, который суммирует синусоидальный сигнал с шумом, создавая зашумлённую синусоиду.

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

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

Сама модель показана на рисунке ниже: image.png Теперь перейдём к анализу модели.

Вспомогательные функции

In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model)
    
    Path = (@__DIR__) * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
        model = engee.open( name_model ) # Открыть модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
    else
        model = engee.load( Path, force=true ) # Загрузить модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
        engee.close( name_model, force=true ); # Закрыть модель
    end
    sleep(5)
    return model_output
end

gr()
Out[0]:
Plots.GRBackend()

Сравнение режимов

In [ ]:
mode=1
run_model("Multiport_Switch") # Запуск модели.
signal_out = collect(signal_out)
plot(signal_out.time,signal_out.value, title = "mode: $(mode)", label = "Синусоида")
Building...
Progress 100%
Progress 100%
Out[0]:
In [ ]:
mode=2
run_model("Multiport_Switch") # Запуск модели.
signal_out = collect(signal_out)
plot(signal_out.time,signal_out.value, title = "mode: $(mode)", label = "Шум")
Building...
Progress 100%
Progress 100%
Out[0]:
In [ ]:
mode=3
run_model("Multiport_Switch") # Запуск модели.
signal_out = collect(signal_out)
plot(signal_out.time,signal_out.value, title = "mode: $(mode)", label = "Зашумленная синусоида")
Building...
Progress 100%
Progress 100%
Out[0]:

Вывод

Построенные графики подтвердили корректность работы системы: все режимы отображаются так, как мы этого ожидаем.

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

Блоки, использованные в примере