Skip to content

Commit 6b2d19b

Browse files
committed
changed name of rts_const_deriv to rtsdiff to match all the other pithy little names, and added the analysis notebook I've been using to make plots these last days
1 parent 3f15253 commit 6b2d19b

11 files changed

Lines changed: 762 additions & 21 deletions

docs/source/kalman_smooth.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ kalman_smooth
44
.. automodule:: pynumdiff.kalman_smooth
55
:no-members:
66

7-
.. autofunction:: pynumdiff.kalman_smooth.rts_const_deriv
7+
.. autofunction:: pynumdiff.kalman_smooth.rtsdiff
88
.. autofunction:: pynumdiff.kalman_smooth.constant_velocity
99
.. autofunction:: pynumdiff.kalman_smooth.constant_acceleration
1010
.. autofunction:: pynumdiff.kalman_smooth.constant_jerk

examples/1_basic_tutorial.ipynb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,7 @@
843843
"source": [
844844
"## 5. Kalman smoothing\n",
845845
"\n",
846-
"Here we use the general `rts_const_deriv` function. There are also module functions `constant_velocity`, `constant_acceleration`, and `constant_jerk`, which call the general function, with `order=1`, `2`, or `3`, respectively, and have separate `q` and `r` parameters rather than a `qr_ratio`."
846+
"Here we use the general `rtsdiff` function. There are also module functions `constant_velocity`, `constant_acceleration`, and `constant_jerk`, which call the general function, with `order=1`, `2`, or `3`, respectively, and have separate `q` and `r` parameters rather than a `qr_ratio`."
847847
]
848848
},
849849
{
@@ -871,7 +871,7 @@
871871
}
872872
],
873873
"source": [
874-
"x_hat, dxdt_hat = pynumdiff.kalman_smooth.rts_const_deriv(x, dt, order=2, qr_ratio=1.2e5, forwardbackward=True)\n",
874+
"x_hat, dxdt_hat = pynumdiff.kalman_smooth.rtsdiff(x, dt, order=2, qr_ratio=1.2e5, forwardbackward=True)\n",
875875
"evaluate.plot(x, dt, x_hat, dxdt_hat, x_truth, dxdt_truth)"
876876
]
877877
},

examples/2a_optimizing_parameters_with_dxdt_known.ipynb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
" friedrichsdiff, butterdiff\n",
3939
"from pynumdiff.polynomial_fit import splinediff, polydiff, savgoldiff\n",
4040
"from pynumdiff.total_variation_regularization import tvrdiff, smooth_acceleration\n",
41-
"from pynumdiff.kalman_smooth import rts_const_deriv\n",
41+
"from pynumdiff.kalman_smooth import rtsdiff\n",
4242
"from pynumdiff.linear_model import spectraldiff, lineardiff"
4343
]
4444
},
@@ -595,9 +595,9 @@
595595
}
596596
],
597597
"source": [
598-
"params, val = optimize(rts_const_deriv, x, dt, dxdt_truth=dxdt_truth)\n",
598+
"params, val = optimize(rtsdiff, x, dt, dxdt_truth=dxdt_truth)\n",
599599
"print('Optimal parameters: ', params)\n",
600-
"x_hat, dxdt_hat = rts_const_deriv(x, dt, **params)\n",
600+
"x_hat, dxdt_hat = rtsdiff(x, dt, **params)\n",
601601
"evaluate.plot(x, dt, x_hat, dxdt_hat, x_truth, dxdt_truth)"
602602
]
603603
},

examples/2b_optimizing_parameters_with_dxdt_unknown.ipynb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
" friedrichsdiff, butterdiff\n",
4040
"from pynumdiff.polynomial_fit import splinediff, polydiff, savgoldiff\n",
4141
"from pynumdiff.total_variation_regularization import tvrdiff, smooth_acceleration\n",
42-
"from pynumdiff.kalman_smooth import rts_const_deriv\n",
42+
"from pynumdiff.kalman_smooth import rtsdiff\n",
4343
"from pynumdiff.linear_model import spectraldiff, lineardiff"
4444
]
4545
},
@@ -626,9 +626,9 @@
626626
}
627627
],
628628
"source": [
629-
"params, val = optimize(rts_const_deriv, x, dt, tvgamma=tvgamma)\n",
629+
"params, val = optimize(rtsdiff, x, dt, tvgamma=tvgamma)\n",
630630
"print('Optimal parameters: ', params)\n",
631-
"x_hat, dxdt_hat = rts_const_deriv(x, dt, **params)\n",
631+
"x_hat, dxdt_hat = rtsdiff(x, dt, **params)\n",
632632
"evaluate.plot(x, dt, x_hat, dxdt_hat, x_truth, dxdt_truth)"
633633
]
634634
},

