卡尔曼滤波状态估计

 


clear all;
close all;
clc;
%% 上面是调用卡尔曼滤波
% 定义状态维数和初始条件
n = 3;                               % 状态维数
q = 0.2;                             % 过程噪声标准差
r = 0.15;                             % 测量噪声标准差
Q = q * eye(n);                    % 过程噪声协方差矩阵
R = r^2;                             % 测量噪声协方差矩阵
fstate = @(x)[x(2); x(3); 0.5*x(1)*(x(2) + x(3))];  % 状态转移方程
hmeas = @(x)x(1);                                   % 测量方程

% 初始化状态和协方差矩阵
s = [0; 0; 1];                       % 真实初始状态
x = s + q * randn(3,1);              % 加入噪声的初始状态估计
P = eye(n);                          % 初始状态协方差矩阵

% 模拟参数
N = 200;                              % 动态步数
xV = zeros(n, N);                    % 保存状态估计值
sV = zeros(n, N);                    % 保存真实状态值
zV = zeros(1, N);                    % 保存测量值

% 开始模拟
for k = 1:N
    z = hmeas(s) + r * randn;        % 模拟测量值
    sV(:, k) = s;                    % 存储真实状态值
    zV(k) = z;                       % 存储测量值

    [x, P] = ukf(fstate, x, P, hmeas, z, Q, R); % 调用UKF
    xV(:, k) = x;                    % 存储状态估计值

    s = fstate(s) + q * randn(3, 1); % 更新真实状态
end

% 绘制结果
for k = 1:3
    subplot(3, 1, k)
    plot(1:N, sV(k, :), '-', 1:N, xV(k, :), '--')
    title(['State ', num2str(k)])
    legend('True State', 'Estimated State')
end



 function X=sigmas(x,P,c)
    %Sigma points around reference point
    %Inputs:
    %       x: reference point
    %       P: covariance
    %       c: coefficient
    %Output:
    %       X: Sigma points
    
        A = c*chol(P)';
        Y = x(:,ones(1,numel(x)));
        X = [x Y+A Y-A]; 
    end
  function [y,Y,P,Y1]=ut(f,X,Wm,Wc,n,R)
    %Unscented Transformation
    %Input:
    %        f: nonlinear map
    %        X: sigma points
    %       Wm: weights for mean
    %       Wc: weights for covraiance
    %        n: numer of outputs of f
    %        R: additive covariance
    %Output:
    %        y: transformed mean
    %        Y: transformed smapling points
    %        P: transformed covariance
    %       Y1: transformed deviations
    
        L=size(X,2);
        y=zeros(n,1);
        Y=zeros(n,L);
        for k=1:L                   
            Y(:,k)=f(X(:,k));       
            y=y+Wm(k)*Y(:,k);       
        end
        Y1=Y-y(:,ones(1,L));
        P=Y1*diag(Wc)*Y1'+R;          
    end


