0

私はコードを求めているのではなく、洞察を求めていることに注意してください。おそらく、すでに同様の問題に遭遇した人からのものです。

組み込みシステムでリアルタイムに実行されるコードを管理しています。安全上の理由から、新しいチェックを実装する必要があります。

このチェックは、特定の変数の積算値に基づいています。積分は、最後の "T_s" 秒にわたる必要があります。つまり、新しいサイクルごとに、変数が T_s 秒前に持っていた値を削除し、現在の値を追加する必要があります。

素朴なアプローチは、最後の T_s*frequency 浮動小数点値を配列に格納することです。

これは 62.5Hz で動作するため、多くの貴重で限られたメモリを急速に浪費します。

明らかに精度を犠牲にして、そのようなチェックのメモリフットプリントを大幅に削減する既知のアプローチはありますか?

値は実際のシステムからの測定値であり、関数によって生成されたものではありません。

M ポイントのそれぞれに N 個の平均値を格納し、N 個の平均値を統合することを考えました。これにより、メモリ要件が N+M の数値に削減され、T_s*frequency よりも大幅に小さくすることができますが、次のように思います。

  • これが調査され、「最適な」ポイントが見つかった場合 (たとえば、M の関数として)。検索しましたが、「数値積分」を含むものを検索しても探しているものにつながらないため、Google-fuが壊れているようです。

  • より良いアプローチがあれば

この投稿に C のタグを付けたのは、C がプロジェクトの公式言語であるためです。残念ながら、ANSI-C で機能しないソリューションは実行できません。

4

1 に答える 1

0

3 つ (?) の変数のみを使用した統計計算が記述されているインターネット ページが見つからないようです。google-fu が回復したときにそうするかもしれません。

残念ながら、100% の精度は必要ないが、平均値を維持できる場合は、次のようにすることができます。

avg = (avg * 0.95) + ((newValue - avg) * 0.05);

これにより、最新の値 ( newValue) の影響が 1/20 以下である古い値のおおよその平均が得られます。20 を掛けた結果は、基本的に平均積分です。もちろん、考慮するサンプルの数に関係なく、2 つの定数を および の任意の値にそれぞれ1-(1/N)調整できます。1/NN

編集:

統計的中央値、モード、歪度、尖度を推定するための「オンライン」(反復子) アルゴリズム?

https://math.stackexchange.com/questions/106700/incremental-averageing

もいくつかの有用な答えを持っているかもしれません。

于 2014-10-10T14:13:01.750 に答える