Kalman Filter Sederhana

Spread the love

Kalman filter memiliki dua tahapan yang menjadi dasar perhitungannya yaitu prediksi dan pembaharuan. Model persamaan di kalman filter dapat berbentuk linier maupun non-linier. Apabila bentuk persamaan merupakan non-linier maka terdapat banyak metode dari kalman filter yaitu dengan Extended Kalman Filter (EKF), Unscented Kalman Filter (UKF), Ensemble Kalman Filter (EnKF) dan sebagainya. Namun, pembahasan disini hanya terbatas untuk data filter sederhana berupa 1 dimensi data linier. Sehingga, pembahasan hanya terbatas pada penggunaan Kalman Filter sederhana.

Model

x_k = A x_{k-1} + B u_k + W_k z_k = C x_k + v_k

Keterangan:

x_{k-1} : variabel keadaan pada waktu sebelumnya
U_{k} : vector masukan deterministik pada waktu k
W_{k} : noise pada sistem dengan mean  W_k = 0 dengan kovariansi Q_k
v_{k} : noise pada pengukuran dengan mean V_k = 0 dengan kovariansi R_k
A : variabel keadaan pada waktu sebelumnya

Prediksi

Proses yang digunakan untuk melakukan estimasi dari state satu ke state berikutnya.

\hat{x}_k = A \hat{x}_{k-1} + B u_k P_k = A P_{k-1} A^T+Q_k

Update / Pembaharuan / Correction

Proses yang digunakan untuk memperbaiki prediksi dengan harapan supaya mendapatkan state estimasi yang lebih akurat.

G_k = P_k C^T (C P_k C^T + R_k)^{-1} \hat{x}_k \leftarrow \hat{x}_k + G_k(z_k - C \hat{x}_k) P_k \leftarrow (I - G_k C) P_k

Javascript Code

class KalmanFilter{
	constructor(obj = {R:1,Q:1,A:1,B:0,C:1}){
		this.R = obj.hasOwnProperty('R')?obj.R:1;
		this.Q = obj.hasOwnProperty('Q')?obj.Q:1;

		this.A = obj.hasOwnProperty('A')?obj.A:1;
		this.B = obj.hasOwnProperty('B')?obj.B:0;
		this.C = obj.hasOwnProperty('C')?obj.C:1;

		this.P = null;
		this.x = null;
	}
	predict(u=0){
		this.x = this.A*this.x+this.B*u;
		this.P = this.A*this.P*this.A+this.Q;
	}
	update(z,u=0){
		if(!this.x && this.B != 0) {
			this.x = z/this.C;
			this.P = this.Q/this.C/this.C;
		}
		else if(!this.x && this.B == 0) {
			this.x = z;
			this.P = 1;
		}
		else{
			this.predict(u);
			this.gain = this.P*this.C/(this.C*this.P*this.C+this.R);
			this.x = this.x+this.gain*(z-this.x*this.C);
			this.P = (1-this.gain*this.C)*this.P;
		}
		return this.x;
	}
	get value(){
		return this.x;
	}
	set value(x){
		this.x = x;
		this.predict();
	}
}

Penggunaan Class KalmanFilter tersebut contohnya seperti ini:

var KF = new KalmanFilter(R=20,Q=0.01);

KF.update(100.1);
KF.update(102);
KF.update(103);

console.log('hasil :'+KF.value);

Implementasi

Raw Data

Jika Kalman Filter digunakan pada data tersebut akan menghasilkan filter data sebagai berikut:

R = 20 , Q = 0.01

R = 20 , Q = 0.1

Nilai R merupakan seberapa besar simpangan sensor, seperti contoh signal diatas memiliki simpangan error kisaran +20 sampai -20. Sedangkan untuk nilai Q akan mempengaruhi seberapa besar perubahan akan terjadi. Semakin kecil nilai Q akan mengakibatkan filter tidak begitu rentan terhadap perubahan.

Misalkan ada data lain dengan grafik sebagai berikut:

Data ini merupakan data ketika pilot sedang mencoba untuk stabilisasi antara kecepatan dan altitude. Jadi, ada andil waktu dalam grafik tersebut. Awal-awal, pesawat sedang mengalami penurunan altitude dan pilot mencoba untuk menaikkan kecepatan guna menambah altitude. Dengan demikian, semakin lama, altitude pun bertambah meski pelan-pelan dengan grafik seperti diatas.

Jika hanya diatur supaya R=100 dan Q=0.01, data tersebut apabila difilter menjadi seperti berikut:

Kalman filter seperti tidak sesuai dengan bentuk datanya. Data tersebut memiliki konstanta a=0.95, jika filter ditambahkan konstanta tersebut. Akan tampil seperti:

Kalman filter masih belum menyesuaikan dengan permasalahan / formula dari data tersebut. Maka, kita coba tambahkan pewaktuan didalam kalman filter dengan u=step iterasi dan B=0.5.

Kalman Filter berhasil melakukan estimasi data dari noise tersebut.

Coba atur sendiri antara A, B, C dan R dari grafik yang ada:

a=a= 0.95 r=r= 100
b=b= 0.53
c=c= 1.43    

Dengan demikian, kalman filter tidak hanya menghilangkan noise pada sinyal ataupun apapun bentuk data yang diterimanya. Asalkan permasalahan atau formulanya telah diketahui sehingga kalman filter dapat menghasilkan estimasi yang mendekati kebenaran berdasarkan formula yang ditentukan.

Semoga bermanfaat.

Daftar Pustaka

  • “The Extended Kalman Filter: An Interactive Tutorial for Non-Experts.” The Extended Kalman Filter: An Interactive Tutorial, home.wlu.edu/~levys/kalman_tutorial/.
  • Juanetta, R., & Juanetta, R. (n.d.). KALMAN FILTER. Retrieved from https://www.academia.edu/15394240/KALMAN_FILTER
  • “Kalman Filter.” Wikipedia, Wikimedia Foundation, 18 Apr. 2019, en.wikipedia.org/wiki/Kalman_filter.

Leave a Reply

Your email address will not be published. Required fields are marked *