日々の記録

ほどよく書いてきます。

移動平均という名のLPF

2017年06月14日 23時02分23秒 | AVR

センサーなどのノイズを程よく除去するにはローパスフィルター(LPF)が有効である。

デジタル通信するセンサーの場合はアナログのLPFは使えないので、デジタルのLPFを使うことになる。

 

センサから出てくる値をxとして、現在保有している平均値をSとすると

S=S*0.9 + 0.1x

といった具合でLPFが実装できる。

浮動小数点演算は小さなマイコンには重い作業なので

32倍の値をS2とでもしておき、

S2=( S2 - (S2>>5) + x )

S=S>>5

といった値を吐き出すのが演算負荷的によろしいのではと思っている。>>はビットシフト。

ジャンル:
ウェブログ
コメント (6)   この記事についてブログを書く
この記事をはてなブックマークに追加
« 気圧温度計 | トップ | 2017年 ホタル »

6 コメント

コメント日が  古い順  |   新しい順
Unknown (Unknown)
2017-06-16 01:52:53
S = (S*31)>>5 + x

S = (S*31+x)>>5

なんだけど、xが32より小さいときは
フィルターとしての特性がスムーズにいかないけど
整数計算では、まぁそんなもんでしょうね。(^^)
っと、 (いち)
2017-06-16 01:58:25
名前を書き忘れた。(^^;)
Unknown (まこち)
2017-06-17 15:13:18
どうもです、訂正しておきます。
かけ算省略 (いち)
2017-06-18 02:32:22
演算時間のかかる、かけ算割り算を省略することもできて、
S = ( (S << 5) - S + X) >> 5
なんてのはどうでしょう?
安定化 (いち)
2017-06-18 22:32:09
そうなんです。私が行った平均化も本文の最後のように、整数倍 ( X << 5 のような) した値を基準にしてやってます。
上の式のように毎回Xと同レベルに戻してしまうと値がギクシャクしますからね。

スタートの時は0から平均化すると立ち上がりに時間がかかるから、最初に1サンプルした値を整数倍して基準としておかないといけませんね。
そう (まこち)
2017-06-19 23:11:40
初期の立ち上がりはどうしようかと思って同じ方法で処理しました。
今使っているマイコンは浮動小数点使っても大丈夫なくらいのメモリーがあるので浮動小数点演算させちゃってます。

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL