matlab粒子滤波的代码(三维)

在这里插入图片描述

文章目录

  • 程序设计
    • 1. 介绍
    • 2. 系统模型
    • 3. 算法步骤
  • 源代码
  • 运行结果

程序设计

1. 介绍

粒子滤波是一种用于动态系统状态估计的先进方法,广泛应用于机器人定位、目标跟踪和金融预测等领域。该算法通过一组粒子及其权重来表示系统状态的概率分布,能够有效处理非线性和非高斯的系统。在每个时间步中,粒子滤波首先随机初始化粒子的位置和权重,然后根据系统的状态方程对粒子进行预测,接着计算每个粒子与实际观测值的匹配程度以更新权重。为了避免粒子退化,算法执行重采样步骤,根据权重选择新的粒子集合,最后通过加权平均得到当前时刻的状态估计。通过图形化展示真实状态、观测值和估计结果,粒子滤波能够在含噪声的环境中提供精准的状态估计,展现其在复杂动态环境中的优秀性能。

2. 系统模型

2.1 状态方程

系统的状态可以通过以下非线性方程进行描述:

X k = f ( X k − 1 ) + w k X_k=f\left(X_{k-1}\right)+w_k Xk=f(Xk1)+wk

其中: □ \square

  • X k X_k Xk 表示在时间 k k k 的状态向量。
  • f ( ⋅ ) f(\cdot) f() 是状态转移函数,定义为:

f ( X k − 1 ) = [ X 1 , k − 1 + 2.5 ⋅ X 1 , k − 1 1 + X 1 , k − 1 2 + 8 ⋅ cos ⁡ ( 1.2 ⋅ ( k − 1 ) ) X 2 , k − 1 + 1 X 3 , k − 1 ] f\left(X_{k-1}\right)=\left[\begin{array}{c} X_{1, k-1}+\frac{2.5 \cdot X_{1, k-1}}{1+X_{1, k-1}^2}+8 \cdot \cos (1.2 \cdot(k-1)) \\ X_{2, k-1}+1 \\ X_{3, k-1} \end{array}\right] f(Xk1)=X1,k1+1+X1,k122.5X1,k1+8cos(1.2(k1))X2,k1+1X3,k1

  • w k w_k wk 是过程噪声,假设其符合高斯分布 w k ∼ N ( 0 , Q ) w_k \sim \mathcal{N}(0, Q) wkN(0,Q)
    2.2 观测方程

观测模型通过以下方程描述:

Z k = h ( X k ) + v k Z_k=h\left(X_k\right)+v_k Zk=h(Xk)+vk

其中:

  • Z k Z_k Zk 是在时间 k k k 的观测值。
  • h ( ⋅ ) h(\cdot) h() 是观测函数,定义为:

h ( X k ) = [ X 1 , k 2 X 2 , k 2 X 3 , k ] h\left(X_k\right)=\left[\begin{array}{c} \frac{X_{1, k}^2}{X_{2, k}^2} \\ X_{3, k} \end{array}\right] h(Xk)=[X2,k2X1,k2X3,k]

  • v k v_k vk 是观测噪声,假设其符合高斯分布 v k ∼ N ( 0 , R ) v_k \sim \mathcal{N}(0, R) vkN(0,R)

3. 算法步骤

3.1 初始化

  1. 设置粒子数量 N N N 和时间步 t t t
  2. 初始化粒子的位置 P P P :

P ( : , i ) = X ( : , 1 ) , ∀ i ∈ [ 1 , N ] P(:, i)=X(:, 1), \quad \forall i \in[1, N] P(:,i)=X(:,1),i[1,N]

  1. 计算初始观测值 Z P Z_P ZP 并计算权重 w w w :

w ( : , i ) = 1 2 π R ⋅ exp ⁡ ( − ∥ Z P ( : , i ) − Z ( : , 1 ) ∥ 2 2 R ) w(:, i)=\frac{1}{\sqrt{2 \pi R}} \cdot \exp \left(-\frac{\left\|Z_P(:, i)-Z(:, 1)\right\|^2}{2 R}\right) w(:,i)=2πR 1exp(2RZP(:,i)Z(:,1)2)
3.2 预测步骤

在每个时间步 k k k 中:

  1. 对每个粒子进行状态预测:

P ( : , i ) = f ( X p f ( k − 1 ) ) + w p f , k P(:, i)=f\left(X_{p f}(k-1)\right)+w_{p f, k} P(:,i)=f(Xpf(k1))+wpf,k

  1. 计算预测观测值 Z P Z_P ZP :

Z P ( : , i ) = h ( P ( : , i ) ) Z_P(:, i)=h(P(:, i)) ZP(:,i)=h(P(:,i))

3.3 更新权重

  1. 计算每个粒子的权重:

