Code covered by the BSD License

Highlights from Particle filter tutorial

4.0
4.0 | 5 ratings Rate this file 122 Downloads (last 30 days) File Size: 4.88 KB File ID: #35468 Version: 1.1

Particle filter tutorial

Diego Andrés Alvarez Marín (view profile)

05 Mar 2012 (Updated )

Implementation of the generic particle filter

File Information
Description

This file implements the particle filter described in

Arulampalam et. al. (2002). A tutorial on particle filters for online nonlinear/non-gaussian bayesian tracking. IEEE Transactions on Signal Processing. 50 (2). p 174--188

Heavily commented code included

Required Products Statistics and Machine Learning Toolbox
MATLAB release MATLAB 7.8 (R2009a)
07 Jun 2016 manh 123

manh 123 (view profile)

Particle filter is explained through example of color tracking in here: https://github.com/trungmanhhuynh/-C-Pixel-wise-Color-Tracking-using-Particle-Filter

Comment only
13 Apr 2016 Michael

Michael (view profile)

Statistics and Machine Learning Toolbox
required

11 Apr 2016 pangpang jz

thanks

07 Oct 2013 Nima

Nima (view profile)

03 Oct 2013 droulias Roulias

droulias Roulias (view profile)

case 'regularized_pf'

%reasmple
edges = min([0 cumsum(wk)'],1); % protect against accumulated round-off
edges(end) = 1; % get the upper edge exact
u1 = rand/Ns;

[~, idx] = histc(u1:1/Ns:1, edges);
xk = xk(:,idx); % extract new particles
wk = repmat(1/Ns, 1, Ns); % now all particles have the same weight

%according to Mussao et al., 2001
% compute empirical covariance of particles
emp_cov=cov(xk')';
% form D'*D=emp_cov
dd=cholcov(emp_cov);

nx=size(xk,1);
%unit sphere volume (in two dimensions)
cc=pi;
%form the optimal choice of bandwidth
aa=(8*(1/cc)*(nx+4)*(2*pi^.5)^nx)^(1/(nx+4));
hopt=aa*Ns^(-1/(nx+4));
% form an estimation of continuous pdf via epanechnikov kernel
[f,~] = ksdensity(wk,'npoints',length(wk),'kernel','epanechnikov');
f=f/sum(f);
% compute the cumulative of the continuous distribution
edges = min([0 cumsum(f)],1); % protect against accumulated round-off
edges(end) = 1; % get the upper edge exact
%sample from the inverse of cumulative of continuous density
u1 = rand/Ns;
[~, idx] = histc(u1:1/Ns:1, edges);
ee=xk(:,idx);
%move all samples to centre
ee=ee-repmat(mean(ee,2),1,length(ee));
xk = xk+hopt*dd*ee; % extract new particles
wk = repmat(1/Ns, 1, Ns);

16 Sep 2013 soheil

soheil (view profile)

Dear Dr. Alvarez,
I am using your Particle Filter code and that is great. Right now, I am changing that to solve my problem. The problem has observation likelihood with more than two dimensions. I was wondering how I can model observation likelihood "p_yk_given_xk". Any idea for that will be really appreciated.

Regards,

Soheil

Comment only
22 Jul 2013 Jesús Lucio

Jesús Lucio (view profile)

Thanks a lot.

20 Jun 2013 SaiNave

SaiNave (view profile)

not helpful it is so complexed :(

Comment only
03 Nov 2012 eddieyang Yang

GOOD

Comment only