0


# 粒子滤波 PF——三维匀速运动CV目标跟踪(粒子滤波VS扩展卡尔曼滤波)

粒子滤波 PF——三维匀速运动CV目标跟踪(粒子滤波VS扩展卡尔曼滤波)

对于该博客跟踪代码以及问题探讨可以联系:WX:ZB823618313
对于其他跟踪定位问题的代码及探讨也可以联系

原创不易,路过的各位大佬请点个赞

粒子滤波 PF——三维匀速运动CV目标跟踪(粒子滤波VS扩展卡尔曼滤波)

一、问题描述(离散时间非线性系统描述)

考虑一般非线性系统模型,

         x
        
        
         k
        
       
       
        =
       
       
        f
       
       
        (
       
       
        
         x
        
        
         
          k
         
         
          −
         
         
          1
         
        
       
       
        ,
       
       
        
         w
        
        
         
          k
         
         
          −
         
         
          1
         
        
       
       
        )
       
       
       
        
         z
        
        
         k
        
       
       
        =
       
       
        h
       
       
        (
       
       
        
         x
        
        
         k
        
       
       
        ,
       
       
        
         v
        
        
         k
        
       
       
        )
       
      
     
     
     
      
       (1)
      
     
    
   
   
    x_k=f(x_{k-1},w_{k-1}) \\ z_k=h(x_k,v_k ) \tag{1}
   
  
 xk​=f(xk−1​,wk−1​)zk​=h(xk​,vk​)(1)

其中

     x
    
    
     k
    
   
  
  
   x_k
  
 
xk​为

 
  
   
    k
   
  
  
   k
  
 
k时刻的目标状态向量。

 
  
   
    
     z
    
    
     k
    
   
  
  
   z_k
  
 
zk​为

 
  
   
    k
   
  
  
   k
  
 
k时刻量测向量(传感器数据)。这里不考虑控制器

 
  
   
    
     u
    
    
     k
    
   
  
  
   u_k
  
 
uk​。

 
  
   
    
     w
    
    
     k
    
   
  
  
   {w_k}
  
 
wk​和

 
  
   
    
     v
    
    
     k
    
   
  
  
   {v_k}
  
 
vk​分别是过程噪声序列和量测噪声序列,并假设

 
  
   
    
     w
    
    
     k
    
   
  
  
   w_k
  
 
wk​和

 
  
   
    
     v
    
    
     k
    
   
  
  
   v_k
  
 
vk​为零均值高斯白噪声,其方差分别为

 
  
   
    
     Q
    
    
     k
    
   
  
  
   Q_k
  
 
Qk​和

 
  
   
    
     R
    
    
     k
    
   
  
  
   R_k
  
 
Rk​的高斯白噪声,即

 
  
   
    
     w
    
    
     k
    
   
   
    ∼
   
   
    (
   
   
    0
   
   
    ,
   
   
    
     Q
    
    
     k
    
   
   
    )
   
  
  
   w_k\sim(0,Q_k)
  
 
wk​∼(0,Qk​), 

 
  
   
    
     v
    
    
     k
    
   
   
    ∼
   
   
    (
   
   
    0
   
   
    ,
   
   
    
     R
    
    
     k
    
   
   
    )
   
  
  
   v_k\sim(0,R_k)
  
 
