Memahami Filter Kalman lewat Contoh Radar Sederhana
(kalmanfilter.net)- Filter Kalman adalah algoritma estimasi keadaan optimal yang memperkirakan keadaan sistem dan memprediksi masa depan di lingkungan dengan banyak noise
- Dengan contoh radar pelacak pesawat, dijelaskan proses meningkatkan akurasi dengan mengulangi tahap prediksi dan pembaruan menggunakan nilai pengukuran jarak dan kecepatan
- Pada tiap tahap, dihitung vektor keadaan, matriks kovarians, dan Kalman Gain untuk menggabungkan nilai pengukuran dan prediksi secara berbobot
- Dengan mempertimbangkan sekaligus ketidakpastian pengukuran dan ketidakpastian model, ditunjukkan secara numerik bahwa galat estimasi (ketidakpastian) berkurang seiring waktu
- Melalui contoh numerik yang intuitif dan perhitungan langkah demi langkah, materi ini memberikan landasan pemahaman untuk merancang dan mengimplementasikan filter secara langsung
Pengantar Filter Kalman
-
Kalman Filter** adalah algoritma estimasi keadaan yang memperkirakan dan memprediksi keadaan sistem di lingkungan yang memiliki ketidakpastian, seperti noise pengukuran atau faktor eksternal
- Digunakan sebagai alat inti di berbagai bidang seperti pelacakan objek, navigasi, robotika, dan kontrol
- Misalnya, dipakai untuk mengurangi noise pada jejak mouse agar gerakannya lebih halus, mendeteksi tren pada data finansial, atau untuk prediksi cuaca
- Materi ini menyoroti bahwa banyak bahan pembelajaran terlalu berfokus pada penurunan matematis sehingga kurang contoh nyata, dan karena itu menyediakan penjelasan intuitif berbasis contoh numerik
- Juga membahas kasus ketika filter yang dirancang dengan buruk gagal melacak target, beserta cara mengoreksinya
- Tujuannya adalah membangun pemahaman agar pembaca dapat merancang dan mengimplementasikan Filter Kalman sendiri
Jalur belajar
- Ringkasan satu halaman: memperkenalkan konsep inti dan rumus utama secara singkat, hanya memerlukan pengetahuan dasar statistik dan aljabar linear
- Tutorial web gratis: tutorial online dengan contoh numerik langkah demi langkah untuk membangun intuisi, tanpa prasyarat pengetahuan
- Kalman Filter from the Ground Up (buku): 14 contoh numerik lengkap, filter nonlinier (Extended/Unscented) dan fusi sensor, termasuk kode Python·MATLAB
Mengapa prediksi diperlukan
- Menjelaskan perlunya estimasi keadaan dan prediksi melalui contoh radar pelacak pesawat
- Keadaan sistem adalah posisi pesawat (jarak (r)), dan radar menghitung jarak dengan mengukur waktu pantulan pulsa
- Kecepatan (v) dapat diukur melalui efek Doppler
- Prediksi posisi setelah selang waktu tertentu (\Delta t) dilakukan melalui model dinamis
- Contoh: (r_{t_1} = r_{t_0} + v \cdot \Delta t)
- (\Delta t = 5s), (r_{t_0}=10,000m), (v=200m/s) → (r_{t_1}=11,000m)
- Di lingkungan nyata terdapat noise pengukuran (Measurement Noise) dan ketidakpastian model (Process Noise)
- Bahkan jika beberapa radar mengukur secara bersamaan, hasilnya bisa sedikit berbeda
- Asumsi kecepatan konstan bisa rusak akibat faktor eksternal seperti angin
- Filter Kalman melakukan estimasi keadaan saat ini dan prediksi keadaan masa depan secara bersamaan, sambil menyediakan ketidakpastian (varians) dari tiap estimasi
- Ini adalah algoritma optimal yang meminimalkan ketidakpastian estimasi keadaan
Contoh Filter Kalman
-
Radar 1 dimensi mengukur jarak (r) dan kecepatan (v) pesawat
- Vektor keadaan (\boldsymbol{x} = [r, v]^T)
- Sistem direpresentasikan dengan vektor dan matriks
-
Iteration 0 — inisialisasi dan prediksi
-
Inisialisasi
- Filter diinisialisasi dengan nilai pengukuran pertama (\boldsymbol{z}_0 = [10{,}000, 200]^T)
- Ketidakpastian pengukuran (simpangan baku): jarak 4m, kecepatan 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
- Estimasi keadaan awal (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
- Kovarians awal (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
-
Tahap prediksi
- Selang waktu (\Delta t = 5s)
- Matriks transisi keadaan (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
- Keadaan prediksi (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
- Prediksi kovarians (tanpa noise proses): (\boldsymbol{P}{1,0} = \boldsymbol{F}\boldsymbol{P}{0,0}\boldsymbol{F}^T = \begin{bmatrix}22.25 & 1.25 \ 1.25 & 0.25\end{bmatrix})
- Menambahkan noise proses ((\sigma_a = 0.2m/s^2)): (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
- Kovarians prediksi akhir: (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
-
Ringkasan Iteration 0
- Menginisialisasi keadaan dan kovarians dengan pengukuran pertama
- Menggunakan model transisi keadaan untuk memprediksi keadaan berikutnya dan ketidakpastiannya
- Rumus prediksi
- Prediksi keadaan: (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
- Prediksi kovarians: (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
-
Iteration 1 — pembaruan dan prediksi
-
Pembaruan filter
- Pengukuran kedua: (\boldsymbol{z}_1 = [11{,}020, 202]^T)
- Ketidakpastian pengukuran meningkat (simpangan baku: jarak 6m, kecepatan 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
- Saat dibandingkan dengan kovarians prediksi (\boldsymbol{P}_{1,0}), ketidakpastian prediksi lebih kecil
- Filter Kalman menggabungkan pengukuran dan prediksi sebagai rata-rata berbobot
- Bobot (K_1): Kalman Gain
- Rumus pembaruan keadaan: (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
- Matriks observasi (\boldsymbol{H} = \boldsymbol{I})
- Perhitungan Kalman Gain: (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) Hasil: (\boldsymbol{K}_1 = \begin{bmatrix}0.4048 & 0.6377 \ 0.0399 & 0.3144\end{bmatrix})
- Inovasi (innovation): (\boldsymbol{z}1 - \hat{\boldsymbol{x}}{1,0} = [20, 2]^T)
- Nilai koreksi: (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
- Keadaan hasil pembaruan: (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
-
Pembaruan kovarians
- Menggunakan bentuk yang disederhanakan: (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
- Hasil: (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
- Setelah pembaruan, ketidakpastian lebih kecil daripada ketidakpastian prediksi maupun pengukuran → menggabungkan pengukuran dan prediksi selalu mengurangi ketidakpastian
-
Tahap prediksi
- Prediksi untuk waktu berikutnya (t_2)
- Prediksi keadaan: (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
- Prediksi kovarians: (\boldsymbol{P}{2,1} = \boldsymbol{F}\boldsymbol{P}{1,1}\boldsymbol{F}^T + \boldsymbol{Q} = \begin{bmatrix}52.86 & 7.47 \ 7.47 & 1.71\end{bmatrix})
- Seiring waktu, jika tidak ada pengukuran, ketidakpastian akan meningkat lagi
- Prediksi untuk waktu berikutnya (t_2)
-
Ringkasan Iteration 1
- Tahap pembaruan: menggabungkan prediksi dan pengukuran dengan Kalman Gain
- Tahap prediksi: meneruskan keadaan yang telah diperbarui ke waktu berikutnya
- Rumus utama
- Pembaruan keadaan: (\hat{\boldsymbol{x}}{n,n} = \hat{\boldsymbol{x}}{n,n-1} + \boldsymbol{K}_n(\boldsymbol{z}n - \boldsymbol{H}\hat{\boldsymbol{x}}{n,n-1}))
- Pembaruan kovarians (Joseph form): (\boldsymbol{P}_{n,n} = (\boldsymbol{I} - \boldsymbol{K}n\boldsymbol{H})\boldsymbol{P}{n,n-1}(\boldsymbol{I} - \boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T)
- Kalman Gain: (\boldsymbol{K}n = \boldsymbol{P}{n,n-1}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T + \boldsymbol{R}_n)^{-1})
Ringkasan contoh
- Tiga tahap Filter Kalman: inisialisasi → prediksi → pembaruan
- Setelah itu, loop prediksi-pembaruan diulang terus
- Setiap kali pengukuran baru ditambahkan, ketidakpastian berkurang dan estimasi keadaan sistem menjadi semakin presisi
- Materi pembelajaran tambahan
- Tutorial online gratis: menyediakan contoh numerik langkah demi langkah
- Buku Kalman Filter from the Ground Up: mencakup filter linear·nonlinear, panduan implementasi, serta kode Python/MATLAB
Belum ada komentar.