离散FIR滤波器
此示例在MATLAB和Engee中实现正弦滤波模型和FIR滤波操作的比较。
离散FIR滤波器单元用预设的数字FIR滤波器独立地对输入信号的每个通道进行滤波。
为了实现滤波,我们使用离散FIR滤波器块的标准设置。
工程师模型
Simulink模型
In [ ]:
Pkg.add(["Statistics", "CSV"])
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]:
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]:
从上面的图表中我们可以看到,模型的工作方式是相同的。
结论
作为开发此示例的结果,我们实现了FIR滤波器,并比较了Engee在Simulink中建模的功能,并展示了连接MATLAB内核以解决Engee开发环境中的问题的可能性。