TOP > 研究 > ESDSの適用例

E S D S の 適 用 例


 

  ESDSの簡単な適用例

1.ESDSとは
ESDSは,

  the system which Estimate the Smoothed value
  and the Differential value
    by using Sliding mode system

の頭文字をとったもので,センサ情報の平滑化,そして微分値の推定を目的としたシステムです.このシステムは,インパルス性の雑音が含まれる信号に対して効果的にはたらきます.その例を以下に示します.この信号は,信号成分100に対して,500という大きさのインパルス性雑音がランダムに混入しています.サンプリングタイム10[msec],サンプリング数は1000点,そのうち100点のデータがインパルス性雑音です.

図をクリックすると,ESDSによる処理結果が表示されます.
 

2.ESDSの構成
詳細は,資料をご覧ください.
ポストスクリプト形式の文章がダウンロードできます.
 
 

3.実際のプログラミング
以下のシステムが,ESDSです.この微分方程式を,ルンゲクッタによって解くことにより,平滑値,および微分値の推定を行います.ここで,yはセンサによって得られる値,x1は平滑値,そしてx2は微分推定値となります.

ここでは,BASIC数値計算法(1984,青木:コロナ社)を参考にプログラムを行います.すると,たとえば4次のルンゲクッタの場合,

を繰り返し計算すればよいことがわかります.ただし,

です.ここで,t0,x10,x20が与えられたときに,x11,x21を求め,その値を用いてx12,x22を求め...,というように次々と新しいx1n,x2nを求めればよいわけです.このときに気を付けなければならないのは,yも時間関数である,という点です.従って,実際の処理としては,

というような手順となります.しかし,ここで問題があります.下の図において,時間 ti のとき,前時刻から推定された値x1i,x2i およびセンシングされた値 yi を用いてx1,i+1,x2,i+1 を求めるわけですが,この計算の途中で t = ti + H/2 のときのyの値を知る必要があります.時間ti のときには,ti+1 の時点でセンシングされる値を知ることは出来ないので,yiyi+1 を直線補完して,その間のデータを取る,ということは出来ません.従って,次のように考えます.すなわち,A/Dコンバータのホールド回路と同様に,時刻ti+1 まではyi という値でホールドするわけです.このように考えると, t = ti + H/2 のときのyの値をyi で近似することは,妥当であるといえます.

2次のルンゲクッタの場合
上の例では,4次のルンゲクッタを示しましたが,計算が簡単な2次のルンゲクッタによる計算法も示しておきます.基本的には4次の場合と同じですが,計算式が異なります.

を繰り返し計算することになります.ただし,

です.

4次のルンゲクッタ・ギルの場合
4次のルンゲクッタギルですが,計算が複雑です.以下に,計算方法を示します.





 

4.数値計算に関する考察
ここでは,Runge-Kuttaの計算の刻み幅Hをどのように設定するか,という点について考察します.サンプリングタイムをTとすると,基本的には,H=Tとすればいいはずですが,結果的にはそうなっていません.下に例を挙げますが,Hを細かくとる,すなわちサンプリングタイム内にRunge-Kuttaの計算を多く行った方が良好な結果となっています.以下に,実際の信号に対する例を示します.



以上のような結果になります.もっとも良好な応答を示したのが,サンプリングタイムTの間に100回2次のRunge-Kuttaの計算を行った場合で,次に良好なのが,4次のRunge-Kutta Gillの計算を1回行った場合,という結果になりました.実際にロボットなどに実装することを考えると,計算量は少なければ少ないほど良いわけですから,使用するハードウェアの計算能力,サンプリングタイムなどにあわせて,計算アルゴリズムを工夫する必要があります.
 

5.C言語による実装
以上のことを踏まえ,C言語によってESDSの実装を行います.プログラムの仕様としては,
  ESDS <input file> <output file>
というように実行すると,雑音を含む入力信号から,平滑値・微分値が出力される,というようにします.ファイルの形式としては,
 入力ファイル:1列目<TIME> 2列目<センサ入力>
 出力ファイル:1列目<TIME> 2列目<センサ入力> 3列目<平滑値> 4列目<微分値>
というようにします.以上の使用に従って実装されたESDSのプログラムです.こちらの環境では,gccでコンパイルして使用していますが,特別なことはしておりませんので,どのような環境でもしよう出来ると思います.以下に,このプログラムによって処理した信号の例を示します.図は,ノイズの混じった信号ですが,クリックすると処理結果が表示されます.

図をクリックすると,ESDSによる処理結果が表示されます.

図をクリックすると,ESDSによる処理結果が表示されます.

図をクリックすると,ESDSによる処理結果が表示されます.

図をクリックすると,ESDSによる処理結果が表示されます.
 
 


Takanori Emaru : mail address
(c) Laboratory of Robotics and Dynamics, Hokkaido University