Bagiku, ini pengetahuan baru tentang pemrograman MATLAB untuk Kalman Filter. Saya ingin meninjau kembali kalman filter yang saya buat beberapa tahun lalu untuk motor dc, bisa dibaca di sini [2]. Dulu, saya membuat sinyal output model, sinyal pengukuran, dan noise dengan Simulink dan algoritma kalman filternya dengan M-File. Kini saya coba menggabungkannya dalam satu M-File saja.
Kalman filter diskrit di sini digunakan untuk estimasi, yaitu upaya pencarian nilai sejati dari nilai ukur yang bercampur noise.
Pertama, representasi sistem dalam state-space. Formulasi matematis dan penjelasannya di [2].
A=[0.7844 0.1116;0.5 0];
B=[1 0]';
C=[0.279 0.2936];
D=0;
Plant = ss(A,B,C,D,Ts);
u=ones(n,1); % sinyal masukan (unit step)
Lalu saya simulasikan sistem dengan fungsi lsim. Ini termasuk fungsi yang baru saya ketahui.
[y,t]=lsim(Plant,u,t);
Menentukan parameter kalman filter, Q dan R
Q = 0.1*eye(2); % kovarian noise proses
R = 1; % kovarian noise pengukuran
Mendefinisikan noise pengukuran
v = sqrt(R)*randn(n,1);
Deklarasi variabel dan parameter
P=Q; % Initial error covariance
x=zeros(2,1); % Initial condition on the state
yv = y+v; % Data pengukuran
ye = zeros(n,1); % Initial condition of filtered response
ycov = zeros(n,1);
errcov = zeros(n,1);
Kode inti algoritma kalman filter diskrit dinyatakan di sini
for i=1:n
% Measurement update
Mn = P*C'*inv(C*P*C'+R);
x = x + Mn*(yv(i)-C*x); % x[n|n]
P = (eye(2)-Mn*C)*P; % P[n|n]
ye(i) = C*x;
errcov(i) = C*P*C';
% Time update
x = A*x + B*u(i); % x[n+1|n]
P = A*P*A' + Q; % P[n+1|n]
end
Tuning Parameter
Nilai parameter Q dan R menentukan kualitas estimasi kalman filter, setahuku tidak ada rumus atau perhitungan tertentu untuk menentukan keduanya. Q adalah kovarian noise proses dan R adalah kovarian noise pengukuran. Menebak nilai Q pada dasarnya adalah menebak noise yang terlibat di dalam proses, makin dekat tebakan dengan nilai noise sebenarnya, makin bagus pula kualitas estimasi. Begitu juga dengan nilai R.
Saya akan sedikit menceritakan tentang tuning parameter kalman filter, Q dan R, untuk kasus estimasi pengukuran tegangan motor dc ini. Pertama, saya pilih Q = 1*eye(2), dan R=0.1. Hasil simulasinya sebagai berikut.
Garis biru adalah nilai steady-state tegangan output untuk motor dc, bintik hijau adalah hasil pengukuran bercampur noise, dan garis merah adalah hasil estimasi sinyal ukur.
Nampak dalam grafik, bahwa kualitas estimasi masih kurang baik. Lalu saya turunkan nilai Q = 0.1*eye(2) dan R = 0.1, dan hasilnya sebagai berikut.
Nilai Q yang lebih kecil dapat memperbaiki kualitas estimasi. Lalu saya turunkan nilai R = 0.01 dengan nilai Q tetap 0.1. Hasilnya sebagai berikut.
Hasil estimasi menjadi lebih buruk. Artinya, tebakan nilai R terlalu kecil. Lalu nilai R saya naikkan menjadi R = 1, untuk Q = 0.1. Hasil estimasi menjadi sebagai berikut.
Nampak bahwa, kualitas estimasi sangat baik dengan nilai Q = 0.1 dan R = 1.
Tahap tuning ini saya ceritakan untuk menggambarkan bahwa kedua parameter filter, Q dan R, sama-sama menentukan kualitas estimasi.
Catatan: Saya menggunakan MATLAB 2007
-------
Penulis: M. Nur Qomarudin, Surabaya, Indonesia, +62 857 33 484 101, alfiyahibnumalik@gmail.com
Notes: Bila artikel ini bermanfaat bagi Saudara-i, kami harap Anda sedia like Facebook Fanpage kami: Masjidillah. Like dan dukungan Anda sangat bermakna bagi kami. Terimakasih.
Referensi
[1] http://www.mathworks.com/help/control/examples/kalman-filter-design.html
[2] http://mnurqomarudin.blogspot.co.id/2013/04/kalman-filter-diskrit-untuk-motor-dc.html
[3] http://mnurqomarudin.blogspot.co.id/2014/03/parameter-filter-dan-penyesuaiannya.html
[4] http://mnurqomarudin.blogspot.co.id/2014/03/aplikasi-kalman-filter-diskrit-estimasi.html
[5] http://mnurqomarudin.blogspot.co.id/2014/03/pdf-pengenalan-kalman-filter.html
mantap yang ini mas nurqi....
ReplyDeleteThis comment has been removed by the author.
ReplyDeletemas kok pas di run ngga muncul hasil simulainya ya mas
ReplyDelete