vk​∼(0,Rk​),且满足如下关系(线性高斯假设)为:

 
  
   
    
     
      
       
        
         E
        
        
         [
        
        
         
          w
         
         
          i
         
        
        
         
          v
         
         
          j
         
         
          ′
         
        
        
         ]
        
       
      
     
     
      
       
        
        
         =
        
        
         0
        
       
      
     
    
    
     
      
       
        
         E
        
        
         [
        
        
         
          w
         
         
          i
         
        
        
         
          w
         
         
          j
         
         
          ′
         
        
        
         ]
        
       
      
     
     
      
       
        
        
         =
        
        
         0
        
        
        
         i
        
        
         ≠
        
        
         j
        
       
      
     
    
    
     
      
       
        
         E
        
        
         [
        
        
         
          v
         
         
          i
         
        
        
         
          v
         
         
          j
         
         
          ′
         
        
        
         ]
        
       
      
     
     
      
       
        
        
         =
        
        
         0
        
        
        
         i
        
        
         ≠
        
        
         j
        
       
      
     
    
   
   
     \begin{aligned} E[w_iv_j'] &=0\\ E[w_iw_j'] &=0\quad i\neq j \\ E[v_iv_j'] &=0\quad i\neq j \end{aligned} 
   
  
 E[wi​vj′​]E[wi​wj′​]E[vi​vj′​]​=0=0i​=j=0i​=j​

二、贝叶斯滤波

定义

    1
   
  
  
   1
  
 
1 ~ 

 
  
   
    k
   
  
  
   k
  
 
k时刻对状态

 
  
   
    
     x
    
    
     k
    
   
  
  
   x_k
  
 
xk​的所有测量数据为

 
  
   
    
     
      z
     
     
      k
     
    
    
     =
    
    
     [
    
    
     
      z
     
     
      1
     
     
      T
     
    
    
     ,
    
    
     
      z
     
     
      2
     
     
      T
     
    
    
     ,
    
    
     ⋯
     
    
     ,
    
    
     
      z
     
     
      k
     
     
      T
     
    
    
     
      ]
     
     
      T
     
    
   
   
    z^k=[z_1^T,z_2^T,\cdots,z_k^T]^T
   
  
 zk=[z1T​,z2T​,⋯,zkT​]T

贝叶斯滤波问题就是计算对

    k
   
  
  
   k
  
 
k时刻状态

 
  
   
    x
   
  
  
   x
  
 
x估计的置信程度,为此构造概率密度函数

 
  
   
    p
   
   
    (
   
   
    
     x
    
    
     k
    
   
   
    ∣
   
   
    
     z
    
    
     k
    
   
   
    )
   
  
  
   p(x_k |z^k)
  
 
p(xk​∣zk),在给定初始分布

 
  
   
    p
   
   
    (
   
   
    
     x
    
    
     0
    
   
   
    ∣
   
   
    
     z
    
    
     0
    
   
   
    )
   
   
    =
   
   
    p
   
   
    (
   
   
    
     x
    
    
     0
    
   
   
    )
   
  
  
   p(x_0|z_0)= p(x_0)
  
 
p(x0​∣z0​)=p(x0​)后,从理论上看,可以通过预测和更新两个步骤递推得到概率密度函数

 
  
   
    p
   
   
    (
   
   
    
     x
    
    
     k
    
   
   
    ∣
   
   
    
     z
    
    
     k
    
   
   
    )
   
  
  
   p(x_k |z^k)
  
 
p(xk​∣zk)的值。

是不是卡尔曼滤波的雏形出现了,哈哈哈,预测、更新也存在KF中。

2.1、 预测

现假定

    k
   
   
    −
   
   
    1
   
  
  
   k- 1
  
 
k−1时刻的概率密度函数已知,则通过将Chapman-Kolmogorov等式应用

于动态方程(1),即可预测

    k
   
  
  
   k
  
 
k时刻状态的先验概率密度函数为

 
  
   
    
     
     
      
       
        p
       
       
        (
       
       
        
         x
        
        
         k
        
       
       
        ∣
       
       
        
         z
        
        
         
          k
         
         
          −
         
         
          1
         
        
       
       
        )
       
       
        =
       
       
        ∫
       
       
        p
       
       
        (
       
       
        
         x
        
        
         k
        
       
       
        ∣
       
       
        
         x
        
        
         
          k
         
         
          −
         
         
          1
         
        
       
       
        )
       
       
        p
       
       
        (
       
       
        
         k
        
        
         −
        
        
         1
        
       
       
        ∣
       
       
        
         z
        
        
         
          k
         
         
          −
         
         
          1
         
        
       
       
        )
       
       
        d
       
       
        
         x
        
        
         
          k
         
         
          −
         
         
          1
         
        
       
       
        )
       
      
     
     
     
      
       (2)
      
     
    
   
   
    p(x_k |z^{k-1})=\int p(x_k |x_{k-1})p({k-1} |z^{k-1}) dx_{k-1}) \tag{2}
   
  
 p(xk​∣zk−1)=∫p(xk​∣xk−1​)p(k−1∣zk−1)dxk−1​)(2)

实际上,状态转移方程写为概率密度的形式即为:

      x
     
     
      k
     
    
    
     =
    
    
     f
    
    
     (
    
    
     
      x
     
     
      
       k
      
      
       −
      
      
       1
      
     
    
    
     ,
    
    
     
      w
     
     
      
       k
      
      
       −
      
      
       1
      
     
    
    
     )
    
    
     
      
       =
      
     
     
      等价
     
    
    
     p
    
    
     (
    
    
     
      x
     
     
      k
     
    
    
     ∣
    
    
     
      x
     
     
      
       k
      
      
       −
      
      
       1
      
     
    
    
     )
    
   
   
    x_k=f(x_{k-1},w_{k-1}) \underset{\text{等价}}= p(x_k |x_{k-1})
   
  
 xk​=f(xk−1​,wk−1​)等价=​p(xk​∣xk−1​)

式(2)中隐含假定了

    p
   
   
    (
   
   
    
     x
    
    
     k
    
   
   
    ∣
   
   
    
     x
    
    
     
      k
     
     
      −
     
     
      1
     
    
   
   
    )
   
   
    =
   
   
    p
   
   
    (
   
   
    
     x
    
    
     k
    
   
   
    ∣
   
   
    
     x
    
    
     
      k
     
     
      −
     
     
      1
     
    
   
   
    ,
   
   
    
     z
    
    
     
      k
     
     
      −
     
     
      1
     
    
   
   
    )
   
  
  
   p(x_k |x_{k-1})= p(x_k |x_{k-1}, z^{k-1})
  
 
p(xk​∣xk−1​)=p(xk​∣xk−1​,zk−1),实际上这本身在这里就是成立的,基于(1)式的马尔可夫过程。

2.2、 更新

在获得

    p
   
   
    (
   
   
    
     x
    
    
     k
    
   
   
    ∣
   
   
    
     z
    
    
     
      k
     
     
      −
     
     
      1
     
    
   
   
    )
   
  
  
   p(x_k |z^{k-1})
  
 
p(xk​∣zk−1)的基础上,结合

 
  
   
    k
   
  
  
   k
  
 
k时刻得到的新的量测值,基于贝叶斯公式,可以计算

 
  
   
    k
   
  
  
   k
  
 
