私は人のデータを画面上のターゲットに向かって移動しています(私は実際に多くのデータを持っています)。たとえば:予測のためのカルマンフィルタの実装
動きが〜9センチメートルの周りに常にあります。したがって、上のケースでは、個人が目標をオーバーショットし、最後にそれを修正しました。これは起こりがちです。
私がしたいことは、カルマンフィルタを使ってt + 1ではなくt + 15でカーソルの位置を予測することです(15タイムステップ先)。
あなたはそれが本当に終わりに向かってめちゃくちゃます見ることができ、私を疑います:また、私は私の現在の実装に誤りがあると思い、これは私が上記の場合のために取得していますものです私の実装。だからここに私の質問:
1)誰かが私のコードを見て、私は間違いをしたかどうかを確認できますか?改善のための提案?
2)コードを修正して、1ステップではなく、先行する多くのステップ(たとえば15ステップ)を予測するにはどうすればよいですか?与えられた反復において、私は本質的にx(t + 1)の代わりにx(t + 15)を予測したい。
私は本当にここに助けていただきありがとうございます、私はしばらくの間これに固執してきました。 http://s000.tinyupload.com/index.php?file_id=16556755793392871980
注センチでそれを得るためにあなたが1000で分割する必要があります。
は、ここでのデータです。
ここに私のコードです:
xp=position_data(:,1);
yp=position_data(:,2);
N=length(xp);
Q=eye(4);
motion=zeros(4,1);
H=[1 0 0 0
0 1 0 0];
F=[1 0 1 0
0 1 0 1
0 0 1 0
0 0 0 1];
x=zeros(4,1);
P = eye(4)*1000; %initial uncertainty
observed_x=xp+0.05*rand(N,1).*xp;
observed_y=yp+0.05*rand(N,1).*yp;
R=0.01^2;
pos=[observed_x,observed_y];
start=0;
jj=zeros(N,2); %%jj will be the final result
for k=start+1:length(observed_x)
measurement=pos(k,:);
y = measurement' - H * x;
S = H * P * H' + R; % residual convariance
K = P * H' * inv(S); % Kalman gain
x = x + K*y;
I = eye(4); % identity matrix
P = (I - K*H)*P;
% predict x and P
x = F*x + motion;
P = F*P*F' + Q;
jj(k,:)=x(1:2);
end
したがって、不確実性を初期化するためにデータをどのように使用しますか?私はちょうどそれを推測して、ややうまくいくまで調整し続けました。 Didntはあなたが定量的にそれを決めることができたことを認識しませんでした。 コードを見る余裕があれば、本当に感謝しています。私は自分がスーパーだと自信を持っていますが、そうでなければそのほとんどがそこにあると思います。たぶん、あなたはまた、私はそれが大きなステップの予測を変更する方法を見ることができます。 –
不確実性の測定値を取るルーチンを書くと、行列や現在の値が1000です。あなたのテストデータのコレクションの全部または一部に対してカルマンフィルタを実行し、それがどれほど良いかを示す値を返します。予測誤差の2乗。このルーチンをデリバティブなしで関数を最適化するルーチンに渡し、その最小値を求めて最小値を求めます。しかしまず第一に、エラーの大幅な増加または物理的に可能でない予測による突然の変化を検出し、その時点で不確実性を再初期化することについて考えます。 – mcdowella
OK、私はあなたが言っていることを見ていると思います。私は最初に、エラーの突然の増加を検出した後で不確実性を再初期化することによってそれを試してみるでしょう。ご協力いただきありがとうございます。 –