Pertama-tama, ini adalah pertama kalinya saya mencoba membuat filter Kalman.
Saya sebelumnya diposting pertanyaan berikut Menyaring kebisingan dan variasi dari nilai kecepatan pada StackOverflow yang menggambarkan latar belakang untuk posting ini. Ini adalah contoh khas dari nilai yang saya coba filter. Mereka tidak harus mengurangi yang terjadi di sini. Tetapi laju perubahan biasanya seperti ini
X ------- Y
16 --- 233.75
24 --- 234.01
26 --- 234.33
32 --- 234.12
36 --- 233.85
39 --- 233.42
47 --- 233.69
52 --- 233.68
55 --- 233.76
60 --- 232.97
66 --- 233.31
72 --- 233.99
Saya telah menerapkan Filter Kalman saya sesuai dengan tutorial ini: Filter Kalman untuk Dummies .
Implementasi saya terlihat seperti ini (kodesemu).
//Standard deviation is 0.05. Used in calculation of Kalman gain
void updateAngle(double lastAngle){
if(firsTimeRunning==true)
priorEstimate = 0; //estimate is the old one here
priorErrorVariance = 1.2; //errorCovariance is the old one
else
priorEstimate = estimate; //estimate is the old one here
priorErrorVariance = errorCovariance; //errorCovariance is the old one
rawValue = lastAngle; //lastAngle is the newest Y-value recieved
kalmanGain = priorErrorVariance / (priorErrVariance + 0.05);
estimate = priorEstimate + (kalmanGain * (rawValue - priorEstimate));
errorCovariance = (1 - kalmanGain) * priorErrVariance;
angle = estimate; //angle is the variable I want to update
} //which will be lastAngle next time
Saya mulai dengan perkiraan sebelumnya sebesar 0. Ini sepertinya berfungsi dengan baik. Tetapi yang saya perhatikan adalah bahwa kalmanGain akan berkurang setiap kali pembaruan ini dijalankan, yang berarti bahwa saya mempercayai nilai-nilai baru saya semakin sedikit semakin lama filter saya dijalankan (?). Saya tidak menginginkan itu.
Saya beralih dari hanya menggunakan moving average (sederhana dan eksponensial tertimbang) untuk menggunakan ini. Saat ini saya bahkan tidak bisa mendapatkan hasil sebagus itu.
Pertanyaan saya adalah apakah ini implementasi yang tepat dan apakah varians kesalahan saya sebelumnya dan standar deviasi terlihat bagus sesuai dengan nilai sampel yang telah saya posting? Parameter saya sebenarnya hanya dipilih secara acak untuk melihat apakah saya bisa mendapatkan hasil yang baik. Saya telah mencoba beberapa rentang berbeda tetapi dengan hasil yang buruk. Jika Anda memiliki saran untuk perubahan yang dapat saya lakukan, itu akan sangat dihargai. Maaf jika ada beberapa hal yang hilang. Pertama kali memposting di sini juga.