k时刻状态的后验概率密度函数:

 
  
   
    
     
     
      
       
        p
       
       
        (
       
       
        
         x
        
        
         k
        
       
       
        ∣
       
       
        
         z
        
        
         k
        
       
       
        )
       
       
        =
       
       
        
         
          p
         
         
          (
         
         
          
           z
          
          
           k
          
         
         
          ∣
         
         
          
           x
          
          
           k
          
         
         
          )
         
         
          p
         
         
          (
         
         
          
           x
          
          
           k
          
         
         
          ∣
         
         
          
           z
          
          
           
            k
           
           
            −
           
           
            1
           
          
         
         
          )
         
        
        
         
          p
         
         
          (
         
         
          
           z
          
          
           k
          
         
         
          ∣
         
         
          
           z
          
          
           
            k
           
           
            −
           
           
            1
           
          
         
         
          )
         
        
       
      
     
     
     
      
       (3)
      
     
    
   
   
    p(x_k |z^{k})=\frac{p(z_k |x_k)p(x_k |z^{k-1})}{p(z_k |z^{k-1})} \tag{3}
   
  
 p(xk​∣zk)=p(zk​∣zk−1)p(zk​∣xk​)p(xk​∣zk−1)​(3)

式中分子

    p
   
   
    (
   
   
    
     z
    
    
     k
    
   
   
    ∣
   
   
    
     z
    
    
     
      k
     
     
      −
     
     
      1
     
    
   
   
    )
   
  
  
   p(z_k |z^{k-1})
  
 
p(zk​∣zk−1)有全概率公式得到

 
  
   
    
     
     
      
       
        p
       
       
        (
       
       
        
         z
        
        
         k
        
       
       
        ∣
       
       
        
         z
        
        
         
          k
         
         
          −
         
         
          1
         
        
       
       
        )
       
       
        =
       
       
        ∫
       
       
        p
       
       
        (
       
       
        
         z
        
        
         k
        
       
       
        ∣
       
       
        
         x
        
        
         k
        
       
       
        )
       
       
        p
       
       
        (
       
       
        
         x
        
        
         k
        
       
       
        ∣
       
       
        
         z
        
        
         
          k
         
         
          −
         
         
          1
         
        
       
       
        )
       
       
        d
       
       
        
         x
        
        
         k
        
       
      
     
     
     
      
       (4)
      
     
    
   
   
    p(z_k |z^{k-1})=\int p(z_k |x_k)p(x_k |z^{k-1}) dx_{k} \tag{4}
   
  
 p(zk​∣zk−1)=∫p(zk​∣xk​)p(xk​∣zk−1)dxk​(4)

我就说吧,上述过程实际上贝叶斯后燕推断的公式,哈哈哈哈啊哈

实际上这也是卡尔曼滤波的更新思想:在

     k
    
   
   
    k
   
  
 k时刻得到测量
 
  
   
    
     
      z
     
     
      k
     
    
   
   
    z_k
   
  
 zk​后,利用测量
 
  
   
    
     
      z
     
     
      k
     
    
   
   
    z_k
   
  
 zk​修正先验概率,进而获得当前时刻状态的后验概率。我正是太机智了,哈哈啊哈

三、粒子滤波 PF(贝叶斯滤波的MC实现)

粒子滤波实际上是递推贝叶斯滤波的蒙特卡洛实现的一种算法,即一种近似的贝叶斯滤波。

核心思想:是使用一组具有相应权值的随机样本(粒子)来表示状态的后验分布。该方法的基本思路是选取一个重要性概率密度并从中进行随机抽样,得到一些带有相应权值的随机样本后,在状态观测的基础上调节权值的大小。和粒子的位置,再使用这些样本来逼近状态后验分布,最后将这组样本的加权求和作为状态的估计值。粒子滤波不受系统模型的线性和高斯假设约束,采用样本形式而不是函数形式对状态概率密度进行描述,使其不需要对状态变量的概率分布进行过多的约束,因而在非线性非高斯动态系统中广泛应用。尽管如此,粒子滤波目前仍存在计算量过大、粒子退化等关键问题亟待突破。

通常情况下选择先验分布作为重要性密度函数、即

     q
    
    
     (
    
    
     
      x
     
     
      k
     
    
    
     ∣
    
    
     
      x
     
     
      
       k
      
      
       −
      
      
       1
      
     
     
      
       (
      
      
       i
      
      
       )
      
     
    
    
     ,
    
    
     
      z
     
     
      k
     
    
    
     )
    
    
     =
    
    
     p
    
    
     (
    
    
     
      x
     
     
      k
     
    
    
     ∣
    
    
     
      x
     
     
      
       k
      
      
       −
      
      
       1
      
     
     
      
       (
      
      
       i
      
      
       )
      
     
    
    
     )
    
   
   
    q(x_k |x_{k-1}^{(i)}, z_{k})=p(x_k |x_{k-1}^{(i)})
   
  
 q(xk​∣xk−1(i)​,zk​)=p(xk​∣xk−1(i)​)

对该函数取重要性权值为

      w
     
     
      k
     
     
      
       (
      
      
       i
      
      
       )
      
     
    
    
     =
    
    
     
      w
     
     
      
       k
      
      
       −
      
      
       1
      
     
     
      
       (
      
      
       i
      
      
       )
      
     
    
    
     p
    
    
     (
    
    
     
      z
     
     
      k
     
    
    
     ∣
    
    
     
      x
     
     
      k
     
     
      
       (
      
      
       i
      
      
       )
      
     
    
    
     )
    
   
   
    w_k^{(i)}=w_{k-1}^{(i)}p(z_k |x_{k}^{(i)})
   
  
 wk(i)​=wk−1(i)​p(zk​∣xk(i)​)

