gpt4 book ai didi

algorithm - 实现卡尔曼滤波器进行预测

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:16 25 4
gpt4 key购买 nike

我有人们将光标移向屏幕上的目标的数据(我实际上有很多数据)。例如:

position data

移动始终在 ~9cm 左右。所以在上面的例子中,个人超过了目标并在最后纠正了它。这往往会发生。

我想要做的是使用卡尔曼滤波器来预测光标的位置,而不是在 t+1,而是在 t+15(因此提前 15 个时间步)。此外,我认为我当前的实现有一个错误,这就是我在上述情况下得到的结果:

kalman filter

你可以看到它在最后确实变得一团糟,这让我怀疑我的实现。所以这是我的问题:

1) 有人可以看看我的代码,看看我是否犯了错误吗?有什么改进建议吗?

2) 我将如何修改我的代码,以便我可以预测 future 的许多步(例如,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 - 实现卡尔曼滤波器进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36947785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com