计算传感器数据流的平均值
Calculate average value of a sensor data stream
是否有可行的方法来计算传入传感器数据流的 运行ning 平均值?我每秒获得多个样本,流可以 运行 几个小时,因此累积值并跟踪样本数量似乎不可行。是否有更务实的方法来解决这个问题,也许会牺牲准确性?
到目前为止,我提出的最佳解决方案是 x[n] = 0.99*x[n-1] + 0.01*y
的 IIR 实现,但这并没有真正给出我需要的平均值。
计算精确平均值需要样本总和和样本计数。没有办法解决这个问题。
保持平均值,A_N,并为新样本更新它:
A_{N+1} = (A_N * N + s_{N+1}) / (N+1)
完全等同于求和(等于项A_N * N)所以这不是解决方案。
保留样本总和的潜在问题是精确值可能会超过表示中的有效位数(无论是整数还是 floating-point)。
为了解决这个问题(如果最大整数大小不够用),可以使用 library for arbitrary large integers 或“home-made”解决方案。
home-made 解决方案可能是在每个桶中使用固定数量的样本或每个桶中的计数来保持“总和桶”。然后可以使用 floating-point 计算将平均值计算为 per-bucket 平均值的加权平均值。
是否有可行的方法来计算传入传感器数据流的 运行ning 平均值?我每秒获得多个样本,流可以 运行 几个小时,因此累积值并跟踪样本数量似乎不可行。是否有更务实的方法来解决这个问题,也许会牺牲准确性?
到目前为止,我提出的最佳解决方案是 x[n] = 0.99*x[n-1] + 0.01*y
的 IIR 实现,但这并没有真正给出我需要的平均值。
计算精确平均值需要样本总和和样本计数。没有办法解决这个问题。
保持平均值,A_N,并为新样本更新它:
A_{N+1} = (A_N * N + s_{N+1}) / (N+1)
完全等同于求和(等于项A_N * N)所以这不是解决方案。
保留样本总和的潜在问题是精确值可能会超过表示中的有效位数(无论是整数还是 floating-point)。
为了解决这个问题(如果最大整数大小不够用),可以使用 library for arbitrary large integers 或“home-made”解决方案。
home-made 解决方案可能是在每个桶中使用固定数量的样本或每个桶中的计数来保持“总和桶”。然后可以使用 floating-point 计算将平均值计算为 per-bucket 平均值的加权平均值。