2013-06-21 59 views
6

我正在开发车队管理系统,其中一项任务是显示代表车辆油耗的图表(基于来自CANBUS的数据)。燃油表平滑算法

如果数据值介于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 < - 这不是一个好的模式,因为跳跃燃料坦克不一致,我收到的数据不适合向用户展示。

我想平滑这些值,但取决于我一次选择多少个平均值,结果是不同的。

关键的问题是,有时会出现排水和加油的时刻,我必须在图表中显示,并且不能平滑。

什么样的算法可以用来以令人信服的方式分析和表示我的图表?

+0

您是否有任何其他输入(例如GPS数据)来检测车辆是否在移动? –

+0

是的,我有发动机状态和时间 –

+1

以及..用户抱怨吗?我可能会从显示原始数据开始,然后解释传感器具有±10%的可变性 – Randy

回答

2

有什么方法可以确定何时发生加油/排油?如果是这样,那么你可以动态改变你的算法。

否则,我会建议使用指数平滑。

令d(0 < = d < 1)为先前数字的权重因子。 So display_number = prev_data * d + new_data *(1-d)

有了适当的权重因子,看起来“颠簸”会被消除,但同时结果会反映燃料事件。

这不是唯一的选择,更多的示例算法,但我希望你觉得它有用。

小编辑:我没有意识到指数平滑有一个专名。当我在创建的游戏中显示帧频时,我仅仅使用了这种技术。所以,谢谢Kemper。

+1

确定_draining_的唯一方法是燃烧我想要的燃料,这在理论上他似乎试图展示/测量。 –

+0

是的。我同意。我认为现在我的答案可以进一步改善,因为我现在知道发动机的状态是已知的。例如,在某些发动机状态下加油可能不会发生。在这一点上,“d”可能会缩小以补偿。思考?根据这些信息,我想在进行潜在编辑之前进行思考。 –

+0

有时在发动机启动时发生加油。 –

1

据我所知,你想要小的变化消失,但保持大跳不平滑。可能moving median就是你要找的东西,它保留了没有平滑的大跳跃(edge preserving属性)。

我不确定这是最适合您的方法,我必须查看您的数据。