离散 FIR 滤波器
本例实现了一个正弦波滤波模型,并比较了 FIR 滤波器在 MATLAB 和 Engee 中的运行情况。
离散 FIR 滤波器块使用给定的数字 FIR 滤波器对输入信号的每个通道进行独立滤波。
我们使用离散 FIR 滤波器模块的标准设置来实现滤波。


In [ ]:
Pkg.add(["Statistics", "CSV"])
In [ ]:
using Plots
using MATLAB
using CSV
using DataFrames
using Statistics
plotlyjs();
mat"start_simulink"
mat"p = genpath('/user/start/examples'); addpath(p);"
推出恩吉模型
让我们来看看Engee的建模结果:
In [ ]:
# Запуск модели
modelName = "FIR"
#engee.close( modelName, force=true ) # Для повторного запуска модели
PID_model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(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开发环境中解决问题的连接性。