24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1162  |  回复: 2

zhwei19800

新虫 (初入文坛)

[求助] 水平抛物的扩展卡尔曼滤波,我程序或者理解在哪出了问题,错误在哪里?求高人指点 已有1人参与

我自己做了一个matlab程序,但是仿出来,估计曲线根本收敛不到实际曲线。我想请明白的朋友给分析分析,是程序有问题(卡尔曼滤波方程)
,还是什么问题。如果能帮忙给修改过来,我感激不尽。
1、问题:从空中水平抛射出的物体,初始水平速度vx ,初始位置坐标(0,0 );受重力 和阻尼力影响,阻尼力与速度平方成正比,水平和垂直阻尼;还存在不确定的零均值白噪声干扰力。在坐标原点处有一观测设备(不妨想象成雷达),可测得距离 (零均值白噪声误差 )、角度 (零均值白噪声误差 )。
2、程序
clear all
kx = 0.1; ky =0.5; % 阻尼系数
g = 9.8; % 重力
t = 20; % 仿真时间
Ts = 0.1; % 采样周期
len = fix(t/Ts); % 仿真步数
dax = 1.5; day = 1.5;  % 系统噪声
mrad = 0.001;
dr = 10; dafa = 10*mrad; % 量测噪声
X=[0;50;500;0];%初始位置
%初始化
P_pre=100*eye(4);
Q = diag([0; dax; 0; day])^2;
R = diag([dr; dafa])^2;
X_pre=[0 ; 50;520;0];%初始估计初值
X_est=[0 ; 50;500;0];%最终估计值,用于演示
U=[0 ;0 ;0 ;-g];
%实际曲线
for i=2:len
X(:,i)=[1 Ts 0 0;0 1-kx*X(2,(i-1))*Ts 0 0; 0 0 1 Ts;0 0 0 1+ky*X(4,(i-1))*Ts]*X(:,(i-1))+[0 ;0 ;0; -g*Ts]+[0;dax*randn(1,1)*Ts;0 ;day*randn(1,1)*Ts];
Y(:,i)=[sqrt(X(1,(i))^2+X(3,(i))^2); atan(X(1,(i))/X(3,(i))) ]+[dr*randn(1,1);dafa*randn(1,1)];
end
for i=1len-1)
F=[1 Ts 0 0;0 1-2*kx*X_pre(2,(i))*Ts 0 0; 0 0 1 Ts;0 0 0 1+2*ky*X_pre(4,(i))*Ts];%用上一时刻后验估计
X_pre(:,i+1)=X_pre(:,i)+([X_pre(2,i);-kx*X_pre(2,i)^2;X_pre(4,i);ky*X_pre(4,i)^2]+U)*Ts;
P_pre(:,:,i+1)=F*P_pre(:,:,i)*F'*Ts+Q;%为啥要乘以Ts
H=[X_pre(1,(i+1))/sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0 X_pre(3,(i+1))/sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0;X_pre(3,(i+1))/(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0  -X_pre(1,(i+1))/(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0];%用当前时刻先验估计
%H=[1/sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0 1/sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0;X_pre(3,(i+1))/(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0  -X_pre(1,(i+1))/(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0];%用当前时刻先验估计
K=P_pre(:,:,i+1)*H'*(H*P_pre(:,:,i+1)*H'+R)^-1;
X_post(:,i+1)=X_pre(:,i+1)+K*(Y(:,i+1)-[sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2); atan(X_pre(1,(i+1))/X_pre(3,(i+1))) ]);
P_post(:,:,i+1)=P_pre(:,:,i+1)-K*H*P_pre(:,:,i+1);
%赋值
P=P_post(:,:,i+1);%保存每次的后验估计
X_est(:,i+1)=X_post(:,i+1);%保存每次的后验估计
P_pre(:,:,i+1)=P_post(:,:,i+1);
X_pre(:,i+1)=X_post(:,i+1);
end
plot(X(1,,X(3,, 'r',X_est(1,,X_est(3,,'g')

水平抛物的扩展卡尔曼滤波,我程序或者理解在哪出了问题,错误在哪里?求高人指点
1.jpg
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhwei19800

新虫 (初入文坛)

我又改了下。
这条语句:P_pre(:,:,i+1)=(F-eye(4))*P_pre(:,:,i)*(F-eye(4))'+Q;%这里为啥不用F=A+I 而用A呢。用A就能估计,用F就发散。咋回事。


clear all
kx = 0.1; ky =0.5; % 阻尼系数
g = 9.8; % 重力
t = 5; % 仿真时间
Ts = 0.1; % 采样周期
len = fix(t/Ts); % 仿真步数
dax = 1.5; day = 1.5;  % 系统噪声
mrad = 0.001;
dr = 10; dafa = 10*mrad; % 量测噪声
X=[0;50;500;0];%初始位置
%初始化
P_pre=100*eye(4);
P_post=100*eye(4);
L=[0 0 0 0;0 1 0 0;0 0 0 0;0 0 0 1];
Q = L*diag([0; dax; 0; day])^2*L';
R =[1 0;0 1] *diag([dr; dafa])^2*[1 0;0 1]';
Pk = 100*eye(4);
X_pre=[0 ; 50;500;0];
X_post=[0 ; 50;500;0];
X_est=[0 ; 50;500;0];
U=[0 ;0 ;0 ;-g*Ts];

%实际曲线
for i=1:len
X(:,i+1)=[1 Ts 0 0;0 1-kx*X(2,(i))*Ts 0 0; 0 0 1 Ts;0 0 0 1+ky*X(4,(i))*Ts]*X(:,(i))+[0 ;0 ;0; -g*Ts]+[0;dax*randn(1,1)*Ts;0 ;day*randn(1,1)*Ts];
Y(:,i+1)=[sqrt(X(1,(i+1))^2+X(3,(i+1))^2); atan(X(1,(i+1))/X(3,(i+1)))]+[dr*randn(1,1);dafa*randn(1,1)];
end
X(1,;
X(3,;
for i=1:len
F=[1 Ts 0 0;0 1-2*kx*X_pre(2,(i))*Ts 0 0; 0 0 1 Ts;0 0 0 1+2*ky*X_pre(4,(i))*Ts];%用上一时刻后验估计
%X_pre(:,i+1)=[1 Ts 0 0;0 1-kx*X_pre(2,(i))*Ts 0 0; 0 0 1 Ts;0 0 0 1+ky*X_pre(4,(i))*Ts]*X_pre(:,(i))+U;
X_pre(:,i+1)=X_pre(:,i)+([X_pre(2,i);-kx*X_pre(2,i)^2;X_pre(4,i);ky*X_pre(4,i)^2])*Ts+U;
%X_pre(:,i+1)=F*X_pre(:,i)+U;
P_pre(:,:,i+1)=(F-eye(4))*P_pre(:,:,i)*(F-eye(4))'+Q;%这里为啥不用F=A+I
%P_pre(:,:,i+1)=F*P_pre(:,:,i)*(F)'+Q;
%H=[1/sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0 1/sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0;X_pre(3,(i+1))/(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0  -X_pre(1,(i+1))/(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0];
H=[X_pre(1,(i+1))/sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0 X_pre(3,(i+1))/sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0;X_pre(3,(i+1))/(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0  -X_pre(1,(i+1))/(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2) 0];%用当前时刻先验估计
K=P_pre(:,:,i+1)*H'*inv(H*P_pre(:,:,i+1)*H'+R);
X_post(:,i+1)=X_pre(:,i+1)+K*(Y(:,i+1)-[sqrt(X_pre(1,(i+1))^2+X_pre(3,(i+1))^2); atan(X_pre(1,(i+1))/X_pre(3,(i+1))) ]);
P_post(:,:,i+1)=P_pre(:,:,i+1)-K*H*P_pre(:,:,i+1);
%赋值
P=P_post(:,:,i+1);
X_est(:,i+1)=X_post(:,i+1);
P_pre(:,:,i+1)=P_post(:,:,i+1);
X_pre(:,i+1)=X_post(:,i+1);
end
plot(X(1,,X(3,, 'r',X_est(1,,X_est(3,,'+r')%实际曲线
2楼2015-03-22 10:23:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mchen_6431

专家顾问 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
zhwei19800: 金币+5, ★★★很有帮助 2015-04-29 08:10:00
根据你自己建立的状态方程和量测方程进行编程啊,
然后在套扩展卡尔曼的公式,然后再编程,估计你修改人家公式存在偏差导致的。
首先看懂原理再编程序比较好。
3楼2015-03-22 17:38:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zhwei19800 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 26年电池方向博士申请 10+4 15615939259 2026-04-09 5/250 2026-04-16 12:37 by 墨荷之露
[考研] 296求调剂 +12 汪!?! 2026-04-09 13/650 2026-04-15 20:01 by 学员JpLReM
[考研] 通信工程求调剂!!! +6 zlb770521 2026-04-14 6/300 2026-04-15 20:00 by 学员JpLReM
[考研] 272分材料子求调剂 +41 Loy0361 2026-04-10 54/2700 2026-04-14 18:00 by lhj2009
[考研] 366求调剂 +11 不知名的小卅 2026-04-11 11/550 2026-04-14 15:50 by zs92450
[考研] 求调剂 +12 何气正 2026-04-13 13/650 2026-04-14 14:47 by zs92450
[考研] 求调剂 +16 雪逢冬 2026-04-10 16/800 2026-04-14 14:27 by 逆水乘风
[考研] 食品与营养(0955)271求调剂 +15 升格阿达 2026-04-12 16/800 2026-04-14 13:18 by 浮若_安生
[考研] 085600材料与化工329分求调剂 +24 叶zilin 2026-04-13 25/1250 2026-04-14 09:20 by 试管破裂
[考研] 297工科,求调剂? +13 河南农业大学-能 2026-04-12 13/650 2026-04-13 14:12 by dingyanbo1
[考研] 290求调剂 +18 柯淮然 2026-04-12 20/1000 2026-04-13 12:56 by cyh—315
[考研] 346分,工科0854求调剂,专硕 +6 moser233 2026-04-12 7/350 2026-04-12 22:11 by fqwang
[考研] 0831生医工第一轮调剂失败求助 +12 小熊睿睿_s 2026-04-11 16/800 2026-04-12 16:28 by 钰璞
[考研] 求调剂,一志愿材料科学与工程985,365分, +8 材化李可 2026-04-11 10/500 2026-04-12 08:42 by 852137818
[考研] 一志愿厦大0856,306求调剂 +15 Bblinging 2026-04-11 15/750 2026-04-11 22:53 by 314126402
[考研] 本人女孩 +7 吼吼, 2026-04-10 9/450 2026-04-11 14:45 by ACS Nano——
[考研] 0854调剂 +4 长弓傲 2026-04-09 4/200 2026-04-11 09:18 by 猪会飞
[考研] 一志愿北理工298英一数二已上岸,感谢各位老师 +14 Reframe 2026-04-10 16/800 2026-04-10 23:07 by caotw2020
[考研] 301求调剂 +5 149. 2026-04-10 5/250 2026-04-10 15:45 by 柴小白
[考研] 一志愿沪9,326生物学求相关专业调剂 +4 刘墨墨 2026-04-09 4/200 2026-04-10 12:07 by pengliang8036
信息提示
请填处理意见