介绍
均值滤波是低低通数字滤波的一种。对信号x滤波,滤波输出为y。
代码实现
滤波算法
- 最简单的均值滤波(simple moving average ,SMA)具有如下形式:
y i = ∑ j = i − n + 1 i x i n y_i=\frac{\sum_{j=i-n+1}^{i}{x_i}}{n} yi=n∑j=i−n+1ixi
从时间复杂度上看,上边的公式复杂度是O(n),但这是可以优化的,如下式,
y i = y i − 1 + x i − x i − n n y_i=y_{i-1}+\frac{x_i-x_{i-n}}{n} yi=yi−1+nxi−xi−n - 加权平均滤波(weighted moving average, WMA)
y i = n x i + ( n − 1 ) x i − 1 + . . . + x i − n + 1 n + ( n − 1 ) + . . . + 1 y_i=\frac{nx_i+(n-1)x_{i-1}+...+x_{i-n+1}}{n+(n-1)+...+1} yi=n+(n−1)+...+1nxi+(n−1)xi−1+...+xi−n+1
从上边的公式可以看出,与SMA不同,随着时间变老输入数据的权值逐渐变小,即老的输入数据渐渐被“遗忘”,而SMA中每个数据具有相同相同的权值。
- 指数平均滤波(exponential moving average,EMA)
y i = ( 1 − α ) y i − 1 + α x i y_i=(1-\alpha)y_{i-1}+\alpha x_i yi=(1−α)yi−1+αxi
指数平均滤波本质上也是一种加权滤波,不过与上边的加权平均滤波不同,WMA的权值随时间的变老是线性减小的,而指数平均滤波的权值是以指数式递减的,另外还有一个区别,指数移动平均无论多旧的数据其总会被给予一定的权值,而上边的加权平均则真的是“遗忘了”。
伯德图
以上三种滤波的伯德图如下图。