我正在开发车队管理系统,其中一项任务是显示表示车辆油耗的图表(基于来自 CAN bus 的数据)。
如果数据值介于 0 和 100 之间,则表示百分比。所以,如果我得到一个整数 45,这意味着油箱中的燃料是 45%。
但是,如果载具在移动,由于船舶的物理特性,可能会出现不一致的数据。例如,一个数据系列可能是:
76,76,75,74,73,73,71,70 <- 这是一个很好的模式,因为它显示了燃料是如何下降的。
76,70,75,76,77,76,74,74,73,72,69,72,73,73,72,71 <- 这不是一个好的模式,因为燃料在tank 不一致,我收到的数据不适合显示给用户。
我想平滑这些值,但是根据我选择一次平均多少个值,结果是不同的。
关键问题是,有时我必须在图表中显示一些消耗和补充能量的时刻,并且不能平滑。
我可以使用什么样的算法来分析并以令人信服的方式向用户展示我的图表?
最佳答案
有没有办法确定何时加油/排水?如果是这样,那么您可以在那些时候动态地更改您的算法。
否则,我建议使用指数平滑。
令 d (0 <= d < 1) 为前一个数字的权重因子。 所以 displayed_number = prev_data*d + new_data*(1-d)
有了适当的权重因子,“颠簸”似乎会被消除,但同时结果会反射(reflect)燃料事件。
这不是唯一的选择,更多的是示例算法,但我希望您觉得它有用。
小编辑:我没有意识到指数平滑有一个专有名称。我只是在我创建的游戏中显示帧速率时使用了该技术。所以,谢谢 Kemper。
关于java - 燃料图平滑算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244005/