一、粒子滤波介绍
粒子滤波法是指通过寻找一组在状态空间传播的随机样本对概率密度函数进行近似,以样本均值代替积分运算,从而获得状态最小方差分布的过程。
二、算法实现
python版本,一个简明的粒子滤波实例[3]
# -*- coding=utf-8 -*-
# 直接运行代码可以看到跟踪效果
# 红色的小点代表粒子位置
# 蓝色的大点表示跟踪的结果
# 白色的方框表示要跟踪的目标
# 看懂下面两个函数即可
from numpy import *
from numpy.random import *
# 说实话,不太赞同这种 import 方法
# 第一是可能导致名字冲突,第二,很多函数方法都不知道是哪个模块里
def resample(weights):
n = len(weights)
indices = []
# 求出离散累积密度函数(CDF)
C = [0.] + [sum(weights[:i+1]) for i in range(n)]
# 选定一个随机初始点
u0, j = random(), 0
for u in [(u0+i)/n for i in range(n)]: # u 线性增长到 1
while u > C[j]: # 碰到小粒子,跳过
j+=1