信号平均化¶
如何使用基本模块实现最简单的信号平均法?让我们以一个简单的模型为例,了解如何将累计和除以样本中的元素数,从而得到输入信号的算术平均值。
模型描述¶
对信号进行平均处理的最简单方法是对所有可用元素求和,然后用和除以矢量中的元素数。如果输入信号为$s$ ,那么这样一个滤波器的输出信号序列$y$ 应该如下:
$$y_1 = \frac{s_1}{1}$$
$$y_2 = \frac{s_1 + s_2}{2}$$
$$y_3 = \frac{s_1 + s_2 + s_3}{3}$$
$$\dots$$
图中集合了求和 (Sum
) 和取前一数值 (Delay
) 的模块。模型的上半部分负责计算上述表达式中的分子,对输入元素求和。模型的下半部分对常数1
进行汇总,其次数与模拟步骤的执行次数相同。
我们平均的信号只是一个常数1
与一个振幅为0.01
的均匀分布噪声矢量相加的结果。在对模型进行 500 次采样后,在信号中加入一个振幅为1
的阶跃。
运行模型¶
让我们使用软件控制工具运行模型。
In [ ]:
# Если модель еще не открыта, загрузим из файла
if "running_average" ∉ getfield.(engee.get_all_models(), :name)
engee.load( "$(@__DIR__)/running_average.engee");
end;
data = engee.run( "running_average" )
Out[0]:
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,并在几十个模拟周期后趋于稳定。
我们可以看到,其缺点是对后续变化的响应非常缓慢。信号的前史越长,滤波器输出值对阶跃的反应就越慢。
结论¶
我们已经实现了一种简单的信号平均方法,这种方法很容易以图形块或代码的形式实现,以处理模拟结果。