ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

指数移动平均与一阶低通滤波:一个递推式的两种视角

指数移动平均与一阶低通滤波:一个递推式的两种视角 “你到底是在做指数移动平均还是在做一阶低通滤波”这个问题我这两年反复被问到。搞数据分析的朋友把公式写在表格里管它叫EMA说历史权重按指数衰减搞嵌入式或信号链路的同事在示波器上扫频管同样的递推式叫一阶低通滤波说要压制高频噪声。两边聊不到一起但代码抄下来几乎一模一样只是系数符号差了一层皮。这个现象很有意思因为指数移动平均和一阶低通滤波本质上是同一个递推关系只是从时间域和频率域两个角度描述同一件事。只要把这个关系看透你在调平滑参数时就能同时用上“时间常数”和“截止频率”两套语言工程上会顺手很多。下面我按自己实际调参和排查问题的顺序来拆这件事内容包括数学等价性推导、α/τ/fc参数换算表、噪声抑制与延迟的定量关系以及落地时容易踩的几个坑。适合正在处理传感器数据平滑、控制回路反馈或时序去抖的工程师和数据方向的朋友。1. 两个名字一条递推式统计与电路在这里合流1.1 统计侧指数移动平均是“旧记忆按比例遗忘”指数移动平均的标准写法是y[n] α · x[n] (1 − α) · y[n−1]x[n]是当前输入样本y[n]是滤波输出α通常是一个0到1之间的系数。如果α很小比如0.05那就意味着新样本对输出影响很小输出主要依赖历史积累如果α接近1滤波几乎没有平滑作用输出基本就是当前输入。把它展开成历史加权和会看得更清楚y[n] α·x[n] α·(1−α)·x[n−1] α·(1−α)²·x[n−2] ...每一代之前的样本权重都会乘一个(1−α)。这是一个等比数列权重随样本年龄指数递减所以叫“指数移动平均”。做量化的人喜欢用这个概念来估计价格的中短期趋势做传感器处理的人喜欢用它来平滑读数波动。大家嘴上说的是“平均”但实际上这是一个带遗忘机制的递归状态不是简单地把过去N个数加起来除N。这里有个非常容易混淆的符号问题有些文章把α写成“新样本权重”也就是我这篇用的定义有些文章则把α写成“记忆保持率”那么公式会变成y[n] α·y[n−1] (1−α)·x[n]。两种写法在数值上差了很大调参时一定要先看清楚别人代码里0.9到底是乘在历史项上还是乘在新样本上否则同样的α值一个接近不过滤一个平滑到几乎不动。1.2 电路侧一阶低通是“输出往输入方向挪一步”一阶低通滤波从电路或者控制系统里来最经典的模型是RC低通。输入电压经过一个电阻和一个电容电容上的电压就是输出。频率低的时候输出基本跟随输入频率高的时候电容不断被充放电输出幅度越来越小。描述它的微分方程是τ · (dy/dt) y x这里的τ就是时间常数单位是秒数值等于R×C。时间常数越大响应越慢能通过的频率越低。把上面这个连续微分方程做一阶离散化会得到什么用差分替换微分采样周期是Ts(τ/Ts) · (y[n] − y[n−1]) y[n] x[n]整理一下y[n] [Ts/(Tsτ)]·x[n] [τ/(Tsτ)]·y[n−1]令α Ts/(Tsτ)式子就变成y[n] α·x[n] (1−α)·y[n−1]这就是指数移动平均。所以一阶低通滤波经过离散化以后得到的递推式和EMA完全相同。控制领域还喜欢写成另一种等价形式y[n] y[n−1] α·(x[n] − y[n−1])这种写法非常直观当前
返回列表