Ветвление алгорима решения¶
В представленном примере демонстрируется использование блока Multiport Switch для реализации механизма выбора одной из нескольких ветвей в модели. Этот блок позволяет переключаться между различными вариантами решения в зависимости от заданного режима.
Работа системы организована следующим образом.
Выбор режима работы. Первый входной порт блока Multiport Switch используется для управления режимом. Это управляющий сигнал, который определяет, какую ветвь решения необходимо активировать.
Варианты ветвей:
- Первая ветвь формирует чистую синусоидальную волну. Это сигнал без добавления каких-либо искажений или шума.
- Вторая ветвь генерирует случайный шум, который может использоваться для моделирования помех или случайных сигналов.
- Третья ветвь объединяет сигналы из первых двух. Для этого используется блок сумматора, который суммирует синусоидальный сигнал с шумом, создавая зашумлённую синусоиду.
В результате на выходе блока можно получить либо синусоиду, либо шум, либо их комбинацию в зависимости от заданного режима.
Такой подход позволяет гибко управлять поведением модели, что полезно для различных сценариев. Например, в одном режиме можно анализировать чистый сигнал, в другом — влияние шума, а в третьем — исследовать свойства сигнала в условиях помех. Это делает систему удобной для моделирования, тестирования и анализа в условиях меняющихся параметров.
Сама модель показана на рисунке ниже: Теперь перейдём к анализу модели.
Вспомогательные функции¶
# Подключение вспомогательной функции запуска модели.
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()
Сравнение режимов¶
mode=1
run_model("Multiport_Switch") # Запуск модели.
signal_out = collect(signal_out)
plot(signal_out.time,signal_out.value, title = "mode: $(mode)", label = "Синусоида")
mode=2
run_model("Multiport_Switch") # Запуск модели.
signal_out = collect(signal_out)
plot(signal_out.time,signal_out.value, title = "mode: $(mode)", label = "Шум")
mode=3
run_model("Multiport_Switch") # Запуск модели.
signal_out = collect(signal_out)
plot(signal_out.time,signal_out.value, title = "mode: $(mode)", label = "Зашумленная синусоида")
Вывод¶
Построенные графики подтвердили корректность работы системы: все режимы отображаются так, как мы этого ожидаем.
Данная модель успешно демонстрирует возможность выбора между чистой синусоидой, шумом и зашумлённым сигналом, обеспечивая наглядный и гибкий инструмент для анализа различных сценариев работы с сигналами.