采样窗口均方根(RMS)计算咨询:代码正误及滑动RMS合理性探讨
问题解答
原代码的错误分析
原代码完全搞错了RMS的计算逻辑:
- 标准的**样本均方根(RMS)**计算流程是:先对每个数据点取平方,计算平方值的均值,最后开根号,公式为:$RMS = \sqrt{\frac{1}{n}\sum_{i=1}^n x_i^2}$
- 你的代码先减去了整个列的均值,再对每个点的偏差平方单独开根号,得到的是每个数据点相对于整体均值的偏差幅度,根本不是RMS。而且用
apply逐个计算后得到的是和原序列等长的向量,但针对整个序列的RMS应该是一个标量值,这完全不符合导师预期的曲线(导师要的应该是随时间变化的滑动RMS曲线)。
滑动RMS实现的合理性
你的滑动RMS实现逻辑是合理的,完全符合滑动窗口RMS的计算规则:
- 对加速度值取平方(绝对值可以省略,因为平方后结果天然非负)
- 用滑动窗口计算平方值的均值
- 最后对均值开根号得到窗口内的RMS
可以优化一下代码,不用额外转成DataFrame,直接用Pandas Series的方法更简洁高效:
rms = (dado['accX'] ** 2).rolling(window).mean() ** 0.5
另外注意窗口大小window的选择,要结合你的采样率和电机运行频率来定——比如采样率100Hz、电机转频50Hz的话,选20个采样点作为窗口(覆盖一个完整周期),能更好捕捉电机振动的周期性特征。
内容的提问来源于stack exchange,提问作者Renan Saraiva dos Santos
相关产品推荐
相关产品推荐

