속도 추정값을 프로세스에 도입 할 수있는 올바른 방법입니까?
주를 적절히 선택하면 속도 추정치가 "무료"로 나타납니다. 아래 신호 모델 도출을 참조하십시오 (단지 살펴본 간단한 1D 사례).
신호 모델, 2
따라서 우리는 이것을 앞으로 나아 가기 전에 신호 모델에 동의해야합니다. 편집 결과 위치 모델은 다음과 같습니다 .엑스케이
엑스k + 1엑스˙k + 1==엑스케이+ x˙케이Δ t + 12( Δ t )2엑스˙케이+ a Δ t
상태가 이전과 같다면 :
그러면 상태 업데이트 방정식은 다음과 같습니다.
여기서 는 정규 분포 가속도입니다. xk+1=( 1 Δ t 0 1 )xk+( ( Δ t ) 2
엑스케이= ( x케이엑스˙케이)
엑스k + 1= ( 1 Δ t 0 1 ) x케이+ ⎛⎝( Δ t )22Δ의 t⎞⎠에이케이
에이케이
이전 버전과 다른 매트릭스를 제공하지만 및 매트릭스는 동일해야합니다.지에프H
이것을 scilab
(죄송하지만 matlab에 액세스 할 수 없음) 에서 구현하면 다음과 같습니다.
// Signal Model
DeltaT = 0.1;
F = [1 DeltaT; 0 1];
G = [DeltaT^2/2; DeltaT];
H = [1 0];
x0 = [0;0];
sigma_a = 0.1;
Q = sigma_a^2;
R = 0.1;
N = 1000;
a = rand(1,N,"normal")*sigma_a;
x_truth(:,1) = x0;
for t=1:N,
x_truth(:,t+1) = F*x_truth(:,t) + G*a(t);
y(t) = H*x_truth(:,t) + rand(1,1,"normal")*sqrt(R);
end
그런 다음 칼만 필터 방정식을이 (노이즈 측정)에 적용 할 수 있습니다 .와이
// Kalman Filter
p0 = 100*eye(2,2);
xx(:,1) = x0;
pp = p0;
pp_norm(1) = norm(pp);
for t=1:N,
[x1,p1,x,p] = kalm(y(t),xx(:,t),pp,F,G,H,Q,R);
xx(:,t+1) = x1;
pp = p1;
pp_norm(t+1) = norm(pp);
end
따라서 노이즈 측정 값 가 있으며 칼만 필터를 적용하고 칼만 필터를 적용하는 것과 동일한 신호 모델을 사용하여 를 생성했습니다 (때로는 매우 큰 가정).와이와이
다음 그림은 결과를 보여줍니다.
플롯 1 : 및 대 시간.와이엑스케이
플롯 2 : 처음 몇 개의 샘플을 확대 한 모습 :
줄거리 3 : 실제 생활에서 절대 얻을 수없는 것, 실제 위치 대 위치의 추정치.
줄거리 4 : 당신은 또한 실제 생활에서 절대 얻을 수없는 것, 실제 속도 대 속도의 상태 추정치.
Plot 5 : 상태 공분산 행렬의 규범 (실제로 항상 모니터링해야하는 것!) 초기 매우 큰 값에서 매우 작은 값으로 매우 빠르게 이동하므로 처음 몇 개의 샘플 만 표시했습니다.
플롯 6 : 실제 위치와 속도 및 추정치 사이의 오차를 플롯합니다.
위치 측정이 정확한 경우를 연구하면 Kalman udpate 방정식에서 BOTH 위치 및 속도에 대한 정확한 결과를 얻을 수 있습니다. 수학적으로 이유를 보는 것이 간단합니다. wikipedia article 과 동일한 표기법을 사용하면 정확한 측정은 입니다. 사용자는 초기 위치 및 속도가 너무 공지되어 있다고 가정하면 , 다음 및 칼만 이득 행렬 은지k + 1= xk + 1피케이= 0피−k + 1= Q케이k + 1
케이k + 1= ( 12 / d티)
이것은 Kalman 업데이트 절차가
엑스^k + 1= Fk + 1엑스케이+ Kk + 1( zk + 1− Hk + 1에프k + 1엑스케이)= ( x케이+ x˙케이디티엑스˙케이) + ( 12 / d티) ( xk + 1− ( x케이+ x˙케이디t ) )= ( xk + 12 ( xk + 1− x케이) / dt − x˙케이)
보시다시피 속도 값은 속도 추정에 사용하도록 제안한 공식에 의해 제공됩니다. 따라서 속도에 대해 어떤 종류의 계산 볼 수 없지만 실제로는 숨겨져 있습니다.( x케이− xk - 1) / d티