Skip to content

Latest commit

 

History

History
45 lines (31 loc) · 1.38 KB

MovingAverage.md

File metadata and controls

45 lines (31 loc) · 1.38 KB

移動平均

値の急激な変化を抑えるクラスです。

モーターの出力値を急激に変化させると、大電流が流れ、モーターやモータードライバーに負荷がかかります。移動平均を使うことで、出力値の急激な変化を抑えられます。

移動平均とは時系列データを平滑化する手法です。サンプル数が多いほど滑らかになりますが、応答性が悪くなります。

Note

ループ毎に平均値を更新するため、ループ周期が一定でないと正しく動作しません。LoopCycleController を使ってループ周期を一定にすることをお勧めします。

#include <Udon.hpp>

static Udon::LoopCycleController loopCtrl{ 10000 };
static Udon::MovingAverage<50> movingAverage;  // サンプル数 50

void setup()
{
}

void loop()
{
    movingAverage.update(入力値);
    double 出力値 = movingAverage.getValue();

    loopCtrl.update();
}

operator()() によって以下のようにも書けます。フィルターをかけるイメージです。

void loop()
{
    double 出力値 = movingAverage(入力値);

    loopCtrl.update();
}

サンプル数 20 の場合、入出力の関係は以下の様になります。