同样

     w
    
    
     k
    
    
     
      (
     
     
      i
     
     
      )
     
    
   
  
  
   w_k^{(i)}
  
 
wk(i)​需要归一化得到

 
  
   
    
     
      w
     
     
      ~
     
    
    
     k
    
    
     
      (
     
     
      i
     
     
      )
     
    
   
  
  
   \tilde{w}_k^{(i)}
  
 
w~k(i)​。

标准的粒子滤波算法步骤为:

粒子滤波PF:
Step 1: 根据

     p
    
    
     (
    
    
     
      x
     
     
      0
     
    
    
     )
    
   
   
    p(x_{0})
   
  
 p(x0​)采样得到
 
  
   
    
     N
    
   
   
    N
   
  
 N个粒子 
 
  
   
    
     
      x
     
     
      0
     
     
      
       (
      
      
       i
      
      
       )
      
     
    
    
     ∼
    
    
     p
    
    
     (
    
    
     
      x
     
     
      0
     
    
    
     )
    
   
   
    x_0^{(i)} \sim p(x_{0})
   
  
 x0(i)​∼p(x0​)

For

     i
    
    
     =
    
    
     2
    
    
     :
    
    
     N
    
   
   
    i=2:N
   
  
 i=2:N

  Step 2: 根据状态转移函数产生新的粒子为:$

       x
      
      
       k
      
      
       
        (
       
       
        i
       
       
        )
       
      
     
     
      ∼
     
     
      p
     
     
      (
     
     
      
       x
      
      
       k
      
     
     
      ∣
     
     
      
       x
      
      
       
        k
       
       
        −
       
       
        1
       
      
      
       
        (
       
       
        i
       
       
        )
       
      
     
     
      )
     
    
    
     x_k^{(i)} \sim p(x_{k} |x_{k-1}^{(i)})
    
   
  xk(i)​∼p(xk​∣xk−1(i)​)

  Step 3: 计算重要性权值:

       w
      
      
       k
      
      
       
        (
       
       
        i
       
       
        )
       
      
     
     
      =
     
     
      
       w
      
      
       
        k
       
       
        −
       
       
        1
       
      
      
       
        (
       
       
        i
       
       
        )
       
      
     
     
      p
     
     
      (
     
     
      
       z
      
      
       k
      
     
     
      ∣
     
     
      
       x
      
      
       k
      
      
       
        (
       
       
        i
       
       
        )
       
      
     
     
      )
     
    
    
     w_k^{(i)}=w_{k-1}^{(i)}p(z_k |x_{k}^{(i)})
    
   
  wk(i)​=wk−1(i)​p(zk​∣xk(i)​)

  Step 4: 归一化重要性权值:

        w
       
       
        ~
       
      
      
       k
      
      
       
        (
       
       
        i
       
       
        )
       
      
     
     
      =
     
     
      
       
        w
       
       
        k
       
       
        
         (
        
        
         i
        
        
         )
        
       
      
      
       
        
         ∑
        
        
         
          j
         
         
          =
         
         
          1
         
        
        
         N
        
       
       
        
         w
        
        
         k
        
        
         
          (
         
         
          j
         
         
          )
         
        
       
      
     
    
    
     \tilde{w}_k^{(i)}=\frac{w_k^{(i)}}{\sum_{j=1}^Nw_k^{(j)}} 
    
   
  w~k(i)​=∑j=1N​wk(j)​wk(i)​​

  Step 5: 使用重采样方法对粒子进行重采样(以随机重采样和系统重采样为例)
  Step 6: 得到

     k
    
   
   
    k
   
  
 k时刻的后验状态估计:

  
   
    
     
      E
     
     
      [
     
     
      
       
        x
       
       
        ^
       
      
      
       k
      
     
     
      ]
     
     
      =
     
     
      
       ∑
      
      
       
        i
       
       
        =
       
       
        1
       
      
      
       N
      
     
     
      
       x
      
      
       k
      
      
       
        (
       
       
        i
       
       
        )
       
      
     
     
      
       
        w
       
       
        ~
       
      
      
       k
      
      
       
        (
       
       
        i
       
       
        )
       
      
     
    
    
      E[\hat{x}_{k}]= \sum_{i=1}^Nx_{k}^{(i)}\tilde{w}_k^{(i)}
    
   
  E[x^k​]=i=1∑N​xk(i)​w~k(i)​

End For

算法:系统重采样 (systematic resampling)
For

     i
    
    
     =
    
    
     1
    
    
     :
    
    
     N
    
   
   
    i=1:N
   
  
 i=1:N

  Step 1: 初始化累积概率密度函数CDF:

      c
     
     
      1
     
    
    
     =
    
    
     0
    
   
   
    c_1=0
   
  
 c1​=0

