📄 immkf.m
字号:
function [XXE,YYE]=immkf(XX,YY,T,D)
%概率转移矩阵
P=[0.95 0.025 0.025
0.025 0.95 0.025
0.025 0.025 0.95];
%模型1参数(非机动)
q1=0;
Fai1=[1 T 0 0
0 1 0 0
0 0 1 T
0 0 0 1];
G1=[T/2 0
1 0
0 T/2
0 1];
H1=[1 0 0 0
0 0 1 0];
%模型2参数(机动)
q2=0.001;
Fai2=[1 T 0 0 T*T/2 0
0 1 0 0 T 0
0 0 1 T 0 T*T/2
0 0 0 1 0 T
0 0 0 0 1 0
0 0 0 0 0 1];
G2=[T*T/4 0
T/2 0
0 T*T/4
0 T/2
1 0
0 1];
H2=[1 0 0 0 0 0
0 0 1 0 0 0];
%模型3参数(机动)
q3=0.0114;
Fai3=Fai2;
G3=G2;
H3=H2;
%初始化
Z(1,:)=XX;
Z(2,:)=YY;
XE1=[XX(3),(XX(3)-XX(2))/T,YY(3),(YY(3)-YY(2))/T]';
PE1=[D D/T 0 0
D/T q1/4+2*D/(T*T) 0 0
0 0 D D/T
0 0 D/T q1/4+2*D/(T*T)];
XE2=[XX(3),(XX(3)-XX(2))/T,YY(3),(YY(3)-YY(2))/T,(XX(3)+XX(1)-2*XX(2))/T*T,(YY(3)+YY(1)-2*YY(2))/T*T]';
PE2=[D D/T 0 0 0 0
D/T q2*T*T/16+2*D/(T*T) 0 0 q2*T/4 0
0 0 D D/T 0 0
0 0 D/T q2*T*T/16+2*D/(T*T) 0 q2*T/4
0 q2*T/4 0 0 2*q2 0
0 0 0 q2*T/4 0 2*q2];
XE3=XE2;
PE3=[D D/T 0 0 0 0
D/T q3*T*T/16+2*D/(T*T) 0 0 q3*T/4 0
0 0 D D/T 0 0
0 0 D/T q3*T*T/16+2*D/(T*T) 0 q3*T/4
0 q3*T/4 0 0 2*q3 0
0 0 0 q3*T/4 0 2*q3];
U=[1 0 0];
N=length(XX);
%循环
for k=3:N
%输入交互
for j=1:3
c(j)=dot(P(:,j),U);
end
for i=1:3
for j=1:3
UU(i,j)=P(i,j)*U(i)/c(j);
end
end
X01=(XE1(1:4))*UU(1,1)+(XE2(1:4))*UU(2,1)+(XE3(1:4))*UU(3,1);
XE1(5)=0;XE1(6)=0;
X02=XE1*UU(1,2)+XE2*UU(2,2)+XE3*UU(3,2);
X03=XE1*UU(1,3)+XE2*UU(2,3)+XE3*UU(3,3);
P01=(PE1+(XE1(1:4)-X01)*(XE1(1:4)-X01)')*UU(1,1)+(PE2(1:4,1:4)+(XE2(1:4)-X01)*(XE2(1:4)-X01)')*UU(2,1)...
+(PE3(1:4,1:4)+(XE3(1:4)-X01)*(XE3(1:4)-X01)')*UU(3,1);
for i=5:6
for j=1:6
PE1(i,j)=0;
end
end
for i=5:6
for j=1:6
PE1(j,i)=0;
end
end
P02=(PE1+(XE1-X02)*(XE1-X02)')*UU(1,2)+(PE2+(XE2-X02)*(XE2-X02)')*UU(2,2)...
+(PE3+(XE3-X02)*(XE3-X02)')*UU(3,2);
P03=(PE1+(XE1-X03)*(XE1-X03)')*UU(1,3)+(PE2+(XE2-X03)*(XE2-X03)')*UU(2,3)...
+(PE3+(XE3-X03)*(XE3-X03)')*UU(3,3);
%模型条件滤波
%模型1
%X01=X01(1:4);
XP1=Fai1*X01;
PP1=Fai1*P01*Fai1';
K1=PP1*H1'*inv(H1*PP1*H1'+D*eye(2));
XE1=XP1+(K1*(Z(:,k)-H1*(XP1)));
PE1=(eye(4)-K1*H1)*PP1;
miu1=Z(:,k)-H1*(XP1);
S1=H1*PP1*H1'+D*eye(2);
A(1)=exp(-miu1'*inv(S1)*miu1/2)/((2*pi)*sqrt(det(S1)));
%模型2
XP2=Fai2*X02;
PP2=Fai2*P02*Fai2'+G2*q2*eye(2)*G2';
K2=PP2*H2'*inv(H2*PP2*H2'+D*eye(2));
XE2=XP2+K2*(Z(:,k)-H2*XP2);
PE2=(eye(6)-K2*H2)*PP2;
miu2=Z(:,k)-H2*XP2;
S2=H2*PP2*H2'+D*eye(2);
A(2)=exp(-miu2'*inv(S2)*miu2/2)/((2*pi)*sqrt(det(S2)));
%模型3
XP3=Fai3*X03;
PP3=Fai3*P03*Fai3'+G3*q3*eye(2)*G3';
K3=PP3*H3'*inv(H3*PP3*H3'+D*eye(2));
XE3=XP3+K3*(Z(:,k)-H3*XP3);
PE3=(eye(6)-K3*H3)*PP3;
miu3=Z(:,k)-H3*XP3;
S3=H3*PP3*H3'+D*eye(2);
A(3)=exp(-miu3'*inv(S3)*miu3/2)/((2*pi)*sqrt(det(S3)));
%求归一化常数
C=dot(A,c);
%求模型概率
for i=1:3
U(i)=A(i)*c(i)/C;
end
%输出交互
XXE(k)=XE1(1)*U(1)+XE2(1)*U(2)+XE3(1)*U(3);
YYE(k)=XE1(3)*U(1)+XE2(3)*U(2)+XE3(3)*U(3);
end%循环结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -