在控制领域中,经常要对采集到的信号进行滤波去噪处理。在通用的处理方法中,最常使用的是均值滤波。下面给出均值滤波的常用实现以及通过使用循环队列对其进行的优化处理。
常用实现
定义一系列的变量:
x1,x2,......xn // 存储n次信号采样值
sum=x1+x2+.....+xn //存储n次采样值得和
x=sum/n //存储滤波后的结果
每次进行更新操作时,需执行以下动作:
sum=sum-x1
x1=x2
x2=x3
......
xn-1=xn
xn=采样值
sum=sum+xn
x=sum/n
上述的常用方法存在大量的复制操作,影响系统的处理性能,利用使用数组实现的循环队列对其进行优化,方法如下:
定义一个数组,作为循环队列的底层实现
arr[n+1] //存储n+1次信号采样值,初始化时全部设置为零
sum // //存储n+1次采样值得和,初始化时全部设置为零
index //存储循环下标,相当于上图中的那个指向s0的表针,初始化时设置为零
每次更新操作时,只需完成以下步骤即可:
可以看出优化后的方法消除了大量无用的复制操作。index=(index+1)%(n+1) //更新下标
sum=sum-arr[index] //丢弃最旧的值
arr[index]=采样值
sum=sum+arr[index] //累加新值
x=sum/(n+1) //滤波后的结果