dstl / Stone-Soup

A software project to provide the target tracking community with a framework for the development and testing of tracking algorithms.
https://stonesoup.rtfd.io
MIT License
403 stars 134 forks source link

Ensemble Square Root Updater #669

Closed 0sm1um closed 2 years ago

0sm1um commented 2 years ago

Here is my implementation of the Ensemble Square Root filter Updater which I presented at last year's Fusion Conference.

A full writeup of the algorithm itself, as well as design philosophy can be found in my paper titled "Implementation of Ensemble Kalman Filters in Stone Soup". The contribution here (in this particular pull request) is specifically a new updater. The predictor of the EnKF and EnSRF are shared, but the EnSRF assimilates measurements without adding noise which typically results in lower sampling error and thus higher accuracy.

One other thing to note. Is that this pull request also fixes issue #668 which caused both the EnsemblePredictor and the predict_measurement method in the EnKF (the latter of which is inherited by the EnSRF).

codecov[bot] commented 2 years ago

Codecov Report

Merging #669 (5bc011d) into main (de83b4e) will increase coverage by 0.01%. The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #669      +/-   ##
==========================================
+ Coverage   94.55%   94.56%   +0.01%     
==========================================
  Files         168      168              
  Lines        8441     8459      +18     
  Branches     1633     1634       +1     
==========================================
+ Hits         7981     7999      +18     
  Misses        343      343              
  Partials      117      117              
Flag Coverage Δ
integration 68.69% <31.03%> (-0.12%) :arrow_down:
unittests 92.06% <100.00%> (+0.01%) :arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
stonesoup/predictor/particle.py 88.00% <ø> (ø)
stonesoup/updater/particle.py 98.76% <ø> (ø)
stonesoup/models/base.py 100.00% <100.00%> (ø)
stonesoup/models/measurement/linear.py 100.00% <100.00%> (ø)
stonesoup/models/measurement/nonlinear.py 98.94% <100.00%> (ø)
stonesoup/models/transition/nonlinear.py 100.00% <100.00%> (ø)
stonesoup/updater/ensemble.py 100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update de83b4e...5bc011d. Read the comment docs.

0sm1um commented 2 years ago

It should be noted that this pull request now includes the changes outlined in the discussion of Issue #668.

This include changes to numerous model classes, as well as the Partifle filter. Currently these changes only affect the Ensemble and Particle filters respectivley.