function [x,P]=ukf(fstate,x,P,hmeas,z,Q,R)
% UKF   Unscented Kalman Filter for nonlinear dynamic systems
% [x, P] = ukf(f,x,P,h,z,Q,R) returns state estimate, x and state covariance, P 
% for nonlinear dynamic system (for simplicity, noises are assumed as additive):
%           x_k+1 = f(x_k) + w_k
%           z_k   = h(x_k) + v_k
% where w ~ N(0,Q) meaning w is gaussian noise with covariance Q
%       v ~ N(0,R) meaning v is gaussian noise with covariance R
% Inputs:   f: function handle for f(x)
%           x: "a priori" state estimate
%           P: "a priori" estimated state covariance
%           h: fanction handle for h(x)
%           z: current measurement
%           Q: process noise covariance 
%           R: measurement noise covariance
% Output:   x: "a posteriori" state estimate
%           P: "a posteriori" state covariance
%
% Example:
%{
n=3;      %number of state
q=0.1;    %std of process 
r=0.1;    %std of measurement
Q=q^2*eye(n); % covariance of process
R=r^2;        % covariance of measurement  
f=@(x)[x(2);x(3);0.05*x(1)*(x(2)+x(3))];  % nonlinear state equations
h=@(x)x(1);                               % measurement equation
s=[0;0;1];                                % initial state
x=s+q*randn(3,1); %initial state          % initial state with noise
P = eye(n);                               % initial state covraiance
N=20;                                     % total dynamic steps
xV = zeros(n,N);          %estmate        % allocate memory
sV = zeros(n,N);          %actual
zV = zeros(1,N);
for k=1:N
  z = h(s) + r*randn;                     % measurments
  sV(:,k)= s;                             % save actual state
  zV(k)  = z;                             % save measurment
  [x, P] = ukf(f,x,P,h,z,Q,R);            % ekf 
  xV(:,k) = x;                            % save estimate
  s = f(s) + q*randn(3,1);                % update process 
end
for k=1:3                                 % plot results
  subplot(3,1,k)
  plot(1:N, sV(k,:), '-', 1:N, xV(k,:), '--')
end
%}
% Reference: Julier, SJ. and Uhlmann, J.K., Unscented Filtering and
% Nonlinear Estimation, Proceedings of the IEEE, Vol. 92, No. 3,
% pp.401-422, 2004. 
%
% By Yi Cao at Cranfield University, 04/01/2008
%
    L=numel(x);                                 %numer of states
    m=numel(z);                                 %numer of measurements
    alpha=1e-3;                                 %default, tunable
    ki=0;                                       %default, tunable
    beta=2;                                     %default, tunable
    lambda=alpha^2*(L+ki)-L;                    %scaling factor
    c=L+lambda;                                 %scaling factor
    Wm=[lambda/c 0.5/c+zeros(1,2*L)];           %weights for means
    Wc=Wm;
    Wc(1)=Wc(1)+(1-alpha^2+beta);               %weights for covariance
    c=sqrt(c);
    X=sigmas(x,P,c);                            %sigma points around x
    [x1,X1,P1,X2]=ut(fstate,X,Wm,Wc,L,Q);          %unscented transformation of process
    % X1=sigmas(x1,P1,c);                         %sigma points around x1
    % X2=X1-x1(:,ones(1,size(X1,2)));             %deviation of X1
    [z1,Z1,P2,Z2]=ut(hmeas,X1,Wm,Wc,m,R);       %unscented transformation of measurments
    P12=X2*diag(Wc)*Z2';                        %transformed cross-covariance
    K=P12*inv(P2);
    x=x1+K*(z-z1);                              %state update
    P=P1-K*P12';                                %covariance update
end
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/619892.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于JAVA的微信小程序二手车交易平台(源码)

博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

Redis经典问题:数据并发竞争

大家好,我是小米!今天我们要聊的话题是在大流量系统中常见的一个问题:数据并发竞争。不管是火车票系统还是微博系统,一旦出现数据并发竞争,都可能导致用户体验下降,甚至系统崩溃。那么,我们该如何解决这个问题呢?让我们一起来深入探讨! 数据并发竞争 当我们谈论大流…

LLM - Generate With KV-Cache 图解与实践 By GPT-2

目录 一.引言 二.KV-Cache 图解 1.Attention 计算 2.Generate WithOut KV-Cache 3.Generate With KV-Cache 4.Cache Memory Usage 三.KV-Cache 实践 1.WithOut KV-Cache 2.With KV-Cache 3.Compare Efficiency 四.总结 一.引言 LLM 推理中 KV-Cache 是最常见的优化…

若依-2主1从表(解决了编辑页面的添加按钮失效问题)

1. 3个表的分析(表名里不要加“t_”,会出现问题) 主表:t_qxk 这是试卷表 主表:t_ques_xk 这是题目表 子表:t_quescxk 这是试卷和题目的关系表,即同时是试卷和题目表的子表。 因为一张试卷可…

给centos机器打个样格式化挂载磁盘(新机器)

文章目录 一、先安装lvm2二、观察磁盘三、磁盘分区四、建PV五、建VG六、创建LV七、在LV上创建文件系统八、挂载到/home(1)临时挂载(2)永久挂载 九、最后reboot一下 一、先安装lvm2 yum install lvm2二、观察磁盘 三、磁盘分区 四…

QT 项目打包(为了后期远程实验用)

一、环境准备 1、一个项目工程 二、步骤 1、将编译器设置调整为Release模式 二、对项目重新编译构建 三、可以看到工程目录这个文件夹 打开工程目录文件夹的Release文件夹,我的路径如下 四、新建一个文件夹,将上述路径文件夹下的exe文件复制到新的文…

云相册APP

