Her şeyden önce, ilk defa Kalman filtresi yapmaya çalışıyorum.
Daha önce bu yazının arka planını açıklayan StackOverflow'daki gürültü ve hız değerlerinden varyasyonları filtreleyen soruyu yayınladım . Bu filtrelemeye çalıştığım değerlerin tipik bir örneğidir. Burada durumun azalması gerekmiyor. Ancak değişim oranı tipik olarak böyle
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
Kalman Filtremi şu eğitime göre uyguladım: Kalman Filtresi Aptallar için .
Uygulamam buna benziyor (sözde kod).
//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
Önceden 0 tahmini ile başlıyorum. Bu iyi çalışıyor gibi görünüyor. Ama ne fark bu güncelleştirme her çalıştırıldığında kalmanGain azalacak olduğunu, bu da benim yeni değerler daha az benim filtre çalışıyor (?) Güven anlamına gelir. Bunu istemiyorum.
Sadece hareketli bir ortalama (basit ve üstel ağırlıklı) kullanarak bu kullanmaya gittim. Şu anki kadar iyi sonuç bile alamıyorum.
Benim sorum bu doğru uygulama olup olmadığını ve önceki hata varyansım ve standart sapma gönderdiğim örnek değerlere göre iyi görünüyorsa? Parametrelerim aslında iyi sonuçlar alıp alamayacağımı görmek için rastgele seçildi. Birkaç farklı aralık denedim ama kötü sonuçlarla. Yapabileceğim değişikliklere ilişkin herhangi bir öneriniz varsa, gerçekten takdir edilecektir. Eksik olan bazı şeyler varsa özür dilerim. Burada da ilk kez gönderme.