For

     i
    
    
     =
    
    
     2
    
    
     :
    
    
     N
    
   
   
    i=2:N
   
  
 i=2:N

  Step 2: 构造CDF:

      c
     
     
      i
     
    
    
     =
    
    
     
      c
     
     
      
       i
      
      
       −
      
      
       1
      
     
    
    
     +
    
    
     
      w
     
     
      k
     
     
      
       (
      
      
       i
      
      
       )
      
     
    
   
   
    c_i=c_{i-1}+w_k^{(i)}
   
  
 ci​=ci−1​+wk(i)​

  Step 3: 从CDF的底部开始:

     i
    
    
     =
    
    
     1
    
   
   
    i=1
   
  
 i=1

  Step 4: 采样起始点:

      u
     
     
      1
     
    
    
     =
    
    
     U
    
    
     [
    
    
     0
    
    
     ,
    
    
     1
    
    
     /
    
    
     N
    
    
     ]
    
   
   
    u_1=\mathcal{U}[0,1/N]
   
  
 u1​=U[0,1/N]

End For
For

     j
    
    
     =
    
    
     1
    
    
     :
    
    
     N
    
   
   
    j=1:N
   
  
 j=1:N

  Step 5: 沿CDF移动:

      u
     
     
      j
     
    
    
     =
    
    
     
      u
     
     
      1
     
    
    
     +
    
    
     (
    
    
     j
    
    
     −
    
    
     1
    
    
     )
    
    
     /
    
    
     N
    
   
   
    u_j=u_{1}+(j-1)/N
   
  
 uj​=u1​+(j−1)/N

  Step 6: While

      u
     
     
      j
     
    
    
     >
    
    
     
      c
     
     
      i
     
    
   
   
    u_j>c_i
   
  
 uj​>ci​

 
  
   
    
     i
    
    
     =
    
    
     i
    
    
     +
    
    
     1
    
   
   
    i=i+1
   
  
 i=i+1

     End While
  Step 7: 赋值粒子:

      x
     
     
      k
     
     
      
       (
      
      
       j
      
      
       )
      
     
    
    
     =
    
    
     
      x
     
     
      k
     
     
      
       (
      
      
       i
      
      
       )
      
     
    
   
   
    x_k^{(j)}=x_k^{(i)}
   
  
 xk(j)​=xk(i)​

  Step 8: 赋值权值:

      w
     
     
      k
     
     
      
       (
      
      
       j
      
      
       )
      
     
    
    
     =
    
    
     1
    
    
     /
    
    
     N
    
   
   
    w_k^{(j)}=1/N
   
  
 wk(j)​=1/N

  Step 9: 赋值父代:

      i
     
     
      
       (
      
      
       j
      
      
       )
      
     
    
    
     =
    
    
     i
    
   
   
    i^{(j)}=i
   
  
 i(j)=i

End For

四、仿真场景:三维雷达目标跟踪

4.1 仿真场景(三维匀速目标)

目标模型
考虑一各三维的匀速运动目标(CV 模型):

      x
     
     
      
       k
      
      
       +
      
      
       1
      
     
    
    
     =
    
    
     
      F
     
     
      k
     
    
    
     
      x
     
     
      k
     
    
    
     +
    
    
     
      G
     
     
      k
     
    
    
     
      w
     
     
      k
     
    
   
   
    x_{k+1}=F_kx_k+G _kw_k
   
  
 xk+1​=Fk​xk​+Gk​wk​

其中状态向量

     x
    
    
     k
    
   
   
    =
   
   
    [
   
   
    
     x
    
    
     k
    
   
   
    ,
   
   
    
     
      x
     
     
      ˙
     
    
    
     k
    
   
   
    ,
   
   
    
     y
    
    
     k
    
   
   
    ,
   
   
    
     
      y
     
     
      ˙
     
    
    
     k
    
   
   
    ,
   
   
    
     z
    
    
     k
    
   
   
    ,
   
   
    
     
      z
     
     
      ˙
     
    
    
     k
    
   
   
    
     ]
    
    
     ′
    
   
  
  
   x_k=[x_k,\dot{x}_k,y_k,\dot{y}_k,z_k,\dot{z}_k]'
  
 
xk​=[xk​,x˙k​,yk​,y˙​k​,zk​,z˙k​]′;噪声为

 
  
   
    
     w
    
    
     k
    
   
   
    =
   
   
    [
   
   
    
     w
    
    
     x
    
   
   
    ,
   
   
    
     w
    
    
     y
    
   
   
    ,
   
   
    
     w
    
    
     z
    
   
   
    
     ]
    
    
     ′
    
   
  
  
   w_k=[w_x,w_y,w_z]'
  
 
wk​=[wx​,wy​,wz​]′;状态转移矩阵

 
  
   
    
     F
    
    
     k
    
   
  
  
   F_k
  
 
Fk​和噪声驱动矩阵

 
  
   
    
     G
    
    
     k
    
   
  
  
   G_k
  
 
