【卡尔曼】卡尔曼滤波学习笔记-Matlab模拟温度例子

KF是根据上一状态的估计值和当前状态的观测值推出当前状态的估计值的滤波方法



温度模拟参数选取

xk系统状态实际温度
A系统矩阵温度不变,为1
B、uk状态的控制量无控制量,为0
Zk观测值温度计读数
H观测矩阵直接读出,为1
wk过程噪声温度变化偏差,常量1e-1
vk测量噪声读数误差,常量1e-6
Matlab模拟

[cpp]  view plain copy
  1. clear   
  2.   N=200;   
  3.   %w(1)=0;   
  4.   %w=randn(1,N);   
  5.   w=0;                  %系统控制矩阵  
  6.   x(1)=0;   
  7.   a=1;                  %温度模拟A为1   
  8.   V=randn(1,N);   
  9.   q1=std(V);   
  10.   %Rvv=q1.^2;   
  11.   Rvv=0.1;              %测量过程协方差 温度模拟R为1e-1  
  12.   q2=std(x);   
  13.   Rxx=q2.^2;   
  14.   q3=std(w);   
  15.   %Rww=q3.^2;   
  16.   Rww = 0.000001;       %温度模拟Q为1e-6   
  17.   %c=0.6;   
  18.   c=1;                  %温度模拟H为1  
  19.   for k=1:N;  
  20.   Y(k)=25+sqrt(0.1)*randn(1);  %温度模拟平均温度为25度 方差(协方差)为0.1的温度输入 测量方程,其中V为测量系统的噪声,c为测量系统的参数   
  21.   end  
  22.   p(1)=10;              %协方差 初始值  
  23.   s(1)=1;               %最优估计 初始值  
  24.   for t=2:N;   
  25.   s(t)=a*s(t-1)+w;                 %先验估计 求当前时刻的估计值    
  26.   p1(t)=a.^2*p(t-1)+Rww;           %协方差估计 求当前时刻的估计值的偏差,a为系统参数,没有控制量,所以没有参数b,Rww为噪声   
  27.   b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   %求Kg,b(t)为Kg,即Kalman增量   
  28.   s(t)=a*s(t)+b(t)*(Y(t)-a*c*s(t));%后验估计 求t时刻的最优值,即当前时刻的最优值   
  29.   p(t)=p1(t)-c*b(t)*p1(t);         %后验协方差 求当前最状态最优值的偏差,即式子5:(1-c*b(t))*p1(t)   
  30.   end  
  31.   
  32.   figure(1);  
  33.   plot(Y,'g--');hold on;  
  34.   plot(s,'r--');hold on;  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现基于滤波的GNSS-SPP轨迹去噪,可以按照以下步骤: 1. 读取GNSS-SPP数据。可以使用MATLAB中的`load`函数或者`readtable`函数读取数据,具体使用哪个函数取决于数据的格式。 2. 对GNSS-SPP数据进行预处理。预处理包括数据清洗、数据插值等操作。可以使用MATLAB中的`fillmissing`函数对缺失数据进行插值处理。 3. 实现滤波算法。滤波算法的实现可以分为两个步骤:预测和更新。预测步骤用于预测下一个时刻的状态,更新步骤用于根据观测值对状态进行修正。其中,预测步骤对应的是滤波算法中的状态预测方程,更新步骤对应的是滤波算法中的状态更新方程。实现滤波算法可以使用MATLAB中的`kalman`函数。 4. 对去噪后的数据进行后续处理。去噪后的数据可以用于轨迹分析、可视化等操作。 下面是一个简单的基于滤波的GNSS-SPP轨迹去噪的MATLAB代码示例: ```matlab % 读取GNSS-SPP数据 load('gnss_spp_data.mat'); % 对GNSS-SPP数据进行预处理 gnss_spp_data = fillmissing(gnss_spp_data, 'linear'); % 实现滤波算法 A = [1 1; 0 1]; % 状态转移矩阵 Q = [0.1 0; 0 0.1]; % 过程噪声协方差矩阵 H = [1 0; 0 1]; % 观测矩阵 R = [1 0; 0 1]; % 测量噪声协方差矩阵 x = [0; 0]; % 初始状态 P = [1 0; 0 1]; % 初始状态协方差矩阵 for i = 1:length(gnss_spp_data) % 预测步骤 x = A * x; P = A * P * A' + Q; % 更新步骤 y = [gnss_spp_data(i, 1); gnss_spp_data(i, 2)] - H * x; S = H * P * H' + R; K = P * H' * inv(S); x = x + K * y; P = (eye(2) - K * H) * P; gnss_spp_data(i, 1) = x(1); gnss_spp_data(i, 2) = x(2); end % 可以对去噪后的数据进行进一步处理,如轨迹分析、可视化等操作 ``` 注意:上述代码仅是一个简单的示例,实际应用中需要根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值