みなさん,こんにちは
おかしょです.
センサーから測定値を取得すると,ノイズが含まれているためデータにばらつきが生じています.
実際はデータに変動があるはずがないのですが,ノイズのせいでデータには変動があるように見えてしまいます.
このようなノイズは制御系にも大きく影響を及ぼします.
そこで,このようなノイズを除去するために用いられる最も簡単なローパスフィルタについて解説します.
この記事を読むと以下のようなことがわかる・できるようになります.
- ローパスフィルタとは
- ローパスフィルタの特徴
- ローパスフィルタのプログラム
この記事を読む前に
この記事ではボード線図を用いて解説をします.
以下の記事ではボード線図の解説をしているので,そちらを先に読んでおくことをおすすめします.
ローパスフィルタとは
ローパスフィルタというのは1遅れ系と呼ばれる以下のような伝達関数でノイズを低減化するフィルタです.
ローパスフィルタという名前なので,低周波数の入力を出力するという特徴があります.
\[
G(s) = \frac{K}{Ts+1} \tag{1}
\]
伝達関数というのはシステムの入力と出力の比を表し,フィルタとして使うには入力にノイズが混じった出力を入れます.
そうすると,ノイズが低減化された出力が得られます.
ローパスフィルタの特徴
ローパスフィルタは\(T\)や\(K\)の値をどのように設定するのかによって,性能が決まります.
ここでは\(T\)と\(K\)をそれぞれ変化させた時のボード線図を見て,ローパスフィルタの特徴を考察していきます.
ローパスフィルタの時定数T
まずは\(T\)を変化させると,ボード線図は以下のようになります.
ゲイン線図を見ると,\(T\)が大きければ大きいほどゲインは低周波数で小さくなっていきます.
これはつまり,\(T\)が大きいと高周波数だけでなく低周波数のノイズを除去することを意味します.
普通のノイズは高周波数であることがほとんどなので,高周波数のノイズが除去できればいいのですが,低周波数のものまで除去するようになってしまうと,データそのものに影響を与えかねないので低周波数のものは除去しない方が良いでしょう.
次に位相線図を見ると,\(T\)の値が大きいと位相が遅れています.
これはセンサーで取得したデータが,フィルターを通ると遅れて出力されるようになってしまうことを意味します.
これによって,データが何秒か遅れてデータが送られてくることになります.
データが遅れてしまうのは困るので,位相線図から\(T\)はできるだけ小さい方が良いということになります.
以上のことから,\(T\)はノイズの周波数に合わせて小さい方が良いと言えます.
ローパスフィルタの定数ゲインK
定常ゲイン\(K\)を変化させると,ボード線図は以下のようになります.
この定常ゲイン\(K\)を変化させると,位相は変化しませんがゲインが変化します.
ゲイン線図を見ると,\(K\)を大きくするとゲインも大きくなります.
これは入力された値を大きくすることを意味します.
ローパスフィルタはノイズを除去することが目的にもかかわらず,ゲインが大きくなってしまうとノイズも大きくなってしまいます.
なので,定常ゲイン\(K\)は1とするのが一般的です.
ローパスフィルタのプログラム
センサーから得られるデータは離散的で連続時間では得ることができません.
そのため,データの処理は離散化された式で行う必要があります.
ここで解説している1次遅れフィルタも例外ではありません.
最初に示した伝達関数を離散化すると,以下のようになります.(この式の導出はこちらの記事の(7)式から)
\[
\begin{eqnarray}
y[k+1] &=& y[k]+ \frac{T_s}{2}\left[ \{-\frac{1}{T} y[k+1]+\frac{K}{T} u[k+1]\}+\{-\frac{1}{T} y[k]+\frac{K}{T} u[k]\}\right]\\
&=& y[k]- \frac{T_s}{2T} y[k+1]+\frac{KT_s}{2T} u[k+1]-\frac{T_s}{2T} y[k]+\frac{KT_s}{2T} u[k] \\
\left(1+\frac{T_s}{2T}\right)y[k+1] &=& \left(1-\frac{T_s}{2T}\right)y[k]+ \frac{KT_s}{2T} (u[k+1]+ u[k]) \\
y[k+1] &=& \frac{2T-T_s}{2T+T_s} y[k]+ \frac{KT_s}{2T+T_s} (u[k+1]+ u[k]) \tag{2}
\end{eqnarray}
\]
この式の\(y[k+1]\)がノイズを低減化した後の出力になります.
\(u[k+1]\)が新しく得られたセンサーからのデータ,\(u[k]\)は1ステップ前のデータを表しています.
まとめ
この記事ではローパスフィルタの特徴やプログラムの書き方を解説しました.
ボード線図を使って特徴を解説しましたが,時定数などの設定はノイズの周波数などを測定してから行った方がより正確にノイズを低減化することができます.
続けて読む
ここに書かれているノイズの低減化をすればセンサーから得られるデータが正確なものになります.
ここでフィルタを掛けたデータを使えば,より正確なロボットの姿勢角の算出が可能となります.
以下の記事ではセンサーを使って姿勢角を求める方法について解説しているので,今回の記事とあわせて読んでみてください.
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
それでは最後まで読んでいただきありがとうございました.
コメント