算数平均滤波需要多次采样后才能得出一个有效值,如果被检测量变化较快,多次采样后才输出一次有效值,表现就是系统反应迟钝。将当前采样值与之前连续的历史采样值进行平均,这样每次采样结束即可得出有效值。因为参与计算的历史值个数固定且内容不断前移覆盖更新,类似滑动的数据块窗口,因此成为滑动平均滤波算法。
| Vn-5 | Vn-4 | Vn-3 | Vn-2 | Vn-1 | Vn |
|---|---|---|---|---|---|
| Vn-4 | Vn-3 | Vn-2 | Vn-1 | Vn | Vn+1 |
假如窗口为6,即每次使用最近5个历史值与当前最新值求算数平均值,输出一个有效值;下个周期再覆盖最早时间的点做同样操作。类似环形数组,求最近6个值的平均值。
#define SUM_WIN_SIZE 6
int history[SUM_WIN_SIZE];//历史值,其中history[SUM_WIN_SIZE-1]为最近的记录
int buff_init=0;//前SUM_WIN_SIZE-1次填充后才能开始输出
int index=0;//环形数组可放数据的位置
int filter(int current)
{
int i;
int sum=0;
if(buff_init==0)
{
history[index]=current;

本文探讨了如何通过滑动平均滤波算法改进系统反应速度,引入加权系数调整,使得新数据权重更大,历史记录权重递减。通过实例展示了计算过程和权重分配,以提升信号处理的实时性和准确性。
最低0.47元/天 解锁文章
1441