Gk​如下

 
  
   
    
     
      F
     
     
      k
     
    
    
     =
    
    
     
      [
     
     
      
       
        
         
          1
         
        
       
       
        
         
          T
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          1
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          1
         
        
       
       
        
         
          T
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          1
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          1
         
        
       
       
        
         
          T
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          1
         
        
       
      
     
     
      ]
     
    
    
    
     
      Γ
     
     
      k
     
    
    
     =
    
    
     
      [
     
     
      
       
        
         
          
           1
          
          
           /
          
          
           2
          
          
           
            T
           
           
            2
           
          
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          T
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          
           1
          
          
           /
          
          
           2
          
          
           
            T
           
           
            2
           
          
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          T
         
        
       
       
        
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          
           1
          
          
           /
          
          
           2
          
          
           
            T
           
           
            2
           
          
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          T
         
        
       
      
     
     
      ]
     
    
   
   
    F_k=\begin{bmatrix}1 & T & 0 & 0 & 0 & 0\\0 & 1 & 0 & 0 & 0 & 0 \\0 & 0 & 1 & T & 0 & 0\\0 & 0 & 0 & 1 & 0 & 0\\0 & 0 & 0 & 0 & 1 & T\\0 & 0 & 0 & 0 & 0 & 1\end{bmatrix} \qquad\varGamma_k=\begin{bmatrix}1/2T^2 & 0 & 0 \\T & 0 & 0 \\0 & 1/2T^2 & 0 \\0 & T & \\0 & 0 & 1/2T^2 \\0 & 0 & T\end{bmatrix}
   
  
 Fk​=⎣⎢⎢⎢⎢⎢⎢⎡​100000​T10000​001000​00T100​000010​0000T1​⎦⎥⎥⎥⎥⎥⎥⎤​Γk​=⎣⎢⎢⎢⎢⎢⎢⎡​1/2T2T0000​001/2T2T00​0001/2T2T​⎦⎥⎥⎥⎥⎥⎥⎤​

采样时间

    T
   
   
    =
   
   
    1
   
   
    s
   
  
  
   T=1s
  
 
T=1s. 初始状态为 
 
  
   
    
     
      x
     
     
      0
     
    
    
     ∼
    
    
     (
    
    
     
      
       x
      
      
       ˉ
      
     
     
      0
     
    
    
     ,
    
    
     
      P
     
     
      0
     
    
    
     )
    
    
    
     
      
       x
      
      
       ˉ
      
     
     
      0
     
    
    
     =
    
    
     [
    
    
     1
    
    
     km
    
    
     ,
    
    
     20
    
    
     m/s
    
    
     ,
    
    
     1
    
    
     km
    
    
     ,
    
    
     20
    
    
     m/s
    
    
     ,
    
    
     1
    
    
     km
    
    
     ,
    
    
     20
    
    
     m/s
    
    
     
      ]
     
     
      ′
     
    
    
    
     
      P
     
     
      0
     
    
    
     =
    
    
     diag
    
    
     (
    
    
     1
    
    
     
      0
     
     
      5
     
    
    
     
      m
     
     
      2
     
    
    
     ,
    
    
     1
    
    
     
      0
     
     
      2
     
    
    
     
      m
     
     
      2
     
    
    
     /
    
    
     
      s
     
     
      2
     
    
    
     ,
    
    
     1
    
    
     
      0
     
     
      5
     
    
    
     
      m
     
     
      2
     
    
    
     ,
    
    
     1
    
    
     
      0
     
     
      2
     
    
    
     
      m
     
     
      2
     
    
    
     /
    
    
     
      s
     
     
      2
     
    
    
     ,
    
    
     1
    
    
     
      0
     
     
      5
     
    
    
     
      m
     
     
      2
     
    
    
     ,
    
    
     1
    
    
     
      0
     
     
      2
     
    
    
     
      m
     
     
      2
     
    
    
     /
    
    
     
      s
     
     
      2
     
    
    
     )
    
   
   
    x_0\sim(\bar{x}_0,P_0)\\\bar{x}_{0}=[1\text{km}, 20\text{m/s} ,1\text{km}, 20\text{m/s} ,1\text{km}, 20\text{m/s}]'\\P_{0}=\text{diag}(10^5\text{m}^2, 10^2\text{m}^2/\text{s}^2, 10^5\text{m}^2, 10^2\text{m}^2/\text{s}^2, 10^5\text{m}^2, 10^2\text{m}^2/\text{s}^2)
   
  
 x0​∼(xˉ0​,P0​)xˉ0​=[1km,20m/s,1km,20m/s,1km,20m/s]′P0​=diag(105m2,102m2/s2,105m2,102m2/s2,105m2,102m2/s2)

过程噪声均值和方差分别为

    q
   
   
    =
   
   
    10
   
  
  
   q=10
  
 
q=10

 
  
   
    
     
      
       w
      
      
       ˉ
      
     
     
      k
     
    
    
     =
    
    
     [
    
    
     0
    
    
     ,
    
    
     0
    
    
     ,
    
    
     0
    
    
     
      ]
     
     
      ′
     
    
    
    
     
      Q
     
     
      k
     
    
    
     =
    
    
     
      [
     
     
      
       
        
         
          
           q
          
          
           2
          
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          
           q
          
          
           2
          
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          
           q
          
          
           2
          
         
        
       
      
     
     
      ]
     
    
   
   
    \bar{w}_k=[0,0, 0]'\\Q_k=\begin{bmatrix}q^2 & 0& 0 \\0 & q^2 & 0\\0&0 & q^2 \end{bmatrix}
   
  
 wˉk​=[0,0,0]′Qk​=⎣⎡​q200​0q20​00q2​⎦⎤​

如果为非线性目标,则将状态转移矩阵

      F
     
     
      k
     
    
   
   
    F_k
   
  
 Fk​代替为雅可比矩阵即可。为了不是一般性这里采用线性模型进行仿真。主要处理目标跟踪,雷达量测存在的非线性滤波问题。

