集中式观测融合EKF算法-圆形轨迹

集中式观测融合EKF(CMF-EKF)的思想是,由N个传感器对目标进行多方位观测,这些观测数据传入融合中心进行增广,最终得到融合估计。由于集中式观测融合是把所有传感器数据进行增广,因此融合结果具有全局最优性。

本文采用以下状态模型进行仿真:

\left\{\begin{matrix}x(k+1)=f(x(k),k)+\Gamma (k)w(k) \\z(k)=h(x(k),k)+v(k) \end{matrix}\right.

其中

f(x(k),k)=\begin{bmatrix}x(k)+\frac{v(k)sin(\varphi (k)+T\omega (k))-sin(\varphi (k))}{\omega (k)} \\ y(k)-\frac{v(k)cos(\varphi (k)+T\omega (k))-cos(\varphi (k))}{} \\ v(k) \\ \varphi (k)+T\omega (k) \\ \omega (k) \end{bmatrix}\Gamma (k)=\begin{bmatrix}\frac{T^2}{2}cos(\varphi (k)) &0 \\ \frac{T^2}{2}sin(\varphi (k)) &0 \\ T &0 \\ 0 & \frac{T^2}{2}\\ 0 &T \end{bmatrix}h(x(k),k)=\begin{bmatrix}\sqrt{(x(k)-x1)^2+(y(k)-y1)^2} \\ \sqrt{(x(k)-x2)^2+(y(k)-y2)^2} \\ \sqrt{(x(k)-x3)^2+(y(k)-y3)^2} \end{bmatrix}v(k)=\begin{bmatrix} v1(k)\\v2(k) \\ v3(k) \end{bmatrix}

x(k)k时刻在x轴上的位置,y(k)k时刻在x轴上的位置,v(k)k时刻的速度,\varphi (k)k时刻的切线与x轴夹角的角度,\omega (k)k时刻角速度。matlab程序和仿真图如下:

clc;clear;close all;
bushu=140;
T=0.1;
X=zeros(5,bushu);
X(:,1)=[0;3;1.45;-pi/2;0.4787];%x位置,y位置,速度,角度,角速度
Q=1e-3*diag([1,1]);
W=sqrtm(Q)*randn(2,bushu);
%% 模拟轨迹
for i=2:bushu
    x=X(1,i-1);
    y=X(2,i-1);
    v=X(3,i-1);
    zeita=X(4,i-1);
    w=X(5,i-1); 
    f(:,i)=[x+(v/w)*(sin(zeita+w*T)-sin(zeita));
            y+(v/w)*(-cos(zeita+w*T)+cos(zeita));
                                              v;
                                      zeita+w*T;
                                              w];
   gama=[0.5*(cos(zeita))*T^2,0;
         0.5*(sin(zeita))*T^2,0;
         T,0;
         0,0.5*T^2;
         0,T];
       X(:,i)=f(:,i)+gama*W(:,i);
end
%% UWB位置
x1=0;y1=0;
x2=10;y2=0;
x3=0;y3=10;

%% 距离
delat_w2=1e-1;
R=delat_w2*diag([0.1,0.2,0.1]);
v=sqrtm(R)*randn(3,bushu);
for i=1:bushu
    Z(1,i)=sqrt((X(1,i)-x1)^2+(X(2,i)-y1)^2)+v(1,i);
    Z(2,i)=sqrt((X(1,i)-x2)^2+(X(2,i)-y2)^2)+v(2,i);
    Z(3,i)=sqrt((X(1,i)-x3)^2+(X(2,i)-y3)^2)+v(3,i);   
end
%% 滤波
Xekf=zeros(5,bushu);
Xekf(:,1)=[0;3;1.45;-pi/2;0.4787];
Xjian=zeros(5,bushu);
P=eye(5);
for i=2:bushu
    x=Xekf(1,i-1);
    y=Xekf(2,i-1);
    v=Xekf(3,i-1);
    zeita=Xekf(4,i-1);
    w=Xekf(5,i-1); 
    f1=[x+(v/w)*(sin(zeita+w*T)-sin(zeita));
       y+(v/w)*(-cos(zeita+w*T)+cos(zeita));
       v;
       zeita+w*T;
       w];
   fai=[ 1, 0,  (sin(zeita + T*w) - sin(zeita))/w, (v*(cos(zeita + T*w) - cos(zeita)))/w, (T*v*cos(zeita + T*w))/w - (v*(sin(zeita + T*w) - sin(zeita)))/w^2;
         0, 1, -(cos(zeita + T*w) - cos(zeita))/w, (v*(sin(zeita + T*w) - sin(zeita)))/w, (v*(cos(zeita + T*w) - cos(zeita)))/w^2 + (T*v*sin(zeita + T*w))/w;
         0, 0,                                  1,                                     0,                                                                  0;
         0, 0,                                  0,                                     1,                                                                  T;
         0, 0,                                  0,                                     0,                                                                  1];
    gama1=[0.5*(cos(zeita))*T^2,0;
         0.5*(sin(zeita))*T^2,0;
         T,0;
         0,0.5*T^2;
         0,T];
    Xjian(:,i)=f1;
    P0=fai*P*fai'+gama1*Q*gama1';
    z1=sqrt((Xjian(1,i)-x1)^2+(Xjian(2,i)-y1)^2);
    z2=sqrt((Xjian(1,i)-x2)^2+(Xjian(2,i)-y2)^2);
    z3=sqrt((Xjian(1,i)-x3)^2+(Xjian(2,i)-y3)^2);
    z(:,i)=[z1;z2;z3];
    x=Xjian(1,i);
    y=Xjian(2,i);
    H=[                   x/(x^2 + y^2)^(1/2),                   y/(x^2 + y^2)^(1/2), 0, 0, 0;
        (2*x - 6)/(2*((x - 3)^2 + y^2)^(1/2)),             y/((x - 3)^2 + y^2)^(1/2), 0, 0, 0;
                    x/((y - 3)^2 + x^2)^(1/2), (2*y - 6)/(2*((y - 3)^2 + x^2)^(1/2)), 0, 0, 0];
    K=P0*H'*pinv(H*P0*H'+R);
    Xekf(:,i)=Xjian(:,i)+K*(Z(:,i)-z(:,i));
    P=(eye(5)-K*H)*P0;
