指数移动平均(Exponential Moving Average, EMA),又称指数加权移动平均(Exponentially Weighted Moving Average, EWMA),是工业测控、机器人感知、数字信号处理与控制系统中应用最广泛的一阶平滑算法。
本文从统计平滑 与数字信号处理 双重视角出发,系统推导EMA的核心原理、参数物理意义、频域特性与工程实现方法,厘清平滑因子α\alphaα、时间常数τ\tauτ、截止频率fcf_cfc与等效窗口长度的换算关系。
一、EMA的定义与直观理解
1.1 标准递推形式
工业界与学术界最通用的EMA递推定义为:
yk=αxk+(1−α)yk−1 \boxed{y_k=\alpha x_k+(1-\alpha)y_{k-1}} yk=αxk+(1−α)yk−1
其中:
- xkx_kxk:第kkk时刻的原始测量值
- yky_kyk:第kkk时刻的滤波输出值
- yk−1y_{k-1}yk−1:上一时刻的滤波输出值
- α\alphaα:当前测量值的权重因子,满足0<α≤10<\alpha\le10<α≤1
将公式变形可得到更具物理直觉的误差修正形式:
yk=yk−1+α(xk−yk−1) \boxed{y_k=y_{k-1}+\alpha(x_k-y_{k-1})} yk=yk−1+α(xk−yk−1)
令ek=xk−yk−1e_k = x_k - y_{k-1}ek=xk−yk−1表示当前测量相对于历史估计的"新息"(预测误差),则EMA的物理意义可概括为:
新估计 = 旧估计 + 平滑因子 × 新信息
举例说明:若上一时刻估计值为100,当前传感器读数为110,平滑因子α=0.2\alpha=0.2α=0.2,则新息为10,EMA仅吸收其中20%的偏差,将估计值更新为102。这种"不完全信任单次测量"的特性,正是EMA平滑噪声的核心机制。
1.2 为什么叫"指数"移动平均
从递推式表面看,EMA仅使用了当前测量与上一时刻输出两个数据。但实际上,yk−1y_{k-1}yk−1本身包含了所有历史数据的信息。令r=1−αr=1-\alphar=1−α,对递推式逐次展开:
yk=αxk+ryk−1 =αxk+αrxk−1+r2yk−2 =αxk+αrxk−1+αr2xk−2+αr3xk−3+⋯ \begin{align*} y_k &= \alpha x_k + r y_{k-1} \ &= \alpha x_k + \alpha r x_{k-1} + r^2 y_{k-2} \ &= \alpha x_k + \alpha r x_{k-1} + \alpha r^2 x_{k-2} + \alpha r^3 x_{k-3} + \cdots \end{align*} yk=αxk+ryk−1 =αxk+αrxk−1+r2yk−2 =αxk+αrxk−1+αr2xk−2+αr3xk−3+⋯
由此可得第iii个历史样本的权重:
wi=α(1−α)i \boxed{w_i=\alpha(1-\alpha)^i} wi=α(1−α)i
权重序列为α, α(1−α), α(1−α)2, α(1−α)3,...\alpha,\ \alpha(1-\alpha),\ \alpha(1-\alpha)^2,\ \alpha(1-\alpha)^3,\dotsα, α(1−α), α(1−α)2, α(1−α)3,...,随时间步长按指数规律衰减。pandas官方文档中也明确给出了该指数权重形式,并对应了其ewm接口的递归实现。
以α=0.2\alpha=0.2α=0.2为例,历史样本的权重衰减如下:
| 样本位置 | 权重值 |
|---|---|
| 当前xkx_kxk | 0.2000 |
| xk−1x_{k-1}xk−1 | 0.1600 |
| xk−2x_{k-2}xk−2 | 0.1280 |
| xk−3x_{k-3}xk−3 | 0.1024 |
| xk−4x_{k-4}xk−4 | 0.0819 |
| ... | ... |
与固定窗口滑动平均不同,EMA没有硬截断的窗口边界,越新的数据权重越高,越旧的数据影响越小,理论上所有历史数据都会对当前输出产生微弱贡献。
二、统计视角:权重特性与噪声抑制能力
2.1 等效窗口长度
EMA没有固定的物理窗口,但可通过统计特性定义等效窗口长度 NeffN_{\text{eff}}Neff,用于衡量其对白噪声的抑制能力。对于白噪声输入,EMA的等效窗口满足:
Neff=2−αα=2α−1 \boxed{N_{\mathrm{eff}} = \frac{2-\alpha}{\alpha} = \frac{2}{\alpha}-1} Neff=α2−α=α2−1
反向推导可得:
α=2Neff+1 \boxed{\alpha = \frac{2}{N_{\mathrm{eff}}+1}} α=Neff+12
| α\alphaα | 近似等效窗口NeffN_{\text{eff}}Neff |
|---|---|
| 0.5 | 3 |
| 0.2 | 9 |
| 0.1 | 19 |
| 0.05 | 39 |
| 0.02 | 99 |
例如α=0.1\alpha=0.1α=0.1的EMA,对白噪声的抑制能力大致等价于19点等权重滑动平均,但仅需保存单个状态变量,计算量为(O(1))(O(1))(O(1))。需注意,等效窗口是统计意义上的等价,EMA并未真正丢弃窗口外的数据。
2.2 对白噪声的抑制能力
设测量信号为xk=s+nkx_k = s + n_kxk=s+nk,其中sss为恒定真值,nkn_knk为零均值独立白噪声,方差为σ2\sigma^2σ2。EMA的冲激响应为hi=α(1−α)ih_i=\alpha(1-\alpha)^ihi=α(1−α)i,根据线性系统噪声传播特性,输出噪声方差为输入噪声方差乘以冲激响应的能量和:
σy2=σ2∑i=0∞hi2 \sigma_y^2 = \sigma^2 \sum_{i=0}^{\infty}h_i^2 σy2=σ2i=0∑∞hi2
代入冲激响应并利用无穷等比级数求和,可得:
σy2=α2−ασ2 \boxed{\sigma_y^2 = \frac{\alpha}{2-\alpha}\sigma^2} σy2=2−αασ2
输出噪声标准差为:
σy=α2−ασ \boxed{\sigma_y = \sqrt{\frac{\alpha}{2-\alpha}}\sigma} σy=2−αα σ
以α=0.1\alpha=0.1α=0.1为例,输出噪声方差仅为输入的5.26%,标准差衰减至约22.9%,可见EMA对高频随机抖动有显著的抑制效果。
重要前提:该结论仅适用于近似白噪声、样本间独立的场景。对于温漂、慢变系统误差、模型偏差等低频干扰,EMA作为低通滤波器无法将其滤除,反而会将其平滑保留。
三、数字信号处理视角:一阶IIR低通滤波器
3.1 差分方程与IIR本质
EMA的递推式可改写为标准离散时间差分方程形式:
yk=αxk+(1−α)yk−1 yk = \alpha xk + (1-\alpha)yk-1 yk=αxk+(1−α)yk−1
输出不仅依赖当前与历史输入,还依赖上一时刻的输出,存在反馈回路。在数字信号处理中,这类带反馈、冲激响应理论上无限长的滤波器被称为无限冲激响应(IIR)滤波器。
SciPy的scipy.signal.lfilter函数可直接实现该滤波器,对应参数为:
- 分子系数
b = [alpha] - 分母系数
a = [1, -(1-alpha)]
3.2 Z变换与传递函数
对差分方程两边做Z变换:
Y(z)=αX(z)+(1−α)z−1Y(z) Y(z) = \alpha X(z) + (1-\alpha)z^{-1}Y(z) Y(z)=αX(z)+(1−α)z−1Y(z)
整理可得系统传递函数:
H(z)=Y(z)X(z)=α1−(1−α)z−1 \boxed{H(z) = \frac{Y(z)}{X(z)} = \frac{\alpha}{1-(1-\alpha)z^{-1}}} H(z)=X(z)Y(z)=1−(1−α)z−1α
这是标准的一阶IIR低通滤波器形式,其极点由分母为零解得:
zp=1−α \boxed{z_p = 1-\alpha} zp=1−α
极点在单位圆内的位置直接决定了系统特性:
- 当α\alphaα较大(如0.8),极点zp=0.2z_p=0.2zp=0.2靠近原点,历史衰减快、记忆短、响应快、平滑弱
- 当α\alphaα较小(如0.1),极点zp=0.9z_p=0.9zp=0.9靠近单位圆,历史衰减慢、记忆长、响应慢、平滑强
3.3 幅频响应与低通特性
将z=ejωz=e^{j\omega}z=ejω代入传递函数,可得离散域频率响应,其中ω\omegaω为归一化角频率,范围0,π0,\\pi0,π,对应物理频率0,fs/20,f_s/20,fs/2。
令r=1−αr=1-\alphar=1−α,可推导幅频响应的模值:
∣H(ejω)∣=α1+r2−2rcosω \boxed{|H(e^{j\omega})| = \frac{\alpha}{\sqrt{1+r^2-2r\cos\omega}}} ∣H(ejω)∣=1+r2−2rcosω α
通过两个极端频率验证其低通特性:
- 直流分量(ω=0\omega=0ω=0) :
∣H(ej0)∣=α1−(1−α)=1 |H(e^{j0})| = \frac{\alpha}{1-(1-\alpha)} = 1 ∣H(ej0)∣=1−(1−α)α=1
直流增益为1,恒定真值不会被衰减。 - 奈奎斯特频率(ω=π\omega=\piω=π) :
∣H(ejπ)∣=α2−α |H(e^{j\pi})| = \frac{\alpha}{2-\alpha} ∣H(ejπ)∣=2−αα
当α=0.1\alpha=0.1α=0.1时,高频增益仅约0.0526,高频噪声被强烈抑制。
由此可证:EMA本质是通低频、阻高频的一阶低通滤波器。
3.4 精确的-3dB截止频率
滤波器的-3dB截止频率定义为幅值增益下降至1/21/\sqrt{2}1/2 的频率点。令∣H(ejωc)∣2=1/2|H(e^{j\omega_c})|^2 = 1/2∣H(ejωc)∣2=1/2,代入幅频公式可解得:
cosωc=1−α22(1−α) \boxed{\cos\omega_c = 1 - \frac{\alpha^2}{2(1-\alpha)}} cosωc=1−2(1−α)α2
其中ωc=2πfc/fs\omega_c = 2\pi f_c / f_sωc=2πfc/fs为截止角频率。反向求解α\alphaα,令q=1−cosωcq=1-\cos\omega_cq=1−cosωc,可得闭式解:
α=q2+2q−q \boxed{\alpha = \sqrt{q^2+2q} - q} α=q2+2q −q
该公式给出了离散域EMA严格意义上的-3dB截止频率设计方法。当截止频率远低于采样频率时,其结果与连续域近似方法高度吻合。
四、主要参数的物理意义与换算体系
平滑因子α\alphaα并非孤立的"平滑旋钮",它同时决定了系统的记忆深度 、时间常数 、截止频率 、噪声抑制能力 与响应延迟五者是严格关联的。
4.1 时间常数τ\tauτ:最具物理意义的参数
固定α\alphaα的缺陷在于:相同α\alphaα在不同采样率下,物理平滑效果差异巨大。工业系统更推荐使用时间常数 τ\tauτ作为核心参数,其定义源于阶跃响应特性。
设滤波器初始状态为0,输入突变为恒定值1,EMA的阶跃响应为:
yn=1−(1−α)n y_n = 1 - (1-\alpha)^n yn=1−(1−α)n
定义时间常数τ\tauτ为阶跃响应误差衰减至(1/e)(1/e)(1/e)(约36.8%)所需的时间,即输出达到终值63.2%的时刻。由此推导:
(1−α)nτ=e−1 ⟹ nτ=−1ln(1−α) (1-\alpha)^{n_\tau} = e^{-1} \implies n_\tau = -\frac{1}{\ln(1-\alpha)} (1−α)nτ=e−1⟹nτ=−ln(1−α)1
其中nτn_\taunτ为时间常数对应的样本数。若采样周期为TsT_sTs,则物理时间常数:
τ=−Tsln(1−α) \boxed{\tau = -\frac{T_s}{\ln(1-\alpha)}} τ=−ln(1−α)Ts
反向由时间常数计算平滑因子:
α=1−e−Ts/τ \boxed{\alpha = 1 - e^{-T_s/\tau}} α=1−e−Ts/τ
阶跃响应的典型节点为:
- t=τt=\taut=τ:输出达到终值的63.2%
- t=2τt=2\taut=2τ:输出达到终值的86.5%
- t=3τt=3\taut=3τ:输出达到终值的95.0%
- t≈5τt\approx5\taut≈5τ:输出达到终值的99.3%,可认为基本稳态
该特性与连续一阶系统完全一致,MathWorks官方参数平滑模块也采用了相同的时间常数定义。
4.2 截止频率与时间常数的关系
连续时间一阶低通滤波器的传递函数为:
H(s)=11+τs H(s) = \frac{1}{1+\tau s} H(s)=1+τs1
其-3dB截止频率满足:
fc=12πτ \boxed{f_c = \frac{1}{2\pi\tau}} fc=2πτ1
结合α\alphaα与τ\tauτ的指数换算关系,可得到由截止频率直接计算平滑因子的工程公式:
α=1−e−2πfc/fs \boxed{\alpha = 1 - e^{-2\pi f_c / f_s}} α=1−e−2πfc/fs
示例 :采样率fs=100 Hzf_s=100\ \text{Hz}fs=100 Hz,期望截止频率fc=5 Hzf_c=5\ \text{Hz}fc=5 Hz,则:
Ts=0.01 s,τ=12π×5≈0.0318 s T_s = 0.01\ \text{s},\quad \tau = \frac{1}{2\pi\times5} \approx 0.0318\ \text{s} Ts=0.01 s,τ=2π×51≈0.0318 s
α=1−e−0.01/0.0318≈0.270 \alpha = 1 - e^{-0.01/0.0318} \approx 0.270 α=1−e−0.01/0.0318≈0.270
4.3 两种离散化方法的差异
工程中还常见另一种α\alphaα计算公式:
α=Tsτ+Ts \alpha = \frac{T_s}{\tau + T_s} α=τ+TsTs
该式源于对连续一阶微分方程的后向欧拉离散化。而指数匹配公式α=1−e−Ts/τ\alpha = 1 - e^{-T_s/\tau}α=1−e−Ts/τ是对时间常数的精确匹配。
当采样频率远高于截止频率(Ts≪τT_s \ll \tauTs≪τ)时,两者近似相等,均满足α≈Ts/τ\alpha \approx T_s/\tauα≈Ts/τ;当截止频率较高时,指数匹配的精度更优。
五、EMA的固有特性与设计权衡
5.1 相位滞后与响应延迟
滤波没有"免费午餐":抑制高频噪声必然伴随相位滞后与响应延迟。EMA作为一阶IIR滤波器,不具备线性相位特性。
在低频段,EMA的群延迟近似为:
D≈1−αα \boxed{D \approx \frac{1-\alpha}{\alpha}} D≈α1−α
单位为采样周期。典型值对应:
- α=0.5\alpha=0.5α=0.5:延迟约1个采样周期
- α=0.2\alpha=0.2α=0.2:延迟约4个采样周期
- α=0.1\alpha=0.1α=0.1:延迟约9个采样周期
平滑强度与响应速度构成核心权衡:滤波越强,响应越慢。
5.2 闭环控制系统中的约束
在"传感器→滤波→控制器→执行器"的闭环链路中,EMA引入的相位滞后会直接降低系统相位裕度,增加振荡风险。因此:
- 用于UI显示、离线数据可视化时,可采用较强的平滑以获得美观曲线
- 用于闭环反馈控制时,需在噪声抑制与控制带宽之间严格权衡,不可片面追求平滑效果
设计时需综合考量噪声主频、控制带宽、采样频率与允许最大延迟四个约束。
5.3 对异常值的局限性
EMA是线性滤波器,对单点突刺、椒盐噪声、离群点的抑制能力有限。例如正常值为100时出现一个500的异常值,α=0.2\alpha=0.2α=0.2的EMA会将输出瞬间拉偏至180,仍会产生明显扰动。
EMA适用于小幅值、高频、近似高斯分布 的随机噪声;对于偶发异常值,推荐采用"异常值剔除→中值滤波→EMA"的级联方案,而非单纯减小α\alphaα。
六、EMA与滑动平均(SMA)的对比
滑动平均对窗口内所有样本赋予相等权重,而指数平滑对历史数据赋予指数衰减权重。
| 特性维度 | 简单滑动平均(SMA) | 指数移动平均(EMA) |
|---|---|---|
| 历史权重 | 窗口内等权重,窗外权重为0 | 指数连续衰减,无硬截断 |
| 窗口长度 | 固定N点 | 无限历史,等效窗口统计意义 |
| 内存占用 | 需保存N个历史样本 | 仅需保存1个状态变量 |
| 计算复杂度 | (O(N))(O(N))(O(N))或维护累计和(O(1))(O(1))(O(1)) | 严格(O(1))(O(1))(O(1)) |
| 核心参数 | 窗口长度N | α\alphaα / τ\tauτ / fcf_cfc |
| 频域特性 | 具有sinc形旁瓣与零点 | 单调一阶低通,无旁瓣 |
| 实时实现 | 需维护数据队列 | 单状态递归,极其适合嵌入式 |
七、工程实践
7.1 初始化:避免启动瞬态
错误的初始化(如初始值设为0)会在系统启动时产生巨大的人为瞬态。例如真值约为100、α=0.1\alpha=0.1α=0.1时,前几次输出会依次为10、19、27.1,严重偏离真实值。
最佳实践 :首帧测量直接赋值给滤波状态,即y0=x0y_0 = x_0y0=x0。
7.2 非均匀采样:固定时间常数而非固定(α\alphaα)
在视觉检测、点云处理等场景中,采样间隔常因算法耗时、掉帧、网络波动而不稳定。固定α\alphaα会导致实际平滑强度随帧率变化。
解决方案是固定物理时间常数τ\tauτ,每帧根据实际时间间隔Δtk\Delta t_kΔtk动态计算αk\alpha_kαk :
αk=1−e−Δtk/τ \boxed{\alpha_k = 1 - e^{-\Delta t_k / \tau}} αk=1−e−Δtk/τ
该方法保证滤波器的物理时间常数恒定,不受帧率波动影响。
7.3 科学调参方法论
工程调参不应盲目试错α\alphaα,而应从需求出发倒推参数:
- 明确采样率fsf_sfs
- 确定需要保留的最快真实动态频率
- 确定需要滤除的主要噪声频段
- 选取合适的截止频率fcf_cfc
- 由fcf_cfc计算时间常数τ\tauτ,再得到α\alphaα
该流程让每个参数都具备明确的物理意义,避免凭感觉调参。
7.4 C++工程实现代码
版本一:固定平滑因子(\alpha)
cpp
class EMAFilter {
public:
explicit EMAFilter(double alpha) : alpha_(alpha) {}
double update(double measurement) {
if (!initialized_) {
value_ = measurement;
initialized_ = true;
return value_;
}
// 误差修正形式,物理意义更清晰
value_ += alpha_ * (measurement - value_);
return value_;
}
void reset() {
initialized_ = false;
value_ = 0.0;
}
double value() const { return value_; }
private:
double alpha_;
double value_{0.0};
bool initialized_{false};
};
版本二:固定时间常数(\tau)(适配非均匀采样)
cpp
#include <cmath>
class EMAFilterTau {
public:
explicit EMAFilterTau(double tau) : tau_(tau) {}
double update(double measurement, double dt) {
if (!initialized_) {
value_ = measurement;
initialized_ = true;
return value_;
}
const double alpha = 1.0 - std::exp(-dt / tau_);
value_ += alpha * (measurement - value_);
return value_;
}
void reset() { initialized_ = false; }
private:
double tau_;
double value_{0.0};
bool initialized_{false};
};
八、扩展:从标量到高维,从固定增益到卡尔曼
8.1 三维位置的EMA
对于三维位置向量p=x,y,zT\mathbf{p}=x,y,z^Tp=x,y,zT,可直接对三个分量独立执行EMA:
p∗k=p∗k−1+α(p∗kmeas−p∗k−1) \boxed{\mathbf{p}*k = \mathbf{p}*{k-1} + \alpha(\mathbf{p}*k^{\text{meas}} - \mathbf{p}*{k-1})} p∗k=p∗k−1+α(p∗kmeas−p∗k−1)
该方法在多数场景下效果良好,计算高效。
8.2 姿态滤波:不可直接套用标量EMA
欧拉角、四元数等姿态量位于非欧几里得流形上,直接线性加权会产生错误。例如179°与-179°实际仅相差2°,直接平均会得到0°的错误结果。
姿态的指数平滑需在流形上进行,四元数通常采用球面线性插值(SLERP)实现等效EMA:
qk=Slerp(qk−1,qmeas,α) q_k = \operatorname{Slerp}(q_{k-1}, q_{\text{meas}}, \alpha) qk=Slerp(qk−1,qmeas,α)
而非直接对四元数分量做线性加权。
8.3 EMA与卡尔曼滤波的关系
EMA的更新形式与卡尔曼滤波的测量更新高度相似:
- EMA:yk=yk−1+α(xk−yk−1)y_k = y_{k-1} + \alpha(x_k - y_{k-1})yk=yk−1+α(xk−yk−1)
- 卡尔曼更新:x^k=x^k−+Kk(zk−x^k−)\hat{x}_k = \hat{x}_k^- + K_k(z_k - \hat{x}_k^-)x^k=x^k−+Kk(zk−x^k−)
两者核心区别在于:
- EMA是固定增益的一阶递归平滑,无运动模型,无不确定性估计
- 卡尔曼滤波包含状态预测模型 与协方差传播,增益随不确定性动态调整
对于静态或缓变目标的纯测量去噪,EMA通常足够;对于需跟踪运动目标、多传感器融合的场景,卡尔曼滤波更具优势。
EMA公式速查
| 物理量 | 公式 |
|---|---|
| 标准递推式 | yk=αxk+(1−α)yk−1y_k = \alpha x_k + (1-\alpha)y_{k-1}yk=αxk+(1−α)yk−1 |
| 误差修正形式 | yk=yk−1+α(xk−yk−1)y_k = y_{k-1} + \alpha(x_k - y_{k-1})yk=yk−1+α(xk−yk−1) |
| 历史权重 | wi=α(1−α)iw_i = \alpha(1-\alpha)^iwi=α(1−α)i |
| 传递函数 | H(z)=α1−(1−α)z−1H(z) = \dfrac{\alpha}{1-(1-\alpha)z^{-1}}H(z)=1−(1−α)z−1α |
| 极点位置 | zp=1−αz_p = 1-\alphazp=1−α |
| 等效窗口长度 | Neff=2−ααN_{\text{eff}} = \dfrac{2-\alpha}{\alpha}Neff=α2−α |
| 输出噪声方差 | σy2=α2−ασx2\sigma_y^2 = \dfrac{\alpha}{2-\alpha}\sigma_x^2σy2=2−αασx2 |
| 时间常数换算 | τ=−Tsln(1−α),α=1−e−Ts/τ\tau = -\dfrac{T_s}{\ln(1-\alpha)},\quad \alpha = 1-e^{-T_s/\tau}τ=−ln(1−α)Ts,α=1−e−Ts/τ |
| 截止频率换算 | fc=12πτ,α≈1−e−2πfc/fsf_c = \dfrac{1}{2\pi\tau},\quad \alpha \approx 1-e^{-2\pi f_c/f_s}fc=2πτ1,α≈1−e−2πfc/fs |
| 低频群延迟近似 | D≈1−ααD \approx \dfrac{1-\alpha}{\alpha}D≈α1−α |