Papers:
Arulampalam et. al. PF Tutorial
Fearnhead's Thesis
Code:
Particle Filter Template: pf_template.m
Particle Filter Support Code:
Code to sample L indexes from M weights resample.m
Code to find optimal pass-through threshold for Fearnhead's optimal p.f. resampling rule find_optimal_c.m
The problem:
We observe that some ideal ballistic "projectile" has been fired at us from some distance R (meters) away from us (we're at 0,0). The initial conditions are unknown (muzzle velocity, angle of fire, distance away etc.). Our task is to determine whether or not it will land within 100 meters of us. What we know: our intelligence agencies have briefed us on the characteristics of our enemies weapons -- you may use this information if you wish: the maximum muzzle velocity of the enemy's weapon is 1000 m/s. The maximum range of the weapon is 10,000 meters.
You are given two types of measurements: one is harder than the other. One dataset consists of angle and range measurements. The angle and range measurements are provided by a particularly noisy measuring device, one that unhelpfully puts Gamma(1,1000) noise on the observed range and Normal(0,.001) noise on the observed angle. These variables are named theta and range.
The other measurement set is absolute x and y position measurements that each have independent Gaussian noise added. These variables are named x and y. The noise in x is distributed N(0,10000) whereas the noise in y is distributed N(0,500).
Data:
3 datasets are provided, 1 known miss, 1 known hit, and one unknown test case. Time is given in seconds, distances in meters, and angles in radians. The timestep is provided as a variable called delta_t.
Miss dataset: Noisy Observations .mat, .txt; Ground Truth .mat,.txt
Hit dataset: Noisy Observations .mat, .txt, Ground Truth .mat, .txt
Unknown dataset: Noisy Observations .mat, .txt, Ground Truth .mat, .txt
The text format is as follows:
The first line is delta time (typically .1sec) and has one column.
Lines 2-5 are x_t, y_t, theta_t, range_t respectively and have as many columns as there are observations.
Frank's solutions:
Kalman filter: kalman_filter.m
Particle filter: particle_filter_solution.m