粒子滤波方法入门

2023-05-16

例子滤波方法入门:分析典型非线性系统数学模型
     主要内容:
     1、非线性数学模型
     2、用粒子滤波的MATLAB程序简介
     
     1、非线性数学模型
          
      2、用粒子滤波的MATLAB程序简介

function [ output_args] = Untitled( input_args )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 模型:在一维空间,用非线性状态方程和观测方程,用例子滤波方法进行数模分析
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 清零
close all;
clear all;
clc;

%% 第1段:噪声变化与噪声模拟
tf = 100;       %时间模拟长度
w = rand(1,tf); %rand函数产生由在(0, 1)之间均匀分布的随机数组成的数组,本文为一个1行100列的数组
Q = var(w);     %求方差公式。
W = sqrt(Q)*w;  %过程噪声,标准差乘以随机数。

vnoise = randn(1,tf);%randn:产生均值为0,方差σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数
R = var(vnoise);     %求方差
V = sqrt(R)*vnoise;  %观测噪声

%% 第2段:状态方程于观测方程、滤波估计机器初始值设定
x = 0.1;        %真实状态初始值
x_estimate = 1; %真实状态初始值的估计值
p_x_estimate = x_estimate;%PF的初始估计值(没有粒子滤波之前的初始估计值,当例子滤波开始后,就会逐步与真实状态值靠近)
pf_P = 5;       %PF误差方差初始值
x_array = [x];  %真实值数组(真实值观测不到的,但是是实际的状态)
p_x_estimate_array = [p_x_estimate];%PF最优估计值数组,把初始估计值加进来作为第一个。
N = 500;        %粒子滤波的粒子数

%% 第3段:非线性数字模拟系统,计算得到PK估计值
% 第一步:初始化状态,利用状态初始值x_estimate = 1,用大量例子模拟X(t),粒子在空间均匀分布;生成例子滤波初始N个例子

for i = 1:N         %N = 500
    p_xpart(i) = p_x_estimate + sqrt(pf_P)*rand;    %最好均匀分布randn
end

for k = 1:tf    %在100个时间步长里计算
    %模拟非线性系统
    x = 0.5 * x + (25 * x / (1 + x^2)) + 8 * cos(1.2*(k-1)) + W(k);%状态值(实际值).其中是W是个1*100的数组。W(k)是第k个。
    y = (x^2/20) + V(k); %观测值(实际值的观测值)
    % 第二步:预测阶段,根据状态转移方程,每一个粒子得到一个预测粒子
    for i = 1 : N        %N = 500,粒子也要代入状态方程。这一步就是实际值和粒子根据状态方程得出的结果之差,来衡量每个粒子的重要程度。
        p_xpartminus(i) = 0.5 * p_xpart(i) + (25 * p_xpart(i)) / (1 + p_xpart(i)^2) + 8 * cos(1.2*(k-1)) + W(k); 
        %第三步:校正阶段,将生成的粒子带入含噪的状态方程,对预测粒子进行评价,越接近于真实状态的粒子,其权重越大;
        p_ypart = p_xpartminus(i)^2 / 20; %利用观测方程计算观测预测值,在此计算时,一般不加观测方程里的误差。
        p_vhat = y - p_ypart;             %含噪观测值和粒子观测预测值的差
        p_q(i) = (1 / sqrt(R) / sqrt(2*pi)) * exp(-p_vhat^2 / 2 / R); %根据差值给出100个粒子对应的权重,差越小权重越大
    end
    % 平均每一个估计的可能性
    p_qsum = sum(p_q);
    for i = 1:N
        p_q(i) = p_q(i) / p_qsum; %各个粒子进行权值归一化
    end
    
    % 第四步:重采样,根据粒子权重对例子进行筛选,筛选过程中,既要大量保留权重大的粒子,又要有一小部分权重小的粒子
    for i=1:N %在这里,依次赋值给p_xpart(1)、p_xpart(2)。。。
        p_u = rand; %均匀分布
        p_qtempsum = 0;
    	for j = 1:N %先产生一个均匀分布的随机数,比如0.5,然后让p_q(j)累计相加,当p_qtempsum >= p_u的那一瞬间,其对应的值赋给p_xpart(1).
            p_qtempsum = p_qtempsum + p_q(j);
        	if p_qtempsum >= p_u
                p_xpart(i) = p_xpartminus(j);%在这里 p_xpart(i)实现循环赋值,上边比较的是权值累加,这里赋值的是粒子值。
                break;
            end
        end
    end
    %第五步:滤波,将重采样后的粒子带入状态转移方程得到新的预测粒子,即步骤2,
    p_x_estimate = mean(p_xpart);%求重采样后的粒子值的平均值,就是最终的预测值。且粒子值p_xpart会代入状态方程进入下一个循环。
    
    %进行画图程序
    x_array = [x_array,x];%真实值数组
    p_x_estimate_array = [p_x_estimate_array,p_x_estimate];%预测值数组。
    p_error(k,:) = abs(x_array(k) - p_x_estimate_array(k));%误差数组。
    
