2013-06-21 93 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屬性)。

我不確定這是最適合您的方法,我必須查看您的數據。