卡尔曼滤波状态估计

 


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:Nz = hmeas(s) + r * randn;        % 模拟测量值sV(:, k) = s;                    % 存储真实状态值zV(k) = z;                       % 存储测量值[x, P] = ukf(fstate, x, P, hmeas, z, Q, R); % 调用UKFxV(:, k) = x;                    % 存储状态估计值s = fstate(s) + q * randn(3, 1); % 更新真实状态
end% 绘制结果
for k = 1:3subplot(3, 1, k)plot(1:N, sV(k, :), '-', 1:N, xV(k, :), '--')title(['State ', num2str(k)])legend('True State', 'Estimated State')
endfunction X=sigmas(x,P,c)%Sigma points around reference point%Inputs:%       x: reference point%       P: covariance%       c: coefficient%Output:%       X: Sigma pointsA = c*chol(P)';Y = x(:,ones(1,numel(x)));X = [x Y+A Y-A]; endfunction [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 deviationsL=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);       endY1=Y-y(:,ones(1,L));P=Y1*diag(Wc)*Y1'+R;          endfunction [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:Nz = h(s) + r*randn;                     % measurmentssV(:,k)= s;                             % save actual statezV(k)  = z;                             % save measurment[x, P] = ukf(f,x,P,h,z,Q,R);            % ekf xV(:,k) = x;                            % save estimates = f(s) + q*randn(3,1);                % update process 
end
for k=1:3                                 % plot resultssubplot(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 statesm=numel(z);                                 %numer of measurementsalpha=1e-3;                                 %default, tunableki=0;                                       %default, tunablebeta=2;                                     %default, tunablelambda=alpha^2*(L+ki)-L;                    %scaling factorc=L+lambda;                                 %scaling factorWm=[lambda/c 0.5/c+zeros(1,2*L)];           %weights for meansWc=Wm;Wc(1)=Wc(1)+(1-alpha^2+beta);               %weights for covariancec=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 measurmentsP12=X2*diag(Wc)*Z2';                        %transformed cross-covarianceK=P12*inv(P2);x=x1+K*(z-z1);                              %state updateP=P1-K*P12';                                %covariance update
end

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle如何收缩减小表空间大小

比如我们发现一个表空间占用比较大,但是空闲空间很大,想要减小表空间占用大小。查看表空间的情况 发现BETEST表空间占用大,但是剩余大小比较大,可以减小存储占用。 如果我们想减小到100MB,那么就登录其用户执行&#…

UDP怎么端口映射?

在网络通信中,TCP和UDP是两种常用的传输协议。UDP(User Datagram Protocol)是一种无连接的传输协议,相较于TCP协议来说,它更为轻量级且不可靠。UDP协议在某些场景下仍然有其独特的优势,尤其是在需要快速传输…

[每周一更]-(第96期):Rsync 用法教程:高效同步文件与目录

文章目录 一、引言二、rsync 基本概念三、介绍rsync 是什么?四、安装五、rsync 基本语法常见示例(默认ssh协议): 六、常用选项1. -a 或 --archive2. -v 或 --verbose3. -z 或 --compress4. --delete5. --exclude6. --exclude-from…

hadoop yarm你知道吗?

一、概念 Hadoop YARN(Yet Another Resource Negotiator)是Hadoop 2.x版本中的一个重要组件,用于资源管理和作业调度。它是Hadoop的第二代资源管理器,取代了Hadoop 1.x版本中的MapReduce作业调度器。 通俗地理解它的作用有点像一…

如何通过外网访问内网服务器?

随着网络的普及和各行各业对互联网的应用需求增加,通过外网访问内网服务器的需求也越来越多。在传统的网络环境下,要实现外网访问内网服务器需要进行繁琐的端口映射设置,而且还会受到网络环境限制和数据安全问题的困扰。现在有了一种名为【天…

Springboot整合 Spring Cloud Alibaba Sentinel

1.Sentinel介绍 官方文档地址: https://sentinelguard.io/zh-cn/docs/introduction.html https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入…

定制聚四氟乙烯大圆桶50L

PTFE聚四氟乙烯圆桶是高性能化学实验器皿,适用于强酸强碱环境。具有化学稳定性、耐高温、良好密封、易清洗、环保安全等特点。 常规四氟桶-超大规格四氟桶均可定制,一体成型,保证密封,可长期保存高纯试剂。 产品特性 1.超纯实验…

Elastic 基于 RAG 的 AI 助手:利用 LLM 和私有 GitHub 问题分析应用程序问题

作者:来自 Elastic Bahubali Shetti 作为 SRE,分析应用程序比以往更加复杂。 你不仅必须确保应用程序以最佳状态运行以确保良好的客户体验,而且还必须了解某些情况下的内部工作原理以帮助排除故障。 分析基于生产的服务中的问题是一项团队运动…

回炉重造java----多线程

概念 注: main方法其实也是一个线程。在java中所以的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源。在java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集(gc )线…

【Ubuntu】apt命令安装最新版本Nginx

目录 环境前言添加Nginx仓库步骤1、仓库公钥2、文本公钥转二进制GPG公钥(可选)3、添加apt软件源4、安装新版Nginx 参阅 环境 Ubuntu 22.04 前言 ubuntu官方apt软件仓库(或者叫软件源)的软件版本可能会比较旧,导致无…

AI算法-高数5-线性代数1-基本概念、向量

线性代数:主要研究1、张量>CV计算机视觉 2、研究张量的线性关系。 深度学习的表现之所以能够超过传统的机器学习算法离不开神经网络,然而神经网络最基本的数据结构就是向量和矩阵,神经网络的输入是向量,然后通过每个矩阵对向量…

使用 Flask Blueprint 实现模块化 Web 应用

文章目录 1. 什么是 Flask Blueprint?2. 为什么要使用 Flask Blueprint?3. 如何使用 Flask Blueprint?4. 在 Blueprint 之间进行通信5. 结合 Flask 插件系统进行功能拓展结语 当构建大型 Flask Web 应用时,保持代码的组织结构清晰…

遨游 JavaScript 对象星际:探索面向对象编程的深邃世界

个人主页:学习前端的小z 个人专栏:JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 💯面向对象编程🔗1 什么是对象🔗2 什么是…

免费SSL证书申请安装通用指南

JoySSL官网 注册码230918 关于SSL证书的申请与安装,以下是一个概括性的技术性指南,适合那些希望详细了解该过程的技术人员或网站管理员。请注意,具体步骤可能会根据证书颁发机构(CA)和服务提供商的不同而有所变化。 一、选择SSL证书类型与颁…

Postman工具介绍与安装

一、Postman介绍 Postman 乃是一款对 HTTP 协议予以支持的接口调试及测试工具,其突出特性在于功能强大,并且使用简便、易用性良好。不管是开发人员开展接口调试工作,还是测试人员进行接口测试任务,Postman 均属于首选工具之一。 接…

使用Python递归重命名文件和文件夹

使用 Python 递归重命名文件和文件夹可以通过 os 模块和 os.path 模块来完成。下面是一个示例代码,演示如何递归地重命名文件和文件夹: 1、问题背景 在研究大型数字档案时,需要将这些档案复制到本地存储进行保存。这些档案通常存储在 USB 驱…

吴恩达机器学习笔记:第 10 周-17大规模机器学习(Large Scale Machine Learning)17.3-17.4

目录 第 10 周 17、 大规模机器学习(Large Scale Machine Learning)17.3 小批量梯度下降17.4 随机梯度下降收敛 第 10 周 17、 大规模机器学习(Large Scale Machine Learning) 17.3 小批量梯度下降 小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法&am…

SpringBoot自动配置源码解析+自定义Spring Boot Starter

SpringBootApplication Spring Boot应用标注 SpringBootApplication 注解的类说明该类是Spring Boot 的主配置类,需要运行该类的main方法进行启动 Spring Boot 应用 SpringBootConfiguration 该注解标注表示标注的类是个配置类 EnableAutoConfiguration 直译&#…

沃尔玛自养号测评的优势是什么?有哪些技术要求

沃尔玛自养号测评的优势主要体现在以下几个方面: 1. 可控性强:自养号测评允许卖家完全掌控测评流程,包括账号的创建、管理、使用等,可以根据需要随时调整指定测评周期,确保测评效果最大化。 2. 安全性高:…

ae如何导出mp4格式?图文教程,手把手教您搞定

在创作精彩的视频内容后,将其成功导出为通用的MP4格式是确保作品在不同平台上流畅播放的重要一环。Adobe After Effects作为一款专业的视频后期制作工具,提供了丰富的功能来实现这一目标。在本文中,我们将通过图文教程,手把手地向…