雷达量测模型
在三维情况下,雷达量测为距离和角度

      r
     
     
      k
     
     
      m
     
    
    
     =
    
    
     
      r
     
     
      k
     
    
    
     +
    
    
     
      
       r
      
      
       ~
      
     
     
      k
     
    
    
    
     
      b
     
     
      k
     
     
      m
     
    
    
     =
    
    
     
      b
     
     
      k
     
    
    
     +
    
    
     
      
       b
      
      
       ~
      
     
     
      k
     
    
    
    
     
      e
     
     
      k
     
     
      m
     
    
    
     =
    
    
     
      e
     
     
      k
     
    
    
     +
    
    
     
      
       e
      
      
       ~
      
     
     
      k
     
    
   
   
    {r}_k^m=r_k+\tilde{r}_k\\ b^m_k=b_k+\tilde{b}_k\\ e^m_k=e_k+\tilde{e}_k
   
  
 rkm​=rk​+r~k​bkm​=bk​+b~k​ekm​=ek​+e~k​

其中

      r
     
     
      k
     
    
    
     =
    
    
     
      
       (
      
      
       
        x
       
       
        k
       
      
      
       −
      
      
       
        x
       
       
        0
       
      
      
       
        )
       
       
        +
       
      
      
       (
      
      
       
        y
       
       
        k
       
      
      
       −
      
      
       
        y
       
       
        0
       
      
      
       
        )
       
       
        2
       
      
      
       )
      
     
    
    
    
     
      b
     
     
      k
     
    
    
     =
    
    
     
      
       tan
      
      
       ⁡
      
     
     
      
       −
      
      
       1
      
     
    
    
     
      
       
        y
       
       
        k
       
      
      
       −
      
      
       
        y
       
       
        0
       
      
     
     
      
       
        x
       
       
        k
       
      
      
       −
      
      
       
        x
       
       
        0
       
      
     
    
    
    
     
      e
     
     
      k
     
    
    
     =
    
    
     
      
       tan
      
      
       ⁡
      
     
     
      
       −
      
      
       1
      
     
    
    
     
      
       
        z
       
       
        k
       
      
      
       −
      
      
       
        z
       
       
        0
       
      
     
     
      
       
        (
       
       
        
         x
        
        
         k
        
       
       
        −
       
       
        
         x
        
        
         0
        
       
       
        
         )
        
        
         2
        
       
       
        +
       
       
        (
       
       
        
         y
        
        
         k
        
       
       
        −
       
       
        
         y
        
        
         0
        
       
       
        
         )
        
        
         2
        
       
      
     
    
    
   
   
    r_k=\sqrt{(x_k-x_0)^+(y_k-y_0)^2)}\\ b_k=\tan^{-1}{\frac{y_k-y_0}{x_k-x_0}}\\ e_k=\tan^{-1}{\frac{z_k-z_0}{\sqrt{(x_k-x_0)^2+(y_k-y_0)^2}}}\\ 
   
  
 rk​=(xk​−x0​)+(yk​−y0​)2)​bk​=tan−1xk​−x0​yk​−y0​​ek​=tan−1(xk​−x0​)2+(yk​−y0​)2​zk​−z0​​


 
  
   
    [
   
   
    
     x
    
    
     0
    
   
   
    ,
   
   
    
     y
    
    
     0
    
   
   
    ,
   
   
    
     z
    
    
     0
    
   
   
    ]
   
  
  
   [x_0,y_0,z_0]
  
 
[x0​,y0​,z0​]为雷达坐标,一般情况为0。雷达量测为

 
  
   
    
     z
    
    
     k
    
   
   
    =
   
   
    [
   
   
    
     r
    
    
     k
    
   
   
    ,
   
   
    
     b
    
    
     k
    
   
   
    ,
   
   
    
     e
    
    
     k
    
   
   
    
     ]
    
    
     ′
    
   
  
  
   z_k=[r_k,b_k,e_k]'
  
 
zk​=[rk​,bk​,ek​]′。雷达量测方差为

 
  
   
    
     
      R
     
     
      k
     
    
    
     =
    
    
     cov
    
    
     (
    
    
     
      v
     
     
      k
     
    
    
     )
    
    
     =
    
    
     
      [
     
     
      
       
        
         
          
           σ
          
          
           r
          
          
           2
          
         
        
       
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          
           σ
          
          
           b
          
          
           2
          
         
        
       
       
        
         
          0
         
        
       
      
      
       
        
         
          0
         
        
       
       
        
         
          0
         
        
       
       
        
         
          
           σ
          
          
           e
          
          
           2
          
         
        
       
      
     
     
      ]
     
    
   
   
    R_k=\text{cov}(v_k)=\begin{bmatrix}\sigma_r^2 & 0 &0\\0 & \sigma_b^2 &0\\0&0& \sigma_e^2 \end{bmatrix}
   
  
 Rk​=cov(vk​)=⎣⎡​σr2​00​0σb2​0​00σe2​​⎦⎤​且

 
  
   
    
     σ
    
    
     r
    
   
   
    =
   
   
    20
   
   
    m
   
  
  
   \sigma_r=20m
  
 
σr​=20m, 

 
  
   
    
     σ
    
    
     b
    
   
   
    =
   
   
    20
   
   
    m
   
   
    r
   
   
    a
   
   
    d
   
  
  
   \sigma_b=20mrad
  
 
