资源简介
运动物体的轨迹预测,分别使用卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波以及数据拟合方法实现。本例代码仅含扩展卡尔曼滤波部分代码。
本例仅为本人在研究轨迹预测问题时为理解算法原理所写,针对具体问题请自行斟酌算法适用性。
本例代码详解后续会在本人博客中做具体说明,欢迎讨论!
代码片段和文件信息
%使用卡尔曼滤波方法对飞行航班进行轨迹预测
%数据来源:FlightAware(https://zh.flightaware.com)
%航 班:CES9937 宁波栎社国际机场飞往成都双流国际机场
%飞行时间:2018-07-17 07:07-09:55
%说明:取起飞后前20组数据作为实验数据。对时间点进行近似取值,假设每隔30s上报一次数据
clear;
clc;
%采样点的个数
N=228;
%测试数据:纬度
latitude=load(‘C:\workspace\matlab workspace\CES9937\latitude.txt‘);
%系统噪声方差
Q=0.25;
%观测噪声方差
R=0.01;
%产生系统噪声
W=sqrt(Q)*randn(1N);
%产生测量噪声
V=sqrt(R)*randn(1N);
%定义符号变量t
syms t;
%方程-根据二阶拟合,纬度关于时间t的函数
%lat = 0.000129*t^2 - 0.022433*t + 29.819;
%方程-根据三阶拟合,纬度关于时间t的函数
%lat = (-1.4341e-06)*t^3 + (0.00062162)*t^2 + (-0.067656)*t + 30.691;
%方程-根据六阶拟合,纬度关于时间t的函数
lat = (2.5716e-12)*t^6 + (-1.5634e-09)*t^5 + (3.2239e-07)*t^4 + (-2.427e-05)*t^3 + (0.00037919)*t^2 + (-0.0017116)*t + 29.728;
%一阶泰勒展开
%lat_taylor = taylor(latt1)
%求解雅克比矩阵作为状态转移矩阵
lat_jacobian = jacobian(latt);
%观测矩阵
H = 1;
%根据状态方程,计算纬度lat_x
lat_x = zeros(1N);
%设置初始值
lat_x(1) = 29.8000;
%在实验中,假设观测值就是真实值
for k=2:N
lat_x(k) = latitude(k);
end
%EKF滤波算法
%卡尔曼对纬度的滤波结果
lat_ekf = zeros(1N);
%假设滤波初始值和假设的初始值相同
lat_ekf(1) = lat_x(1);
%协方差矩阵初始值
P0 = eye(1);
%观测值
lat_obse = zeros(1N);
%设置观测初值
lat_obse(1) = lat_x(1) + V(1);
for k = 2:N
%系统状态方程求取理论值
lat_theo = subs(lattk);
lat_obse(k) = lat_theo + V(k);
%状态转移矩阵F
F = subs(lat_jacobiantk);
%协方差预测
P = F*P0*F‘ + Q;
%求卡尔曼增益
K = P*H‘*inv(H*P*H‘ + R);
%状态更新
lat_ekf(k) = lat_theo + K*(lat_x(k) - lat_obse(k));
%协方差阵更新
P0 = (eye(1) - K*H)*P;
end
%误差分析
%滤波与真实值之间的偏差
Err_Kalman = zeros(1N);
%测量值与真实值之间的偏差
Err_Messure=zeros(1N);
for k=1:N
Err_Kalman(k) = abs(lat_ekf(k) - lat_x(k));
Err_Messure(k) = abs(lat_obse(k) - lat_x(k));
end
%滤波效果图
t = 1:N;
figure
hold on;
box on;
plot(tlat_x‘g-‘tlat_obse‘b-‘tlat_ekf‘r-‘);
legend(‘真实值‘‘观测值‘‘kalman滤波值‘);
xlabel(‘测报时间点‘);
ylabel(‘纬度值‘);
%误差分析图
figure
hold on;
box on;
plot(tErr_Kalman‘r-‘);
legend(‘kalman滤波偏差‘);
xlabel(‘测报时间点‘);
ylabel(‘纬度偏差值‘);
%误差分析图
figure
hold on;
box on;
plot(tErr_Messure‘b-‘);
legend(‘系统状态方程偏差‘);
xlabel(‘测报时间点‘);
ylabel(‘纬度偏差值‘);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2523 2018-08-02 10:42 QA_EKF_lat.m
文件 153993 2018-07-24 16:28 CES9937\CES9937.docx
文件 1825 2018-07-17 15:07 CES9937\latitude.txt
文件 2051 2018-07-17 15:15 CES9937\longitude.txt
文件 410 2018-07-17 11:16 CES9937\飞行数据-20组.txt
目录 0 2018-08-14 20:18 CES9937
----------- --------- ---------- ----- ----
160802 6
相关资源
- 粒子群与遗传混合算法优化
- 各种聚类程序,包括生成聚类树、k
- ORL人脸库的PCA人脸识别,GUI界面
- RBF神经网络对iris分类
- UKF与EKF算法应用比较
- 动态矩阵控制算法dmc
- 演化博弈仿真
- BP神经网络的非线性系统建模
- 时域特征的求取,例如峭度、裕度等
- PCA降维,有详细的注释,你值得拥有
- 数值分析实验报告-数值分析实验报告
- ROSL低秩分解算法,用于图像分析.ra
- 影像组学工具包
- 数学建模作业论文——有两种外形相
- 随机信号分析实验
- 混沌粒子群算法
- 图像数字图像课程设计--数字水印设计
- 这里实现了四种SVM工具箱的分类与回
- 关于gps漂移引起的ekf报错分析
- 最小二乘法模型辨识算法
- 经典功率谱估计与现代功率谱估计的
- 输入电压前馈Buck变换器的研究-输入电
- 投影追踪法
- 数字信号处理实验3用FFT对信号作频谱
- 基于统计分析的红楼梦作者解析
- 人工神经网络及其应用含代码
- 卡尔曼滤波器,自适应滤波器设计
- PSOGSA代码
- 基于SLNR的预编码动态功率分配
- 遗传算法goat工具箱
评论
共有 条评论