end

%% 第4段:粒子滤波绘图
t = 0:tf;
figure(1);
plot(t, x_array, '-r', t, p_x_estimate_array, 'g-o');
xlabel('时间步长');
ylabel('状态');
legend('含噪状态值','PF估计值');
title('含噪状态信号和粒子滤波估计信号');

figure(2);
plot(t, x_array, '-r', t, p_x_estimate_array, 'g-o', t, p_x_estimate_array-1.96*sqrt(pf_P), 'b:', t, p_x_estimate_array+1.96*sqrt(pf_P), 'b')
xlabel('时间步长');
ylabel('状态');
legend('含噪状态值','PF估计值','95%置信区间');
title('含噪状态信号和粒子滤波估计信号及其置信区间');

%% 第5段:误差分析及其绘图
p_xrms = sqrt((norm(x_array - p_x_estimate_array)^2)/tf);
disp(['PF估计误差均方值=', num2str(p_xrms)]);
t = 1:tf;
figure(3);
plot(t,p_error);
xlabel('时间步长');
ylabel('状态');
grid
title('粒子滤波估信号与状态真实信号误差')

end


        3、图示结果
    
      
     
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

粒子滤波方法入门 的相关文章

  • Kinect For Windows SDK 2.0的解读之《KinectV2开发手册》

    转载自 自己的博客 xff0c 由于百度迟迟没有收录 xff0c 在这里转发 Kinect For Windows SDK 2 0的解读之一 开发手册 这二天在外面出差 xff0c 回来才发现26号早晨微软已经通知我可以下载最新的SDK了
  • 使用QZXing识别图片二维码

    欢迎访问http brightguo com 试了下QZXing这个识别二维码库 xff0c 下载地址 xff1a 百度网盘 CSDN下载链接 本站下载连接 在github上下载qzxing xff08 https github com z
  • Ubuntu 16.04中用bazel交叉编译tensorflow lite

    首先在csdn上着了大神关于这个的实践如下链接 https www cnblogs com jojodru p 7744630 html 但是报错如下 xff0c 说是找不到opt选项 INFO Reading rc options for
  • 【原创】岁月如歌 一款网易歌单生成pdf的软件

    介绍 这是一款可以将网易云音乐的歌单中所有歌词输出为pdf的软件 项目持续维护地址 http brightguo com song list to pdf 目前没有搜到相关网易歌单导出为pdf的软件 xff0c 因此我特地将此软件开发出来免
  • 国内人脸识别公司哪家强,人脸比对跑个分比较下!

    前不久 最强大脑 第四季第一期的舞台上 xff0c 王峰对阵小度机器人进行了 人机大战 xff0c 其中最精彩和有趣的是第一场pk 从小时候照片判别长大后对应的人 xff0c 而她有个姐姐 xff0c 这对姐妹恰恰是双胞胎 xff01 百度
  • 2011年终总结

    2011年终总结 4月8日 xff0c 研究生面试 xff0c 和同学第一次来到上海 xff0c 当时的我又经受一次失败 xff0c 也许说我本该走这条路 也经常听到很多人说 xff0c 自己考得烂了 xff0c 最后到这个学校上学 从高中
  • 永久音乐外链

    使用skydrive上传速度变慢了 xff01 2013 2 14 文摘 xff1a http tieba baidu com p 1735575571 被删掉了 xff0c 2013 2 14 一直在申请吧主 xff0c 估计申请不上了
  • Apache2.2+MySql5.5+PHP5.4的安装和配置(windows)

    Apache2 2 43 MySql5 5 43 PHP5 4的安装和配置 phpMyAdmin的安装和配置 安装 Apache2 2 http httpd apache org download cgi apache24 Win32 Bi
  • 反思了一下过去几年的程序员之路

    最近回忆起一年前的找工作时的面试时的题目 xff0c 很多基础题都没做好 xff0c 很多概念也混淆不清 虽然自己这几年写的代码不少 xff0c 但都使用自己熟悉的东西写 xff0c 而已经有很多新的技术新的方法却没有使用过 一方面公司自己
  • 怎样使用OpenCV进行人脸识别 [停止更新]

    唯一持续维护地址 xff1a http guoming me face recognition with opencv 更新 2013 6 27 停止人脸识别的研究 xff0c 具体人脸识别系统可以参见文章 使用Kinect进行人脸识别 K
  • OpenCV矩阵运算

    一 矩阵 Mat I img I1 I2 dst A B double k alpha Scalar s 1 加法 I 61 I1 43 I2 等同add I1 I2 I add I1 I2 dst mask dtype scaleAdd
  • OpenCV官方学习文档[2013-7-4更新][最新版本2.4.6]

    最新的OpenCV2 4 6文档更新参见 xff1a http guoming me opencv OpenCV配置视频 OpenCV2 4 6 2013 7 3更新 http opencv org opencv 2 4 6 is out
  • ANSI与UNICODE字符函数对照表

    宽字符处理函数函数与普通函数对照表 字符分类 xff1a 宽字符函数普通 C 函数描述 iswalnum xff08 xff09 isalnum xff08 xff09 测试字符是否为数字或字母 iswalpha xff08 xff09 i
  • 做 LeetCode 有感

    今天周六 xff0c 公司一个人也没有 xff0c 下午花了5个半小时 xff0c 安安静静的再看 xff0c 再做了4道 LeetCode 的题目 看完之后 xff0c 现在仔细回想 xff0c 获得了什么 xff0c 好像什么也没有 但
  • 知识点滴 - 关于头文件的重复包含问题

    使用Include guard的目的 C Language Tutorial 61 gt Header Include Guards 2 12 Header guards Learn C 43 43 C C 43 43 中 xff0c in
  • 编程参考 - 编程中给变量起名时如何选择前缀,以及匈牙利命名法等

    我最开始当程序员用C语言写代码 xff0c 公司里推行编码规范 xff0c 变量的前缀都是有规定的 比如整型变量 xff0c 前面都是 u8Name i8Name u16Name i16Name之类的 尤其是嵌入式编程 xff0c 涉及到代
  • 【数据结构与算法 9】谁发明的八皇后,本宫赐你一丈红

    一 八皇后问题 八皇后问题 xff0c 一个古老而著名的问题 xff0c 是回溯算法的经典案例 该问题由国际西洋棋棋手马克斯 贝瑟尔于1848年提出 xff1a 在8 8格的国际象棋上摆放八个皇后 xff0c 使其不能互相攻击 xff0c
  • Linux常用命令

    nbsp nbsp 作者简介 哪吒 CSDN2022博客之星Top1 CSDN2021博客之星Top2 多届新星计划导师 博客专家 专注Java硬核干货分享 立志做到Java赛道全网Top N 本文收录于 Java基础教程系列 目前已经70
  • 读《Java编程思想第五版》心得体会

    x1f345 Java学习路线 xff1a 搬砖工逆袭Java架构师 x1f345 简介 xff1a Java领域优质创作者 x1f3c6 CSDN哪吒公众号作者 Java架构师奋斗者 x1f4aa x1f345 扫描主页左侧二维码 xff
  • 那些优秀的程序员都在看哪些书?

    目录 一 Java 27岁生日啦1995年5月23日2004年2015年2019年2022年 二 Java核心技术 卷1 基础知识 原书第11版 xff09 Core Java 三 Java核心技术 卷2 高级特性 原书第11版 xff09