σb​=20mrad, 

 
  
   
    
     σ
    
    
     e
    
   
   
    =
   
   
    15
   
   
    m
   
   
    r
   
   
    a
   
   
    d
   
  
  
   \sigma_e=15mrad
  
 
σe​=15mrad。

4.2 跟踪轨迹

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.3 跟踪误差

在这里插入图片描述
在这里插入图片描述

五、部分代码

对于该博客跟踪代码以及问题探讨可以联系:WX:ZB823618313
对于其他跟踪定位问题的代码及探讨也可以联系

5.1、主函数部分代码

clear all; close all; clc;%% initial parameter
n=6;%状态维数 ;
T=1;%采样时间
M=1;%雷达数目
N=100;%运行总时刻
MC=10;%蒙特卡洛次数
global N_pf
N_pf=5000;% 采样点数PF
chan=1;%滤波器通道,这里只有一个滤波器
w_mu=[0,0,0]';% mean of process noise 
v_mu=[0,0,0]';% mean of measurement noise
%% target model
%covariance of process noise
q=10;%m/s^2
Qk=q^2*eye(3);% state matrix
% CV
Fk=[1,T,0,0,0,0;0,1,0,0,0,0;0,0,1,T,0,0;0,0,0,1,0,0;0,0,0,0,1,T;0,0,0,0,0,1];

Gk=[  T^2/2,0,0;
          T,0,0;0,T^2/2,0;0,    T,0;0,0,T^2/2;0,0,    T ];%量测模型
sigma_r(1)=20;sigma_b(1)=20e-3;sigma_e(1)=15e-3;% covariance of measurement noise(radar)% sigma_r=300; sigma_b=200e-3; sigma_e=100e-3;
Rk=diag([sigma_r(1)^2,sigma_b(1)^2,sigma_e(1)^2]);
xp=[0,0,0,0,0,0];%雷达位置
%% 定义存储空间
sV=zeros(n,N,MC);% 状态
eV=zeros(n,N,MC,chan);%估计
PV=zeros(n,n,N,MC,chan);%协方差
rV=zeros(3,N,MC,M);%%量测
for i=1:MC
    sprintf('rate of process:%3.1f%%',(2*i)/(4*MC)*100)% 初始状态的均值和方差
    x=[1000,500,1000,0,100,100]';
    P_0=diag([1e4,10^2,1e4,10^2,1e4,10^2]); 
    x=[1000,80,1000,50,100,10]';
    P_0=diag([1e5,10^2,1e5,10^2,1e5,10^2]);%     x=[100,50,100,50,100,50]';%     P_0=diag([5e5,1e3,5e5,1e3,5e5,1e3]);%initial covariance
    xk_EKF=x;    Pk_EKF=P_0;% P0|0 x0|0 
    xk_pf=x;     Pk_pf=P_0;% P0|0 x0|0%产生N个粒子
    for ii =1: N_pf
        xpart(:,ii)= x+sqrtm(P_0)*randn(6,1);
    end

5.2、PF部分代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%函数功能:实现随机重采样算法
%输入参数:weight为原始数据对应的权重大小
%输出参数:outIndex是根据weight对inIndex筛选和复制结果
function outIndex=randomR(weight)%获得数据的长度
L=length(weight);%初始化输出索引向量,长度与输入索引向量相等
outIndex=zeros(1,L);%第一步:产生[0,1]上均匀分布的随机数组,并升序排序
u=unifrnd(0,1,1,L);
u=sort(u);%u=(1:L)/L%这个是完全均匀
%第二步:计算粒子权重积累函数cdf
cdf=cumsum(weight);%第三步:核心计算
i=1;for j=1:L
    %此处的基本原理是:u是均匀的,必然是权值大的地方
    %有更多的随机数落入该区间,因此会被多次复制
    while(i<=L)&(u(i)<=cdf(j))%复制权值大的粒子
        outIndex(i)=j;%继续考察下一个随机数,看它落在哪个区间
        i=i+1;
    end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 系统重采样子函数
% 输入参数:weight为原始数据对应的权重大小
% 输出参数:outIndex是根据weight筛选和复制结果
function outIndex =systematicR(weight);
N=length(weight);
N_children=zeros(1,N);
label=zeros(1,N);
label=1:1:N;
s=1/N;
auxw=0;
auxl=0;
li=0;
T=s*rand(1);
j=1;
Q=0;
i=0;
u=rand(1,N);while(T<1)if(Q>T)
        T=T+s;N_children(1,li)=N_children(1,li)+1;else
        i=fix((N-j+1)*u(1,j))+j;
        auxw=weight(1,i);
        li=label(1,i);
        Q=Q+auxw;weight(1,i)=weight(1,j);label(1,i)=label(1,j);
        j=j+1;
    end
end
index=1;for i=1:N
    if(N_children(1,i)>0)for j=index:index+N_children(1,i)-1outIndex(j)= i;
        end;
    end;
    index= index+N_children(1,i);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

本文转载自: https://blog.csdn.net/weixin_44044161/article/details/125415838
版权归原作者 脑壳二 所有, 如有侵权,请联系我们删除。

“# 粒子滤波 PF&mdash;&mdash;三维匀速运动CV目标跟踪(粒子滤波VS扩展卡尔曼滤波)”的评论:

还没有评论