从零开始码出卡尔曼滤波代码-BY忠厚老实的老王

本文详细介绍了如何通过生成随机信号x和对应的观测数据y,运用卡尔曼滤波算法进行粗略和精细滤波。从一维状态到扩展状态的处理,包括观测方程、预测方程的构建,以及初始步、预测步和更新步的实现。通过实例展示了滤波效果的改进,探讨了传感器融合和多模型预测的应用。

tips

用的融合方法被称为“并行滤波融合”(又称观测值扩维融合),是集中式融合系统中的一种方法。集中式融合系统还包含两种方法:序贯滤波融合(又称顺序滤波融合)和数据压缩滤波融合(又称观测值加权融合)。与集中式融合系统对应的还有分布式融合系统。

更多关于多传感器数据融合的内容,大家可参考韩崇昭老师的《多源信息融合》第二版。


目标:生成一段随机信号,并滤波

这里只是对数据进行滤波,并没有进行姿态什么的计算。

1 生成数据,以及对应的观测的数据

t=0.1:0.01:1;
L=length(t);
%生成真实信号x,以及观测y
%首先初始化
x=zeros(1,L);  
y=x;

y2=x;

%生成信号,设x=t^2

for i=1:L
    x(i)=t(i)^2;
    y(i)=x(i)+normrnd(0,0.1);%正态分布,参数为期望和标准差
    y2(i)=x(i)+normrnd(0,0.1);
end

%%%%%%%%%%%信号生成完毕%%%%  

plot(t,x,t,y,'LineWidth',2);

真实数据和观测数据的图示:
在这里插入图片描述
实际的时候,我们不知道蓝色代表的真实值,只有红色的观测值

2 滤波实现一 粗糙的实现

2.1 观测方程:当前的状态+噪声

%观测方程好写Y(K)=X(K)+R,R~N(0,1)

2.2 预测方程实现:最粗糙的建模 当前的状态=上一步的状态+噪声

%%%预测方程观测方程怎么写%%%
%预测方程不好写,因为根据上面图示的观测数据,感觉像是线性增长的,所以我们猜是线性增长
%在这里,可以猜一猜是线性增长,但是大多数问题,信号是杂乱无章的,怎么办?方法是尝试各种模型

%模型一,最粗糙的建模

%状态和观测方程
%X(K)=f * X(K-1)+Q
%Y(K)=h *X(K)+R
%猜R,Q~N(0,1); 作 

%卡尔曼滤波的前提是:状态和观测都是线性变化的,这里的f,h设为1

F1=1;
H1=1;

%猜R,Q~N(0,1),期望为0,方差是1的正态分布,Q,R是贝叶斯滤波的难点,没什么规律,只能靠自己观察总结
Q1=1;
R1=1;

2.3 初始步:给一个初值(只需要做一次)

%初始化x(k)+
Xplus1=zeros(1,L);%plus + 的英语 minus -的英语
%我们会经常用到Xplus,Xminus,Pplus,Pminus 
%设置一个初值,假设Xplus1(1)~N(0.01,0.01^2)

Xplus1(1)=0.01;%一开始的状态
Pplus1=0.01^2; %预测方差的初值

2.2.2 更新步和预测步:其实就是算矩阵形式的卡尔曼的5条公式:

在这里插入图片描述

%X(K)minus=F*X(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值