グルグル回る軸の角度変動の平均値を出す方法#3
グルグル回る軸の角度変動の平均値を出す方法#2 は、
「移動平均」(関数を呼ぶたびに平均値を更新)でしたが、
単純な「加算平均」(一定期間ごとに平均値が出る)で
よければ、こんな方法をどうぞ。
例えば、0.1秒ごとにこれを呼び出して、2秒したら
結果が出るなんていうことでよければ、移動平均の
ためのバッファ(過去データを保持して新値で更新)
は不要です。
/***** 角度を加算平均化 *****/
// in/out deg:0~359度を得る
// 平均回数を過ぎて結果が出るまでは0を返す
#define AVR_SIZ 20 // 平均回数
WORD avr359(short deg)
{
static float ttl_x = 0.0; // X,Y合計値
static float ttl_y = 0.0;
static short cnt = 0; // 加算回数
static short avr = 0; // 平均値
float d, x, y;
PH3_H; // (!!!)PH3 17pin H/L
d = (PAI / 180.0) * (float)(lim359(deg)); // 0~2πに
x = cos(d); // X,Yの値
y = sin(d);
ttl_x = ttl_x + x; // 新値を加算
ttl_y = ttl_y + y;
cnt++; // 回数+1
if(cnt >= AVR_SIZ){
x = ttl_x / AVR_SIZ; // X,Y平均値
y = ttl_y / AVR_SIZ;
cnt = 0; // 次処理のために
ttl_x = ttl_y = 0.0; // 合計値をゼロクリア
d = (180.0 / PAI) * atan2(y, x); // 角度 ±π
avr = lim359(round(d)); // 0~359
}
PH3_L; // (!!!)PH3 17pin H/L
return avr; // 0~359
}
※全角スペースを使ってます。
平均回数経過でフラグを立てるなどすれば、
値が確定したことがわかります。
この場合、「atan2」は毎回実行されませんので、
(sin、cosは毎回)平均値算出以外の処理時間はざっと
20~30μSです。 (32MHzのRX220マイコンで)
※検索:角度の平均値計算
※元記事:グルグル回る軸の角度変動の平均値を出したい:居酒屋ガレージ日記
※これでまとめかな:
グルグル回る軸の角度変動の平均値を出す方法#4
| 固定リンク
「電子工作」カテゴリの記事
- TRWの16pin DIP IC「8543」 これは何?(2023.10.06)
- 予告:「マイコン型導通チェッカー」「電池電圧チェッカー」値上げします(2022.11.16)
- 三和の針式テスター「GP-5」不調(2022.10.18)
- 「ダイソー ミニケース 5個組」が見つからない #2(2022.10.12)
- 「ダイソー ミニケース 5個組」が見つからない(2022.09.29)
コメント