【发布时间】:2016-04-29 21:34:57
【问题描述】:
我有人们将光标移向屏幕上的目标的数据(我实际上有很多数据)。例如:
运动总是在 ~9 厘米左右。因此,在上述情况下,个人超过了目标并在最后进行了纠正。这往往会发生。
我想要做的是使用卡尔曼滤波器来预测光标的位置,而不是 t+1,而是 t+15(所以提前 15 个时间步长)。此外,我认为我当前的实现存在错误,这就是我在上述情况下得到的:
你可以看到它在最后真的搞砸了,这让我怀疑我的实现。所以这是我的问题:
1) 有人可以查看我的代码,看看我是否犯了错误吗?有什么改进建议吗?
2) 我将如何修改我的代码,以便我可以预测未来的许多步骤(例如,15 步)而不是仅仅一步?在给定的迭代中,我基本上想预测 x(t+15) 而不是 x(t+1)。
非常感谢这里的任何帮助,我已经坚持了一段时间。
这是数据: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
【问题讨论】:
标签: algorithm matlab signal-processing prediction kalman-filter