examples/3_automatic_method_suggestion.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@
165165
"name": "stdout",
166166
"output_type": "stream",
167167
"text": [
168-
"Best method: rts_const_deriv with params: {'qr_ratio': np.float64(212.5), 'forwardbackward': True, 'order': 1}\n",
168+
"Best method: rtsdiff with params: {'qr_ratio': np.float64(212.5), 'forwardbackward': True, 'order': 1}\n",
169169
"RMS error in velocity: 0.732788003100273\n",
170170
"Error correlation: 0.0087737054466213\n"
171171
]

examples/4_performance_analysis.ipynb

Lines changed: 741 additions & 0 deletions
Large diffs are not rendered by default.

pynumdiff/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
- `kalman_smooth` contains classic linear Kalman filter and RTS smoothing code, as well as a constant-derivative naive-model smoothing method for 1st (velocity), 2nd (acceleration), or 3rd (jerk) order.
33
- `linear_model` contains `lineardiff`, which tries to fit a linear model on a sliding window, and `spectraldiff`, based on Fourier transforms.
44
- `optimize` contains code to find best parameter settings for methods, tuned using Nelder-Mead according to the paper "Numerical differentiation of noisy data: A unifying multi-objective optimization framework", as well as a method suggestion metamethod.
5-
- `polynomial_fit` contains `splinediff`, `polydiff`, and `savgoldiff`, which all explicitly or implicitly fit polynomials over pieces of the data.
5+
- `polynomial_fit` contains methods which explicitly or implicitly fit polynomials over pieces of the data.
66
- `smooth_finite_difference` contains methods which do a smoothing step followed by simple finite difference.
77
- `tests` contains `pytest` unit tests of
88
1. all the differentiation methods, checking their results against a suite of known analytic functions (including an ability to plot if the `--plot` command is passed to `pytest`, see `conftest.py`)

pynumdiff/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
from .smooth_finite_difference import meandiff, mediandiff, gaussiandiff, friedrichsdiff, butterdiff
77
from .polynomial_fit import splinediff, polydiff, savgoldiff
88
from .total_variation_regularization import tvrdiff, velocity, acceleration, jerk, iterative_velocity, smooth_acceleration, jerk_sliding
9-
from .kalman_smooth import rts_const_deriv, constant_velocity, constant_acceleration, constant_jerk, known_dynamics
9+
from .kalman_smooth import rtsdiff, constant_velocity, constant_acceleration, constant_jerk, known_dynamics
1010
from .linear_model import spectraldiff, lineardiff
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""This module implements Kalman filters
22
"""
3-
from ._kalman_smooth import rts_const_deriv, constant_velocity, constant_acceleration, constant_jerk, known_dynamics
3+
from ._kalman_smooth import rtsdiff, constant_velocity, constant_acceleration, constant_jerk, known_dynamics

pynumdiff/kalman_smooth/_kalman_smooth.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ def _RTS_smooth(xhat0, P0, y, A, C, Q, R, u=None, B=None):
8080
#########################################
8181
# Constant 1st, 2nd, and 3rd derivative #
8282
#########################################
83-
def rts_const_deriv(x, dt, order, qr_ratio, forwardbackward):
84-
"""Perform Rauch-Tung-Striebel smoothing with a constant derivative model. Other constant derivative
83+
def rtsdiff(x, dt, order, qr_ratio, forwardbackward):
84+
"""Perform Rauch-Tung-Striebel smoothing with a naive constant derivative model. Other constant derivative
8585
methods in this module call this function.
8686
8787
:param np.array[float] x: data series to differentiate
@@ -176,7 +176,7 @@ def constant_velocity(x, dt, params=None, options=None, r=None, q=None, forwardb
176176
elif r == None or q == None:
177177
raise ValueError("`q` and `r` must be given.")
178178

179-
return rts_const_deriv(x, dt, 1, q/r, forwardbackward)
179+
return rtsdiff(x, dt, 1, q/r, forwardbackward)
180180

181181

182182
def constant_acceleration(x, dt, params=None, options=None, r=None, q=None, forwardbackward=True):
@@ -205,7 +205,7 @@ def constant_acceleration(x, dt, params=None, options=None, r=None, q=None, forw
205205
elif r == None or q == None:
206206
raise ValueError("`q` and `r` must be given.")
207207

208-
return rts_const_deriv(x, dt, 2, q/r, forwardbackward)
208+
return rtsdiff(x, dt, 2, q/r, forwardbackward)
209209

210210

211211
def constant_jerk(x, dt, params=None, options=None, r=None, q=None, forwardbackward=True):
@@ -234,7 +234,7 @@ def constant_jerk(x, dt, params=None, options=None, r=None, q=None, forwardbackw
234234
elif r == None or q == None:
235235
raise ValueError("`q` and `r` must be given.")
236236

237-
return rts_const_deriv(x, dt, 3, q/r, forwardbackward)
237+
return rtsdiff(x, dt, 3, q/r, forwardbackward)
238238

239239

240240
def known_dynamics(x, params, u=None, options=None, xhat0=None, P0=None, A=None,

0 commit comments

Comments
 (0)