우선, 이것은 내가 칼만 필터를 만들려고 처음입니다.
나는 이전에 다음 게시물을 게시했습니다.이 게시물의 배경을 설명하는 StackOverflow의 속도 값에서 잡음과 변화를 필터링 하십시오. 이것은 필터링하려는 일반적인 값 샘플입니다. 여기에서 반드시 감소시킬 필요는 없습니다. 그러나 변화율은 일반적으로
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 Filter를 구현했습니다 : Kalman Filter for Dummies .
내 구현은 다음과 같습니다 (의사 코드).
//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
나는 사전 평가 0으로 시작합니다. 이것은 잘 작동하는 것 같습니다. 그러나 내가 주목하는 것은이 업데이트가 실행될 때마다 kalmanGain이 감소한다는 것입니다. 즉, 필터가 실행되는 시간이 길수록 새 값을 신뢰한다는 것을 의미합니다 (?). 나는 그것을 원하지 않습니다.
나는 이동 평균 (단순 및 지수 가중)을 사용하는 것에서 이것을 사용하는 것으로 이동했습니다. 지금은 그다지 좋은 결과를 얻을 수 없습니다.
내 질문은 이것이 올바른 구현인지 여부와 내가 게시 한 샘플 값에 따라 이전 오류 분산 및 표준 편차가 좋아 보이는지 여부입니다. 내 매개 변수는 실제로 무작위로 선택되어 좋은 결과를 얻을 수 있는지 확인합니다. 여러 범위를 시도했지만 결과가 좋지 않습니다. 내가 할 수있는 변경 사항에 대한 제안 사항이 있으면 정말 감사하겠습니다. 명백한 것들이 빠진 것이 유감입니다. 여기에 처음으로 게시 할 수도 있습니다.