センサー値の平滑化に使える適応型フィルターを考えてみた。

3軸センサー(QMC5883L)の測定値って結構ばらつくよね?

でもローパスフィルターかますと応答性が悪くて実時間制御には使えなくなるし...なんかいい方法ないかな...と。

そこで前回の測定値との差が小さければ平滑度を高くし大きければ平滑度を低くする適応型フィルターを考えてみた。

測定値を眺めてみると前回との差が±25程度ブレていたので、前回との差が0(0%)-128以上(100%)としたフィルターを試してみたところ安定度と応答性が両立できるような結果となった。二次関数なども試してみたけどこの方法のほうが簡単で結果もいい感じ。

int32_t d = 測定値 – 平滑値;
平滑値 += (d * (abs(d) < 128 ? abs(d) : 128)) / 128;

【試験プログラムの一部の抜粋】

【手で傾けたりしてみたとき】
()内はQMC5883Lの測定値

【固定状態】
()内はQMC5883Lの測定値

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください