Friday, February 2, 2018

Kalman Filter untuk Pengukuran Kecepatan Kapal


Bismillah. Rekan saya punya data pengukuran kecepatan kapal dari hasil uji lab terhadap miniatur kapalnya. Sayangnya, data pengukuran ini bercampur noise dan filter di sensornya tidak bekerja padahal dia perlu data yang bersih untuk memastikan kecepatan kapal sebenarnya. Lalu, saya mulai mengkaji dan merancang filternya. Prosedur utamanya ada dua:
  1. Memodelkan data pengukuran dengan Auto-Regressive orde 2
  2. Merancang Kalman filter dengan melibatkan model tersebut
Masing2 butir sudah saya jelaskan lebih detil di [1] dan [2].
  • Mengapa perlu memodelkan data? karena Kalman filter memerlukan model sistem/data untuk membuat koreksi.
  • Mengapa model AR yang digunakan? karena hanya data nilai ukur terhadap waktu yang diketahui, tidak ada variabel input.
  • Mengapa Kalman filter? karena Kalman filter sangat ampuh untuk white noise, dan umumnya noise pengukuran memuat white noise.
Kalman filter yang telah saya rancang di [2], saya ubah menjadi kode MATLAB sepenuhnya. Kira2 strukturnya seperti ini.

Kode untuk import data

load('data.mat');        
y=data(:,2);   % data kecepatan

t=data(:,1);   % waktu
n=length(y);

File data terdiri dari dua kolom, kolom 1 memuat waktu, dan kolom 2 memuat data kecepatan.


Kode untuk model Auto-Regressive [1]
x1=0;
x2=0;
x1(1)=0;
x1(2)=y(1);
x2(1)=0;
x2(2)=0;
X(1,:)=[1 x1(1) x2(1)];
X(2,:)=[1 x1(2) x2(2)];

for k=3:n
    x1(k)=y(k-1);
    x2(k)=y(k-2);
    X(k,:)=[1 x1(k) x2(k)];
end

pi=inv(X'*X)*X'*y;


Variabel pi memuat parameter-parameter model AR.

Kode untuk Kalman Filter [2]
Q=eye(2)*0.0001;
R=eye(1)*0.01;
A=[pi(2) pi(3);1 0];    

F=[pi(1) 0]';           
H=[1 0];
xmin=[0 0]';
Pmin=0.01*eye(2);

for i=1:n
    x=A*xmin+F;
    P=A*Pmin*A'+Q;

    K=P*H'*inv(H*P*H'+R);
    x=x+K*(y(i)-H*x);
    P=(eye(2)-K*H)*P;
    zest(i)=H*x;
   
    xmin=x;
    Pmin=P;
end


Variable zest mewakili data pengukuran yang telah difilter.

Apabila kode tersebut saya jalankan, maka perbandingan datanya nampak seperti ini


Sinyal biru adalah data asli pengukuran sedangkan sinyal merah adalah data setelah difilter dengan Kalman. Bila nilai R nya saya perbesar lagi, maka efek filter akan lebih signifikan. Tentang bagaimana pertimbangan menentukan nilai Q dan R pada Kalman filter sudah pernah saya cerita di sini [3][4]. Alhamdulillah.

REFERENSI
[1] http://mnurq.blogspot.co.id/2017/12/memodelkan-data-pengukuran-dengan-auto.html
[2] http://mnurq.blogspot.co.id/2017/12/kalman-filter-untuk-model-auto.html
[3] http://mnurq.blogspot.co.id/2014/03/aplikasi-kalman-filter-diskrit-estimasi.html
[4] http://mnurq.blogspot.co.id/2016/06/meninjau-kembali-kalman-filter-untuk.html

No comments:

Post a Comment