Saya terjebak pada pemodelan model sistem, yaitu mendapatkan vektor keadaan saya dan vektor input. Dugaan saya adalah bahwa posisi dan kecepatan adalah vektor keadaan dan akselerasi adalah vektor masukan. Dugaan saya yang kedua adalah bahwa ketiga kuantitas berada dalam vektor keadaan dan tidak ada dalam vektor input.
Jadi ... apa itu vektor negara dan apa vektor input dalam kasus saya?
-
Informasi tambahan:
Saya mendapatkan pengukuran dari sensor posisi dan sensor percepatan. Semuanya terjadi dalam 1D, misalnya pada garis lurus. Saya ingin menggabungkan bacaan ini (dan menghilangkan noise) untuk mendapatkan estimasi kecepatan untuk setiap catatan waktu.
Persamaan ini menggambarkan sistem; Saya tidak yakin apakah mereka dimodelkan dengan benar. Jika saya mengerti dengan benar, aman untuk memprediksi bahwa akselerasi adalah konstan (walaupun dalam kenyataannya ia berubah) - karena matriks kovarians proses memperbaiki asumsi ini (benar?).
Saya juga memiliki beberapa data sampel untuk dikerjakan (nilai input tidak disuarakan di sini untuk kesederhanaan):
time pos acc what I should get as output (velocity)
[0.0s] 0.000, -0.000 | 18.850
[0.1s] 1.885, -0.113 | 18.850
[0.2s] 3.768, -0.227 | 18.839
[0.3s] 5.650, -0.340 | 18.816
[0.4s] 7.528, -0.452 | 18.782
[0.5s] 9.401, -0.565 | 18.737
TAMBAHAN 2:
Untuk komunikasi yang lebih baik saya membuat jawaban baru tetapi harus diperlakukan sebagai komentar untuk jawaban pertama. Jason Anda sudah banyak membantu saya dan saya benar-benar berterima kasih atas waktu Anda. Saya masih memiliki masalah dengan ini - hasil dari Kalman Filter tidak seperti yang diharapkan. Semoga Anda menemukan waktu, silakan tinjau yang berikut, terima kasih. Saya sudah berhutang bir atau dua (atau kopi jika Anda suka) - jika Anda memiliki paypal hubungi saya di primoz [at] codehunter.eu :)
Saya telah menerapkan model yang diusulkan Jason dalam jawaban pertama. Saya menambahkan brengsek sebagai variabel 4 negara. Setelah berjam-jam meninjau saya memutuskan untuk kembali ke sini untuk meminta bantuan. Nilai yang saya dapatkan dari KF tidak seperti yang diharapkan. Tabel di bawah ini merupakan data dari 10 iterasi pertama algoritma. Perhatikan bagaimana brengsek meningkat setiap langkah waktu sehingga membuat perkiraan lain salah. Setelah satu detik perbedaan antara akselerasi nyata dan perkiraan lebih dari 1m / s² (lihat tabel, baris terakhir)!
real measured estimated real
time pos acc pos acc pos acc jerk vel[!] velocity
0.0 0.000 -0.000 -0.040 0.030 | -0.300 -0.060 0.000 18.850 <--> 18.850
0.1 1.885 -0.113 1.965 -0.153 | 1.585 -0.061 -0.006 18.844 <--> 18.844
0.2 3.768 -0.227 3.778 -0.247 | 3.469 -0.066 -0.035 18.835 <--> 18.827
0.3 5.650 -0.340 5.750 -0.370 | 5.351 -0.090 -0.122 18.815 <--> 18.799
0.4 7.528 -0.452 7.358 -0.452 | 7.228 -0.152 -0.291 18.769 <--> 18.759
0.5 9.401 -0.565 9.251 -0.555 | 9.094 -0.282 -0.574 18.673 <--> 18.708
0.6 11.269 -0.677 11.309 -0.717 | 10.938 -0.518 -1.006 18.494 <--> 18.646
0.7 13.130 -0.788 13.260 -0.758 | 12.752 -0.840 -1.490 18.233 <--> 18.573
0.8 14.983 -0.899 15.043 -0.949 | 14.520 -1.286 -2.096 17.854 <--> 18.488
0.9 16.827 -1.009 16.977 -1.089 | 16.235 -1.838 -2.770 17.362 <--> 18.393
1.0 18.661 -1.118 18.831 -1.168 | 17.890 -2.477 -3.476 16.762 <--> 18.287
Matriks saya ada di sini:
Apa yang menyebabkan penambahan ini di setiap catatan waktu untuk brengsek ? Apakah ada matrik saya yang salah?
Hal yang sama berlaku dengan solusi pertama (hanya model 3 negara) - akselerasi tidak berubah sebagaimana mestinya.
EDIT TERAKHIR:
Saya akhirnya berhasil membuatnya bekerja. Saya tidak yakin apakah ada kesalahan implementasi atau matriks P&Q yang salah.
sumber
Jawaban:
Anda tidak akan membuat asumsi percepatan konstan dalam kasus ini. Anda biasanya akan melakukan itu jika Anda tidak memiliki alat untuk mengukur percepatan sistem, tetapi Anda mengatakan bahwa itu dapat diamati untuk kasus Anda. Cara paling jelas untuk memodelkan sistem ini adalah menggunakan vektor keadaan
di mana adalah posisi, adalah kecepatan, dan adalah percepatan sistem pada saat instan . Karena Anda mengatakan bahwa Anda dapat mengukur posisi dan percepatan sistem, vektor pengukuran adalah:xk vk ak k zk
dengan
menghasilkan model pengukuran:
di mana adalah noise (Gaussian) yang melekat pada pengukuran. Sekarang, kecuali jika Anda menambahkan kekuatan yang diketahui ke sistem yang akan mempengaruhi dinamikanya, maka vektor input . Lihat pertanyaan terbaru ini untuk diskusi lebih rinci tentang berbagai istilah dalam model Kalman, yang perlu Anda ketahui, dan yang tidak Anda ketahui .vk uk=0
Sunting: Mengenai komentar di bawah ini tentang cara menangani matriks transisi keadaan untuk istilah akselerasi: ada beberapa cara berbeda untuk mengatasinya. Anda dapat mengasumsikan model zero-brengsek (brengsek adalah turunan waktu dari percepatan); ini sama dengan mengasumsikan bahwa . Atau, Anda bisa menambahkan elemen keempat ke vektor negara Anda:ak+1=ak
di mana adalah brengsek sistem, atau laju perubahan waktu percepatan, pada saat instan . Karena Anda tidak mengukur brengsek secara langsung, Anda akan memiliki matriks pengukuran:jk k
Dan matriks transisi negara akan menjadi:
Ini adalah model "konstan-brengsek" (mirip dengan model kecepatan-konstan atau percepatan konstan yang mungkin Anda lihat dalam contoh sederhana); matriks transisi keadaan Anda membuat asumsi implisit bahwa brengsek itu konstan untuk semua nilai k. Ini tidak mungkin benar. Untuk menangani aspek masalah itu, Anda akan memperkenalkan istilah gangguan proses dalam komponen brengsek dari persamaan transisi keadaan.
Secara kualitatif, ini memungkinkan Anda untuk menyatakan bahwa Anda tidak yakin bagaimana istilah brengsek akan berubah dari langkah waktu ke langkah waktu, tetapi Anda mengharapkan perubahan itu acak dengan beberapa distribusi Gaussian. Ini adalah alat yang sering digunakan untuk "menyetel" model filter adaptif seperti ini hingga Anda menemukan serangkaian parameter yang berfungsi dengan baik untuk aplikasi Anda.
sumber
Saya berasumsi bahwa variabel keadaan Anda sesuai jawaban Jason. Jika itu yang terjadi, maka saya percaya masalah Anda mungkin adalah matriks (proses noise): karena nol di mana-mana kecuali untuk pembaruan brengsek, satu-satunya istilah yang memperbarui nilai posisi, kecepatan, dan percepatan adalah bagian deterministik dari perbarui persamaan (kecuali di mana sifat stokastik brengsek melalui).Q
Coba gunakan matriks seperti:Q
Jika elemen diagonal itu nol, model mengatakan "Saya tidak berharap posisi, kecepatan atau percepatan berubah (selain oleh persamaan pembaruan)" --- yang jelas bukan itu masalahnya.
sumber
Saya pikir masalahnya ada di Q. Q sedang mengisi daya K dengan nilainya. Saya mencapai hasil yang baik ketika Q dimuat dengan kekuatan delta_t.
Lihat artikel tentang model wiener. Ini memiliki matriks Q yang baik.
A00 harus kelipatan dari kekuatan delta_t dari 5 A11 kekuatan delta_t dari 3 kekuatan delta_t A22 dari 1 A01 kelipatan dari kekuatan delta_t dari 4
Dan seterusnya
Melihat
https://www.google.com/url?sa=t&source=web&rct=j&url=https://pdfs.semanticscholar.org/9c1b/db6b5a25c1231e775c654f731e1ca1fef31a.pdf&ved=2ahbel_AkekUdArAAAAAAAAAAA
sumber