随机推荐

  • c++ 判断文件是否存在的几种方法

    一般方法 一般而言 xff0c 下述方法都可以检查文件是否存在 xff1a 使用ifstream打开文件流 xff0c 成功则存在 xff0c 失败则不存在以fopen读方式打开文件 xff0c 成功则存在 xff0c 否则不存在使用acc
  • Linux下c/c++头文件和库文件的查找路径

    简介 这是个相当基础的话题 xff0c 平时也觉得知道一点 如头文件会先在当前目录查找 xff0c 如果未找到会查找系统目录 但当问题出现时 xff0c 还是有点不知所措 xff0c 对所谓的 系统目录 一知半解 xff0c 很难把它们的清
  • Tars框架在windows10下安装

    依赖环境 windows版本 xff1a win7以上cmake xff1a 3 2以上mysql 4 1 17以上nvm xff1a 0 35 1以上node 12 13 0以上 分别安装vs2019 xff0c nodejs git m
  • ROS基础(一):ROS通讯之话题(topic)通讯

    目录 第一章 xff1a ROS通讯之话题 topic 通讯一 topic通讯之基础篇1 Node Master大管家2 Node节点3 message 与topic4 小结5 实例 二 topic通讯之进阶篇1 创建learn topic
  • 解决已安装numpy仍然报错ModuleNotFoundError: No module named ‘numpy‘

    简介 目前 xff0c 大多数Linux系统自带python2了 但是很多应用却需要python3 于是安装了python3 每次执行的时候 xff0c 输入python时默认启动python2 xff0c 输入python3才会启动pyt
  • opencv ImportError: libGL.so.1: cannot open shared object file: No such file or directory

    ModuleNotFoundError No module named cv2 使用opencv测试时 xff0c 发现没有安装 xff0c 报错如下 xff1a 安装一下吧 xff1a pip install opencv python
  • CMake中执行shell命令之execute_process、add_custom_target和add_custom_command

    背景 以下情况可能需要在CMake中执行shell脚本 xff1a cmake未提供的功能而实际构建中又需要时 xff0c 如获取Linux发行版本项目构建时需要执行脚本才能完成 xff0c 如boost构建过程 有的需要shell脚本的返
  • rsync增量同步文件用法实践

    rsync rsync remote sync xff0c 远程同步 xff0c 用于在本地机器及远程机器之间同步数据 对于本地机器之内 xff0c 同步数据使用cp即可 对于本地与远程 xff0c 使用scp即可 但上面两个命令同步数据时
  • 关于职业生涯发展的一点思考

    职业类型 从学校毕业步入社会 xff0c 即正式开始了人生职业生涯发展的第一步 总括地说 xff0c 大概有以下几类职业 xff1a 当公务员 xff0c 从政创立公司 xff0c 当企业家找一份工作 xff0c 成为职员 这三条道路 xf
  • c++矩阵计算性能对比:Eigen和GPU

    生成随机矩阵 生成随机矩阵有多种方式 xff0c 直接了当的方式是使用显式循环的方式为矩阵的每个元素赋随机值 span class token macro property span class token directive hash s
  • c语言中 char* 和 unsigned char* 的区别浅析

    背景 最近在项目中遇到了一个编译警告 xff0c 是因为定义的变量为char xff0c 而在使用时作为函数的unsigned char 类型的参数调用 这个警告很容易避免 xff0c 但是char 和unsigned char 到底有什么
  • c语言中static关键字用法详解

    概述 static关键字在c语言中比较常用 xff0c 使用恰当能够大大提高程序的模块化特性 xff0c 有利于扩展和维护 但是对于c语言初学者 xff0c static由于使用灵活 xff0c 并不容易掌握 本文就static在c语言中的
  • linux下把进程/线程绑定到特定cpu核上运行

    概述 现在大家使用的基本上都是多核cpu xff0c 一般是4核的 平时应用程序在运行时都是由操作系统管理的 操作系统对应用进程进行调度 xff0c 使其在不同的核上轮番运行 对于普通的应用 xff0c 操作系统的默认调度机制是没有问题的
  • git中submodule子模块的添加、使用和删除

    背景 项目中经常使用别人维护的模块 xff0c 在git中使用子模块的功能能够大大提高开发效率 使用子模块后 xff0c 不必负责子模块的维护 xff0c 只需要在必要的时候同步更新子模块即可 本文主要讲解子模块相关的基础命令 xff0c
  • ros下package中CMakelists的编写

    目录 一 package自动生成的Cmakelists1 指定cmake版本2 项目名字3 寻找构建所需依赖包4 启用python模块依赖5 Message Service Action 生成文件6 启动 message services
  • STM32跳至硬件错误中断(HardFault_Handle) 原因及参考解决方法

    一 HardFault Handle引起的原因 1 遇到错误问题是数据类型不对 xff0c 导致该步骤永远不能执行到 xff0c 跳至硬件错误中断 xff1b 所以硬件中断可尝试查找数据类型错误 2 堆栈设置错误也会跳至hardwarefa
  • 时间与日期插件 -- laydate 使用方法(摘自官网)

    简单例子 xff1a function var start 61 elem 39 start 39 选择ID为START的input format 39 YYYY MM DD hh mm ss 39 自动生成的时间格式 min laydat
  • nginx部署vue项目(包括一个nginx部署多个vue项目)

    部署准备 vue项目打包 首先打开public下的index目录 xff0c 修改后台的URL地址 xff0c 如下图所示 xff1a 使用CMD xff0c 打开命令行程序 进入项目根目录 执行命令 xff1a npm run build
  • 雅可比(Jacobian)矩阵

    在向量分析中 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵 其行列式称为雅可比行列式 还有 在代数几何中 代数曲线的雅可比量表示雅可比簇 xff1a 伴随该曲线的一个代数群 曲线可以嵌入其中 它们全部都以数学家卡尔 雅可比 Carl Jac
  • 粒子滤波方法入门

    例子滤波方法入门 xff1a 分析典型非线性系统数学模型 主要内容 xff1a 1 非线性数学模型 2 用粒子滤波的MATLAB程序简介 1 非线性数学模型 2 用粒子滤波的MATLAB程序简介 function output args 6