【发布时间】:2017-09-10 17:07:37
【问题描述】:
如果我想计算 400 个数据点的平均值(来自加速度传感器的噪声值),我可以使用像这个这样的低通函数吗?
private float lowPass(float alpha, float input, float previousOutput) {
return alpha * previousOutput + (1 - alpha) * input;
}
我将此与简单地将 400 个数据点存储在 List<float> 中进行比较,然后将它们相加并除以 400。
即使alpha 的值很高,我也会得到完全不同的结果。难道我做错了什么?我可以使用低通滤波器来计算平均值,还是简单地计算“真实”平均值通常更好?
编辑
我的低通函数最初将 float[] 作为输入和输出,因为我的数据来自 3 轴加速度计。我将其更改为float 并删除了内部for 循环以避免混淆。这也意味着输入/输出现在作为原始值传递,因此该方法返回一个float,而不是直接对输出数组进行操作。
【问题讨论】:
-
函数中的 alpha 是什么?
-
我的意思是,这不是经典的平均操作,不是吗?
-
@magicleon 看起来像一个指数加权移动平均线。
标签: java filtering signal-processing moving-average lowpass-filter