1- # # ----------------- Unit tests (no allocation) -----------------------------------------
1+ # # ----------------- Unit tests ------------------ -----------------------------------------
22const UNIT_ESTIM = SUITE[" unit tests" ][" StateEstimator" ]
33
44skf = SteadyKalmanFilter (linmodel)
@@ -27,6 +27,11 @@ UNIT_ESTIM["KalmanFilter"]["updatestate!"] =
2727 updatestate! ($ kf, $ u, $ y, $ d),
2828 setup= preparestate! ($ kf, $ y, $ d),
2929 )
30+ UNIT_ESTIM[" KalmanFilter" ][" evaloutput" ] =
31+ @benchmarkable (
32+ evaloutput ($ kf, $ d),
33+ setup= preparestate! ($ kf, $ y, $ d),
34+ )
3035
3136lo = Luenberger (linmodel, nint_u= [1 , 1 ])
3237UNIT_ESTIM[" Luenberger" ][" preparestate!" ] =
@@ -38,44 +43,110 @@ UNIT_ESTIM["Luenberger"]["updatestate!"] =
3843 updatestate! ($ lo, $ u, $ y, $ d),
3944 setup= preparestate! ($ lo, $ y, $ d),
4045 )
46+ UNIT_ESTIM[" Luenberger" ][" evaloutput" ] =
47+ @benchmarkable (
48+ evaloutput ($ lo, $ d),
49+ setup= preparestate! ($ lo, $ y, $ d),
50+ )
4151
42- im = InternalModel (nonlinmodel)
43- UNIT_ESTIM[" InternalModel" ][" preparestate!" ] =
52+ im_lin = InternalModel (linmodel)
53+ im_nonlin = InternalModel (nonlinmodel)
54+ UNIT_ESTIM[" InternalModel" ][" preparestate!" ][" LinModel" ] =
55+ @benchmarkable (
56+ preparestate! ($ im_lin, $ y, $ d),
57+ )
58+ UNIT_ESTIM[" InternalModel" ][" updatestate!" ][" LinModel" ] =
4459 @benchmarkable (
45- preparestate! ($ im, $ y, $ d),
60+ updatestate! ($ im_lin, $ u, $ y, $ d),
61+ setup= preparestate! ($ im_lin, $ y, $ d),
4662 )
47- UNIT_ESTIM[" InternalModel" ][" updatestate! " ] =
63+ UNIT_ESTIM[" InternalModel" ][" evaloutput " ][ " LinModel " ] =
4864 @benchmarkable (
49- updatestate! ($ im, $ u, $ y, $ d),
50- setup= preparestate! ($ im, $ y, $ d),
65+ evaloutput ($ im_lin, $ d),
66+ setup= preparestate! ($ im_lin, $ y, $ d),
67+ )
68+ UNIT_ESTIM[" InternalModel" ][" preparestate!" ][" NonLinModel" ] =
69+ @benchmarkable (
70+ preparestate! ($ im_nonlin, $ y, $ d),
71+ )
72+ UNIT_ESTIM[" InternalModel" ][" updatestate!" ][" NonLinModel" ] =
73+ @benchmarkable (
74+ updatestate! ($ im_nonlin, $ u, $ y, $ d),
75+ setup= preparestate! ($ im_nonlin, $ y, $ d),
76+ )
77+ UNIT_ESTIM[" InternalModel" ][" evaloutput" ][" NonLinModel" ] =
78+ @benchmarkable (
79+ evaloutput ($ im_nonlin, $ d),
80+ setup= preparestate! ($ im_nonlin, $ y, $ d),
5181 )
5282
53- ukf = UnscentedKalmanFilter (nonlinmodel)
54- UNIT_ESTIM[" UnscentedKalmanFilter" ][" preparestate!" ] =
83+ ukf_lin = UnscentedKalmanFilter (linmodel)
84+ ukf_nonlin = UnscentedKalmanFilter (nonlinmodel)
85+ UNIT_ESTIM[" UnscentedKalmanFilter" ][" preparestate!" ][" LinModel" ] =
5586 @benchmarkable (
56- preparestate! ($ ukf , $ y, $ d),
87+ preparestate! ($ ukf_lin , $ y, $ d),
5788 )
58- UNIT_ESTIM[" UnscentedKalmanFilter" ][" updatestate!" ] =
89+ UNIT_ESTIM[" UnscentedKalmanFilter" ][" updatestate!" ][ " LinModel " ] =
5990 @benchmarkable (
60- updatestate! ($ ukf , $ u, $ y, $ d),
61- setup= preparestate! ($ ukf , $ y, $ d),
91+ updatestate! ($ ukf_lin , $ u, $ y, $ d),
92+ setup= preparestate! ($ ukf_lin , $ y, $ d),
6293 )
63- UNIT_ESTIM[" UnscentedKalmanFilter" ][" evaloutput" ] =
94+ UNIT_ESTIM[" UnscentedKalmanFilter" ][" evaloutput" ][ " LinModel " ] =
6495 @benchmarkable (
65- evaloutput ($ ukf, $ d),
66- setup= preparestate! ($ ukf, $ y, $ d),
96+ evaloutput ($ ukf_lin, $ d),
97+ setup= preparestate! ($ ukf_lin, $ y, $ d),
98+ )
99+ UNIT_ESTIM[" UnscentedKalmanFilter" ][" preparestate!" ][" NonLinModel" ] =
100+ @benchmarkable (
101+ preparestate! ($ ukf_nonlin, $ y, $ d),
102+ )
103+ UNIT_ESTIM[" UnscentedKalmanFilter" ][" updatestate!" ][" NonLinModel" ] =
104+ @benchmarkable (
105+ updatestate! ($ ukf_nonlin, $ u, $ y, $ d),
106+ setup= preparestate! ($ ukf_nonlin, $ y, $ d),
107+ )
108+ UNIT_ESTIM[" UnscentedKalmanFilter" ][" evaloutput" ][" NonLinModel" ] =
109+ @benchmarkable (
110+ evaloutput ($ ukf_nonlin, $ d),
111+ setup= preparestate! ($ ukf_nonlin, $ y, $ d),
67112 )
68113
69- ekf = ExtendedKalmanFilter (linmodel, nint_u= [1 , 1 ], direct= false )
70- UNIT_ESTIM[" ExtendedKalmanFilter" ][" preparestate!" ] =
114+ ekf_lin = ExtendedKalmanFilter (linmodel, nint_u= [1 , 1 ], direct= false )
115+ ekf_nonlin = ExtendedKalmanFilter (nonlinmodel, nint_u= [1 , 1 ], direct= false )
116+ UNIT_ESTIM[" ExtendedKalmanFilter" ][" preparestate!" ][" LinModel" ] =
117+ @benchmarkable (
118+ preparestate! ($ ekf_lin, $ y, $ d),
119+ )
120+ UNIT_ESTIM[" ExtendedKalmanFilter" ][" updatestate!" ][" LinModel" ] =
71121 @benchmarkable (
72- preparestate! ($ ekf, $ y, $ d),
122+ updatestate! ($ ekf_lin, $ u, $ y, $ d),
123+ setup= preparestate! ($ ekf_lin, $ y, $ d),
73124 )
74- UNIT_ESTIM[" ExtendedKalmanFilter" ][" updatestate! " ] =
125+ UNIT_ESTIM[" ExtendedKalmanFilter" ][" evaloutput " ][ " LinModel " ] =
75126 @benchmarkable (
76- updatestate! ( $ ekf, $ u, $ y , $ d),
77- setup= preparestate! ($ ekf , $ y, $ d),
127+ evaloutput ( $ ekf_lin , $ d),
128+ setup= preparestate! ($ ekf_lin , $ y, $ d),
78129 )
130+ UNIT_ESTIM[" ExtendedKalmanFilter" ][" preparestate!" ][" NonLinModel" ] =
131+ @benchmarkable (
132+ preparestate! ($ ekf_nonlin, $ y, $ d),
133+ )
134+ UNIT_ESTIM[" ExtendedKalmanFilter" ][" updatestate!" ][" NonLinModel" ] =
135+ @benchmarkable (
136+ updatestate! ($ ekf_nonlin, $ u, $ y, $ d),
137+ setup= preparestate! ($ ekf_nonlin, $ y, $ d),
138+ )
139+ UNIT_ESTIM[" ExtendedKalmanFilter" ][" evaloutput" ][" NonLinModel" ] =
140+ @benchmarkable (
141+ evaloutput ($ ekf_nonlin, $ d),
142+ setup= preparestate! ($ ekf_nonlin, $ y, $ d),
143+ )
144+
145+ mhe_lin_direct = MovingHorizonEstimator (linmodel, He= 10 , direct= true )
146+ mhe_lin_nondirect = MovingHorizonEstimator (linmodel, He= 10 , direct= false )
147+ mhe_nonlin_direct = MovingHorizonEstimator (nonlinmodel, He= 10 , direct= true )
148+ mhe_nonlin_nondirect = MovingHorizonEstimator (nonlinmodel, He= 10 , direct= false )
149+
79150
80151# # ----------------- Case studies ---------------------------------------------------
81152# TODO : Add case study benchmarks for StateEstimator
0 commit comments