一维卡尔曼滤波器的Matlab仿真

卡尔曼滤波器的推导过程实在是太虐心了,花点时间和心思推推还是能推出来的。卡尔曼滤波器总结下来就是五大核心公式,这五个公式具体包括以下内容:

1. 计算预测值; 

2. 计算预测值和真实值之间误差的协方差矩阵; 

3. 计算卡尔曼增益; 

4. 根据预测值和测量值,计算估计值(滤波值); 

5. 计算估计值和真实值之间误差的协方差矩阵。


一维卡尔曼滤波器的Matlab程序如下:

close all;
clear all;
%系统方程:X(k+1)=A*X(k)+w(k) 
%观测方程:Z(k)=H*X(k)+v(k) 
A=1;
H=1;
X(1)=25;                  %系统状态初始化

w=1*randn(100,1);         %系统噪声
v=0.1*randn(100,1);       %测量噪声
Q=cov(w);
R=cov(v);

Xe(1)=25;                      %状态估计初值             
Pe(1)=0;                       %估计值与真实值之间的协方差矩阵初值

for i=2:100
    X(i)=A*X(i-1)+w(i);             %系统方程
    Z(i)=H*X(i)+v(i);               %观测方程
    
    %卡尔曼滤波五大核心方程
    Xp(i)=A*Xe(i-1);                %根据估计值计算预测值
    Pp(i)=A*Pe(i-1)*A'+Q;           %计算预测值与真实值之间误差的协方差矩阵
    K(i)=Pp(i)*H'/((H*Pp(i)*H'+R)); %计算卡尔曼增益
    Xe(i)=Xp(i)+K(i)*(Z(i)-H*Xp(i));%计算估计值
    Pe(i)=Pp(i)-K(i)*H*Pp(i);       %计算估计值与真实值之间误差的协方差矩阵
end 

n=1:100;
subplot(211)
plot(n,Xp,'r','linewidth',2);         %绘制预测值
hold on;
plot(n,Z,'b','linewidth',2);          %绘制测量值
hold on;
plot(n,Xe,'g','linewidth',2);         %绘制估计值
hold on;
plot(n,X-Xe,'k','linewidth',2);       %绘制误差
legend('预测值','观测值','滤波值','误差')
grid

subplot(212)
plot(n,K,'b','linewidth',2); %绘制卡尔曼增益
legend('卡尔曼增益')
grid

仿真结果如下图所示,不难发现,由于测量噪声相比于系统噪声小的多,所以估计值更倾向于观测值,此时的卡尔曼增益趋近于1。

如果将前述代码中的系统噪声和测量噪声改为如下形式:

w=0.1*randn(100,1);     %系统噪声
v=1*randn(100,1);       %测量噪声

这时的仿真结果如下图,由于此时的测量噪声相比于系统噪声要大的多,因而估计值更倾向于预测值,此时的卡尔曼增益不再趋近于1。


  • 10
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,我无法提供具体的Matlab代码。但是,你可以在引用\[1\]中提供的链接中找到一个包含完整的Excel代码的卡尔曼滤波器二维实例。这个实例可以帮助你更好地理解和实现卡尔曼滤波器。此外,引用\[2\]中的视频也提供了关于递归算法的卡尔曼滤波器的介绍,可能对你有所帮助。对于非线性系统滤波问题,你可以考虑使用扩展卡尔曼滤波(EKF)方法,它是一种常用的处理非线性系统滤波问题的方法。EKF的核心思想是将非线性函数进行线性化,并应用卡尔曼滤波完成对目标的滤波估计等处理。\[3\] #### 引用[.reference_title] - *1* [卡尔曼滤波实例 附matlab代码](https://blog.csdn.net/liujiwen1104/article/details/120666223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MATLAB实现卡尔曼滤波器仿真](https://blog.csdn.net/Master_0_/article/details/127813189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [卡尔曼滤波应用及其matlab实现](https://blog.csdn.net/zhangquan2015/article/details/79264540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值