Engee 文档
Notebook

均值滤波器

中值滤波器是一种数字滤波器,广泛应用于数字信号和图像处理中,以减少噪声。中值滤波器是一种非线性 FIR 滤波器。

在本示例中,我们将研究它的简化实现,并了解其工作原理,下图显示了实现滤波器的模型。

image.png

在这个模型中,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]:
run_model (generic function with 1 method)
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"])
Building...
Progress 100%
Building...
Progress 100%
Building...
Progress 100%
Building...
Progress 100%
Out[0]:

输出结果

从结果图中我们可以看到,减薄窗口越大,信号振幅越小,这是由于输入是正弦波,而在较大的平均窗口中,我们可以找到信号所有可能值的平均值,包括函数的最大值和最小值,因此滤波器本身工作正常,完成了其主要功能。

示例中使用的块