Сообщество Engee

Сравнение работы Engee и Simulink

Автор
avatar-yurevyurev
Notebook

Дискретный КИХ-фильтр

В данном примере реализованы модель фильтрации синусоиды и сравнение работы КИХ-фильтра в MATLAB и Engee.
Блок Discrete FIR Filter независимо фильтрует каждый канал входного сигнала с заданным цифровым КИХ-фильтром.

Для реализации фильтрации используем стандартные настройки блока Discrete FIR Filter.

image.png
Модель Engee

im.png
Модель Simulink

In [ ]:
Pkg.add(["Statistics", "CSV"])
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
In [ ]:
using Plots
using MATLAB
using CSV
using DataFrames
using Statistics

demoroot = @__DIR__

mat"start_simulink"
mat"p = genpath('$demoroot'); addpath(p);"
mat"p = genpath('/user/start/examples/helper_units'); addpath(p);"

Запуск модели Engee

Посмотрим на результаты моделирования в Engee:

In [ ]:
# Запуск модели
modelName = "FIR"
PID_model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$demoroot/$(modelName).engee");

results = engee.run( PID_model )
Out[0]:
SimulationResult(
    "FIR_Out" => WorkspaceArray{Float64}("FIR/FIR_Out")
,
    "FIR_In" => WorkspaceArray{Float64}("FIR/FIR_In")

)
In [ ]:
# Результаты моделирования
FIR_In_x = results["FIR_In"].time;
FIR_In_y = results["FIR_In"].value;
FIR_Out_x = results["FIR_Out"].time;
FIR_Out_y = results["FIR_Out"].value;
In [ ]:
# Построение графиков
plot(FIR_Out_x , FIR_Out_y, legend = false)
plot!(FIR_In_x , FIR_In_y, legend = false)
plot!(title = "Результаты моделирования в Engee", ylabel = "Данные", xlabel="Время, c")
Out[0]:

Запуск модели Simulink

Сравним результаты моделирования в Engee и Simulink. Для этого сначала запустим симуляцию модели.

In [ ]:
mat"run_test_model('FIR')";

Посмотрим на результаты в Simulink:

In [ ]:
# Чтение выходов модели
x1 = mat"In.Data";
x2 = mat"Out.Data";
y = mat"Out.Time";
In [ ]:
# Построение графиков
plot(y, x2, legend = false)
plot!(y, x1, legend = false)  
plot!(title = "Результаты моделирования в Simulink", ylabel = "Отклик", xlabel="Время, c")
Out[0]:

Теперь построим график наложения выходных данных Simulink и Engee.

In [ ]:
plot(y, x2, legend = false) # Simulink
plot!(FIR_Out_x , FIR_Out_y, legend = false) # Engee
Out[0]:

Как мы видим из графиков представленных выше, модели работают одинаково.

Вывод

В результате разработки этого примера мы реализовали КИХ-фильтр, а также сравнили возможности Engee относительно моделирования в Simulink и показали возможности подключения ядра MATLAB для решения задач внутри среды разработки Engee.