7

フリート管理システムを開発していますが、タスクの 1 つは、車両の燃料消費量を表すグラフを表示することです ( CAN バスからのデータに基づく)。

データ値が 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 <- これは良いパターンではない一貫性があり、受け取ったデータはユーザーに表示するのに適切ではありません。

値を平滑化したいのですが、一度に平均化する値の数によって、結果が異なります。

重要な問題は、グラフに表示する必要があり、平滑化してはならない、消耗および燃料補給の瞬間が時々あることです。

ユーザーに説得力のある方法でグラフを分析して表示するには、どのようなアルゴリズムを使用できますか?

4

3 に答える 3

3

給油/排水がいつ行われているかを判断する方法はありますか? その場合、その時点でアルゴリズムを動的に変更できます。

それ以外の場合は、指数平滑法を使用することをお勧めします。

d (0 <= d < 1) を前の数値の重み係数とします。したがって、display_number = prev_data*d + new_data*(1-d)

適切な重み係数を使用すると、「でこぼこ」が取り除かれるように見えますが、同時に結果は燃料イベントを反映します。

これは唯一のオプションではなく、アルゴリズムの例ですが、お役に立てば幸いです。

小さな編集:指数平滑法に適切な名前があることに気づきませんでした。私が作成したゲーム内でフレーム レートを表示するときに、この手法を使用しただけでした。だから、ありがとうケンパー。

于 2013-06-21T20:53:15.913 に答える
1

ドレインとデータを共有しなければ、これは多かれ少なかれ単なる知識に基づいた推測です...

バンプを滑らかにするスライド平均(少なくともバンプのサイズのウィンドウを使用)を試しますが、そのような信号のプロパティがわからないため、ドレインを破壊する可能性があります。

だから私はこのようなことを試してみます:

  1. バンプ最大期間を見つける

    一定の形状の船とタンクの場合、最大バンプ期間は、船が耐えることができる最大の波のサイズと船の長さから固定され、タンクの形状とサイズによってスケーリングされます。この期間がわからない場合は、結果として得られる局所的な最小値/最大値 (ピーク) をいくつか見つけて、それらの間の最大距離を取得することで、その場で測定できます。

  2. 排水を検出する関数を作成する

    どうやってするの?あなたがそれを共有していないので、データがどのように見えるか分からないので、私は言えません.

  3. データを処理します (十分な数のサンプルを先取り)

    したがって、スライド平均ウィンドウと同じサイズの FIFO を作成します。最初に最初のサンプルで FIFO を完全に満たしてから、サンプルを FIFO に渡します。ただし、出力値を保存/表示/プロットする代わりに、代わりに FIFO 内のすべての値の平均を使用してください。

    FIFO (ウィンドウ) サイズ 9 サンプルの移動平均の前 (黒) と後 (青) のバンプ信号の出力を次に示します。

    プロット

    データは、FIFO の半分のサイズで元の信号から時間シフト (遅延) されていることに注意してください (プロットが互いに対応するように、プロット上でデータをシフトし直しました)。

  4. 流出が検出され、スライド平均がそれを破壊する場合

    ドレインが開始される前に、スライド平均を一時的に無効にする必要があります (小さなスライド ウィンドウ サイズを使用するだけです)。ドレインする直前に、元の値から 1 までサイズを線形に補間できます...そして、その後元に戻すので、信号は滑らかさを失いません。ただし、スライド平均では排出情報が完全に保存される可能性があり、この部分は必要ありません。関連するデータがなければ知る由もありません。

より高度なデータが必要な場合は、より詳細なデータがあれば、バンプの形状が特定の形状であると仮定できます (燃料が振動するタンクの形状による)。したがって、信号をFFTし、バンプに固有の周波数を削除して、逆 FFT で再構築することができます。複雑なドメインを避けたい場合は、DCTでこれを行うことができます。しかし、そのようなタスクについては、十分な測定データがありません。

于 2020-10-14T07:51:04.260 に答える