简介 一款用于云存照片的app,支持批量上传和下载照片。 平台技术 Android客户端:Kotlin 协程 Retrofit Server服务后端:Java SpringBoot 部署云服务器:华为云耀云服务器L实例 下载网址 小鲸鱼相册 Ps: 由于网站域名备案审核…

SQL STRING_SPLIT函数,将指定的分隔符将字符串拆分为子字符串行

文章目录 STRING_SPLIT (Transact-SQL)1、语法2、参数3、样例样例1样例2 STRING_SPLIT (Transact-SQL) STRING_SPLIT 是一个表值函数,它根据指定的分隔符将字符串拆分为子字符串行。 1、语法 STRING_SPLIT ( string , separator [ , enable_ordinal ] ) 2、参数…

ICLR上新 | 强化学习、扩散模型、多模态语言模型,你想了解的前沿方向进展全都有

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 今天的“科研上…

AlphaFold3—转录因子预测(实操)

写在前面 我们上一次已经介绍了如何使用AlphaFold3:最新AlphaFold 3:预测所有生物分子结构、相互作用 AlphaFold3可以做什么? 1.AlphaFold服务器可以对以下生物分子类型进行建模,评价其相互结合: 蛋白质 DNA RNA 生…

计算机网络-DHCPv6基础

前面我们学习了IPv6地址可以通过手动配置、无状态自动配置、DHCPv6配置,这里简单学习下DHCPv6的知识点。 一、DHCPv6概述 DHCPv6 (Dynamic Host Configuration Protocol for IPv6) 是一种网络协议,设计用于IPv6网络环境中自动为网络设备分配必要的配置信…

java -jar提示jar中没有主清单属性(no main manifest attribute)

目录 传送门前言排查原因问题1-》jdk17和jdk8共存导致idea的maven插件识别报错问题2-》pom.xml中mainClass下面的skip属性是罪魁祸首 其他办法(修改jar包) 传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品&…

InfiniGate自研网关实现四

13.服务发现组件搭建和注册网关连接 以封装 api-gateway-core 为目的,搭建 SpringBoot Starter 组件,用于服务注册发现的相关内容处理。 这里最大的目的在于搭建起用于封装网关算力服务的 api-gateway-core 系统,提供网关服务注册发现能力。…

Mysql 多表查询,内外连接

内连接: 隐式内连接 使用sql语句直接进行多表查询 select 字段列表 from 表1 , 表2 where 条件 … ; 显式内连接 将‘,’改为 inner join 连接两个表的 on select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 … ; select emp.id, emp.name, …

宝塔安装多个版本的PHP,如何设置默认的PHP版本

如何将默认的PHP版本设置为7.3.32, 创建软链接指向7.3版本,关键命令:ln -sf /www/server/php/73/bin/php /usr/bin/php 然后再查看PHP版本验证一下结果 [rootlocalhost ~]# ln -sf /www/server/php/73/bin/php /usr/bin/php [rootlocalho…

Mysql进阶-sql优化篇

sql优化 sql优化insert优化批量插入手动提交事务主键顺序插入大批量插入数据 主键优化数据组织方式页分裂页合并主键设计原则 order by 优化原则 group by优化limit优化count 优化count的几种用法 update优化 sql优化 insert优化 批量插入 Insert into tb_test values(1,Tom…

一文读懂设计模式-单例模式

单例模式(Singleton Pattern)提供了一种创建对象的最佳方式 单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,这个类提供了一种访问其唯一的对象的方式,可以直接访问&…

IPD推行成功的核心要素(四)IPD究竟分几期做更合适?

集成产品开发 IPD体系(Integrated Product Developm e nt)是产品创新型企业关于产品开发(从概念到产品开发、发布直至退市的全过程)的一种理念与方法。IPD体系强调以市场需求作为产品开发的驱动力,将产品开发作为一项投…

快手短剧,和爱优腾踏入同一条河流

文丨黄小艺 “我们定制短剧的重心排序分别是抖音、淘宝、快手。”MCN机构从业者周明(化名)说道,“无论是单条还是品牌冠名剧,我们在快手短剧拿到的收益都相对偏低。” 近期,商业数据派和多家机构创作者沟通后发现&am…

Windows系统安装MongoDB数据库

MongoDB是一个基于分布式文件存储的NoSQL数据库,由C语言编写的。MongoDB的数据存储基本单元是文档,它是由多个键值对有序组合的数据单元,类似于关系数据库中的数据记录。适合存储JSON形式的数据,数据格式自由,不固定。…