Engee 文档
Notebook

信号平均

如何使用基本块实现最简单的信号平均方法? 让我们看一个简单模型的例子,如何将累积量除以样本中的元素数并获得输入信号的算术平均值。

模型描述

平均信号的最简单方法是对所有可用元素求和,并将总和除以向量中元素的数量。 如果我们在输入端收到信号 ,则输出信号的序列 这样的过滤器应该如下:

该图包含求和块(Sum)并取前一个值(Delay). 模型的上半部分负责计算上述表达式中的分子,总结了输入元素。 模型的下部总结了常数 1 模拟步骤已经完成的次数一样多。

image.png

我们平均的信号只是对一个常数求和的结果 1 具有幅度均匀分布噪声的矢量 0.01. 在模型的500个样本之后,将幅度步长添加到信号。 1.

image.png

启动模型

让我们使用软件管理工具运行模型。

In [ ]:
# Если модель еще не открыта, загрузим из файла
if "running_average"  getfield.(engee.get_all_models(), :name)
    engee.load( "$(@__DIR__)/running_average.engee");
end;

data = engee.run( "running_average" )
Out[0]:
SimulationResult(
    "Исходный" => WorkspaceArray("running_average/Исходный"),
    "Сглаженный" => WorkspaceArray("running_average/Сглаженный")
)
In [ ]:
plot(
    plot( data["Исходный"].time, data["Исходный"].value, label="Исходный сигнал", legend=:bottomright),
    plot( data["Сглаженный"].time, data["Сглаженный"].value, label="Сглаженный сигнал", legend=:bottomright ),
    layout=(2,1)
)
Out[0]:

这种类型的滤波的优点是滤波器的快速初始设置:在启动模型后,输出信号在几个样本中克服了从0到1的距离,并在几十个仿真周期后稳定下来。

我们可以看到,缺点是对后续变化的响应非常缓慢。 信号历史越长,滤波器输出值对步长的响应就越慢。

结论

我们实现了一种简单的信号平均方法,该方法非常容易以图形块的形式或用于处理仿真结果的代码的形式实现。

示例中使用的块