均值滤波器
中值滤波器是一种数字滤波器,广泛应用于数字信号和图像处理中,以减少噪声。中值滤波器是一种非线性 FIR 滤波器。
在本示例中,我们将研究它的简化实现,并了解其工作原理,下图显示了实现滤波器的模型。

在这个模型中,window 参数定义了滤波器窗口的大小。
接下来,让我们定义模型开始的函数,并声明滤波窗口大小的几种变量。
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
Out[0]:
In [ ]:
window_arr = Int64[10,20,100,1e3];
然后,让我们用不同的平均窗口参数循环运行该模型,并比较结果。
In [ ]:
out_arr = zeros(1001,4)
window = 0;
for i in 1:4
window = window_arr[i]
run_model("Averaging_filter") # Запуск модели.
out = collect(simout["Averaging_filter/out"]);
out_arr[:,i] = out.value
end
plot(out_arr, label=["окно = 10" "окно = 20" "окно = 100" "окно = 1000"])
Out[0]:
输出结果
从结果图中我们可以看到,减薄窗口越大,信号振幅越小,这是由于输入是正弦波,而在较大的平均窗口中,我们可以找到信号所有可能值的平均值,包括函数的最大值和最小值,因此滤波器本身工作正常,完成了其主要功能。