w ( : , i ) = 1 2 π R ⋅ exp ⁡ ( − ∥ Z P ( : , i ) − Z k ∥ 2 2 R ) w(:, i)=\frac{1}{\sqrt{2 \pi R}} \cdot \exp \left(-\frac{\left\|Z_P(:, i)-Z_k\right\|^2}{2 R}\right) w(:,i)=2πR 1exp(2RZP(:,i)Zk2)

  1. 归一化权重:

w ( : , i ) = w ( : , i ) ∑ j = 1 N w ( : , j ) w(:, i)=\frac{w(:, i)}{\sum_{j=1}^N w(:, j)} w(:,i)=j=1Nw(:,j)w(:,i)

3.4 重采样步骤

  1. 根据权重重采样,生成新的粒子集合 P next  P_{\text {next }} Pnext  :

P next  ( : , i ) = P ( : ,  index  ) P_{\text {next }}(:, i)=P(:, \text { index }) Pnext (:,i)=P(:, index )

3.5 状态估计

最终的状态估计为所有粒子的加权平均:

X p f ( k ) = 1 N ∑ i = 1 N P ( : , i ) X_{p f}(k)=\frac{1}{N} \sum_{i=1}^N P(:, i) Xpf(k)=N1i=1NP(:,i)

源代码

% PF三维滤波效果对比
% author:Evand
% 作者联系方式VX:matlabfilter(除前期达成一致外,咨询需付费)
% 2024-9-2/Ver1
% 2024-10-01/Ver2:添加逐行注释
clear; clc; close all; % 清空工作空间、命令窗口和关闭所有图形窗口
rng(0); % 设置随机数生成器的种子,确保结果可复现
%% 参数设置
N = 100; % 粒子总数
t = 1:1:1000; % 时间向量,从1到1000
Q = 1*diag([1,1,1]); % 过程噪声的协方差矩阵
w_pf = sqrt(Q) * randn(size(Q,1), length(t)); % 生成过程噪声,维度与状态一致
R = 1*diag([1,1,1]); % 观测噪声的协方差矩阵
v_pf = sqrt(R) * randn(size(R,1), length(t)); % 生成观测噪声,维度与观测一致
P0 = 1 * eye(3); % 初始状态的协方差矩阵
X = zeros(3, length(t)); % 初始化真实状态矩阵
X_ekf = zeros(3, length(t)); % 初始化扩展卡尔曼滤波状态矩阵
X_ekf(:, 1) = X(:, 1); % 设置初始状态
Z = zeros(3, length(t)); % 定义观测值矩阵
Z(:, 1) = [X(1, 1)^2 / 20; X(2, 1); X(3, 1)] + v_pf(:, 1); % 计算初始观测值

% 设定变量维度
X_ = zeros(3, length(t)); % 初始化未滤波状态矩阵


剩余代码下载链接:
https://mall.bilibili.com/neul-next/index.html?page=mall-up_itemDetail&noTitleBar=1&itemsId=1106357012&from=items_share&msource=items_share

运行结果

三维状态量的曲线:
在这里插入图片描述
三维状态量误差曲线:
在这里插入图片描述
三维误差的CDF图像:
在这里插入图片描述
滤波前后误差的统计特性(命令行截图):
在这里插入图片描述
更多程序,详见专栏:卡尔曼讲解与各种典型进阶MATLAB编程

粒子滤波是一种基于贝叶斯滤波理论的非参数滤波方法,被广泛应用于机器人定位与跟踪等场合。而三维定位是指在具有三维空间坐标系的环境下,利用传感器信息估计机器人的位置和姿态。 在matlab中实现粒子滤波三维定位算法需要以下步骤: 1. 定义状态模型:首先需要定义机器人状态模型,即机器人在当前时间点t的状态可以由上一个时间点t-1的状态和控制输入u得到。一般采用动力学模型描述机器人的运动规律,比如基于匀速模型或者运动学模型。 2. 定义观测模型:接下来需要定义机器人的观测模型,即机器人可以通过传感器感知到环境中的地标或者特征,并根据其位置估计机器人的位置。常用的观测模型包括激光雷达扫描匹配和视觉SLAM等。 3. 粒子初始化:接下来需要对粒子进行初始化。粒子是在状态空间中均匀分布的点,每个粒子代表一个假设的机器人状态。 4. 预测阶段:在预测阶段,每个粒子按照状态模型进行预测,得到一个新的粒子状态。 5. 权重计算:接下来需要根据每个粒子与观测数据之间的匹配程度计算其权重。匹配程度可以使用测量模型的误差度量来衡量,如果粒子与观测数据匹配程度越高,其权重就越大。 6. 重采样:粒子滤波中通常采用重要性重采样的方法,即根据每个粒子的权重对粒子进行重采样。重采样后权重大的粒子会更多的出现,权重小的粒子会被淘汰掉。 7. 估计机器人状态:通过权重计算和重采样后的粒子,可以求得当前时间点机器人的状态估计值。 最后需要注意的是,由于粒子的数量和分布会影响粒子滤波的精度和速度,因此需要在实际应用中对粒子数量进行调节,并使用有效性采样等方法提高粒子分布的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值