end

figure(1)
t=1:bushu;
subplot(2,3,1);plot(X(1,:),X(2,:),'-ro',Xekf(1,:),Xekf(2,:),'-b.');legend('True','CMF-EKF');title('二维平面跟踪图');
subplot(2,3,2);plot(t,X(1,:),'-ro',t,Xekf(1,:),'-b.');legend('True','CMF-EKF');title('状态1跟踪图');
subplot(2,3,3);plot(t,X(2,:),'-ro',t,Xekf(2,:),'-b.');legend('True','CMF-EKF');title('状态2跟踪图');
subplot(2,3,4);plot(t,X(3,:),'-ro',t,Xekf(3,:),'-b.');legend('True','CMF-EKF');title('状态3跟踪图');
subplot(2,3,5);plot(t,X(4,:),'-ro',t,Xekf(4,:),'-b.');legend('True','CMF-EKF');title('状态4跟踪图');
subplot(2,3,6);plot(t,X(5,:),'-ro',t,Xekf(5,:),'-b.');legend('True','CMF-EKF');title('状态5跟踪图');

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EKF-LSTM算法是一种基于LSTM的自适应学习算法,用于处理序列数据。该算法结合了扩展卡尔曼滤波(EKF)和长短期记忆(LSTM)网络的优势,能够有效地处理长序列依赖问题。 EKF-LSTM算法的核心思想是将EKF应用于LSTM网络的训练过程中,以提高模型的学习效果。具体而言,EKF-LSTM算法通过对LSTM网络的参数进行迭代更新,使得网络能够更好地适应输入序列的特征。在每次迭代中,EKF-LSTM算法使用EKF来估计网络参数的梯度,并根据梯度信息更新参数。这样,算法可以在训练过程中动态地调整网络的权重,以适应不同的输入序列。 EKF-LSTM算法的优点在于它能够处理长序列依赖问题,并且具有较好的学习效果。通过结合EKF和LSTM的特点,该算法能够更好地捕捉序列数据中的长期依赖关系,从而提高模型的预测准确性。 以下是EKF-LSTM算法的一个示例代码[^1]: ```matlab % 初始化参数 theta = randn(1, 3); P = eye(3); % 迭代更新参数 for t = 1:T % 前向传播 [h, c] = lstm_forward(x(:, t), theta); % 计算梯度 [dtheta, dP] = lstm_backward(x(:, t), h, c, theta); % 更新参数 [theta, P] = ekf_update(theta, P, dtheta, dP); end ``` 以上代码展示了EKF-LSTM算法的基本流程。在每次迭代中,算法通过前向传播计算LSTM网络的输出,然后通过反向传播计算梯度。接下来,算法使用EKF来更新网络参数,并迭代进行训练。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值