@@ -26,6 +26,7 @@ struct SteadyKalmanFilter{NT<:Real, SM<:LinModel} <: StateEstimator{NT}
2626 function SteadyKalmanFilter {NT, SM} (
2727 model:: SM , i_ym, nint_u, nint_ym, Q̂, R̂
2828 ) where {NT<: Real , SM<: LinModel }
29+ nu, ny, nd = model. nu, model. ny, model. nd
2930 nym, nyu = validate_ym (model, i_ym)
3031 As, Cs_u, Cs_y, nint_u, nint_ym = init_estimstoch (model, i_ym, nint_u, nint_ym)
3132 nxs = size (As, 1 )
@@ -34,7 +35,7 @@ struct SteadyKalmanFilter{NT<:Real, SM<:LinModel} <: StateEstimator{NT}
3435 validate_kfcov (nym, nx̂, Q̂, R̂)
3536 K̂ = try
3637 Q̂_kalman = Matrix (Q̂) # Matrix() required for Julia 1.6
37- R̂_kalman = zeros (NT, model . ny, model . ny)
38+ R̂_kalman = zeros (NT, ny, ny)
3839 R̂_kalman[i_ym, i_ym] = R̂
3940 ControlSystemsBase. kalman (Discrete, Â, Ĉ, Q̂_kalman, R̂_kalman)[:, i_ym]
4041 catch my_error
@@ -46,10 +47,10 @@ struct SteadyKalmanFilter{NT<:Real, SM<:LinModel} <: StateEstimator{NT}
4647 rethrow ()
4748 end
4849 end
49- lastu0 = zeros (NT, model . nu)
50+ lastu0 = zeros (NT, nu)
5051 x̂0 = [zeros (NT, model. nx); zeros (NT, nxs)]
5152 Q̂, R̂ = Hermitian (Q̂, :L ), Hermitian (R̂, :L )
52- buffer = StateEstimatorBuffer {NT} (nx̂, nym)
53+ buffer = StateEstimatorBuffer {NT} (nu, nx̂, nym, ny, nd )
5354 return new {NT, SM} (
5455 model,
5556 lastu0, x̂op, f̂op, x̂0,
@@ -241,19 +242,20 @@ struct KalmanFilter{NT<:Real, SM<:LinModel} <: StateEstimator{NT}
241242 function KalmanFilter {NT, SM} (
242243 model:: SM , i_ym, nint_u, nint_ym, P̂_0, Q̂, R̂
243244 ) where {NT<: Real , SM<: LinModel }
245+ nu, ny, nd = model. nu, model. ny, model. nd
244246 nym, nyu = validate_ym (model, i_ym)
245247 As, Cs_u, Cs_y, nint_u, nint_ym = init_estimstoch (model, i_ym, nint_u, nint_ym)
246248 nxs = size (As, 1 )
247249 nx̂ = model. nx + nxs
248250 Â, B̂u, Ĉ, B̂d, D̂d, x̂op, f̂op = augment_model (model, As, Cs_u, Cs_y)
249251 validate_kfcov (nym, nx̂, Q̂, R̂, P̂_0)
250- lastu0 = zeros (NT, model . nu)
252+ lastu0 = zeros (NT, nu)
251253 x̂0 = [zeros (NT, model. nx); zeros (NT, nxs)]
252254 Q̂, R̂ = Hermitian (Q̂, :L ), Hermitian (R̂, :L )
253255 P̂_0 = Hermitian (P̂_0, :L )
254256 P̂ = copy (P̂_0)
255257 K̂, M̂ = zeros (NT, nx̂, nym), zeros (NT, nx̂, nym)
256- buffer = StateEstimatorBuffer {NT} (nx̂, nym)
258+ buffer = StateEstimatorBuffer {NT} (nu, nx̂, nym, ny, nd )
257259 return new {NT, SM} (
258260 model,
259261 lastu0, x̂op, f̂op, x̂0, P̂,
@@ -412,14 +414,15 @@ struct UnscentedKalmanFilter{NT<:Real, SM<:SimModel} <: StateEstimator{NT}
412414 function UnscentedKalmanFilter {NT, SM} (
413415 model:: SM , i_ym, nint_u, nint_ym, P̂_0, Q̂, R̂, α, β, κ
414416 ) where {NT<: Real , SM<: SimModel{NT} }
417+ nu, ny, nd = model. nu, model. ny, model. nd
415418 nym, nyu = validate_ym (model, i_ym)
416419 As, Cs_u, Cs_y, nint_u, nint_ym = init_estimstoch (model, i_ym, nint_u, nint_ym)
417420 nxs = size (As, 1 )
418421 nx̂ = model. nx + nxs
419422 Â, B̂u, Ĉ, B̂d, D̂d, x̂op, f̂op = augment_model (model, As, Cs_u, Cs_y)
420423 validate_kfcov (nym, nx̂, Q̂, R̂, P̂_0)
421424 nσ, γ, m̂, Ŝ = init_ukf (model, nx̂, α, β, κ)
422- lastu0 = zeros (NT, model . nu)
425+ lastu0 = zeros (NT, nu)
423426 x̂0 = [zeros (NT, model. nx); zeros (NT, nxs)]
424427 Q̂, R̂ = Hermitian (Q̂, :L ), Hermitian (R̂, :L )
425428 P̂_0 = Hermitian (P̂_0, :L )
@@ -428,7 +431,7 @@ struct UnscentedKalmanFilter{NT<:Real, SM<:SimModel} <: StateEstimator{NT}
428431 M̂ = Hermitian (zeros (NT, nym, nym), :L )
429432 X̂0, Ŷ0m = zeros (NT, nx̂, nσ), zeros (NT, nym, nσ)
430433 sqrtP̂ = LowerTriangular (zeros (NT, nx̂, nx̂))
431- buffer = StateEstimatorBuffer {NT} (nx̂, nym)
434+ buffer = StateEstimatorBuffer {NT} (nu, nx̂, nym, ny, nd )
432435 return new {NT, SM} (
433436 model,
434437 lastu0, x̂op, f̂op, x̂0, P̂,
@@ -711,21 +714,22 @@ struct ExtendedKalmanFilter{NT<:Real, SM<:SimModel} <: StateEstimator{NT}
711714 function ExtendedKalmanFilter {NT, SM} (
712715 model:: SM , i_ym, nint_u, nint_ym, P̂_0, Q̂, R̂
713716 ) where {NT<: Real , SM<: SimModel }
717+ nu, ny, nd = model. nu, model. ny, model. nd
714718 nym, nyu = validate_ym (model, i_ym)
715719 As, Cs_u, Cs_y, nint_u, nint_ym = init_estimstoch (model, i_ym, nint_u, nint_ym)
716720 nxs = size (As, 1 )
717721 nx̂ = model. nx + nxs
718722 Â, B̂u, Ĉ, B̂d, D̂d, x̂op, f̂op = augment_model (model, As, Cs_u, Cs_y)
719723 validate_kfcov (nym, nx̂, Q̂, R̂, P̂_0)
720- lastu0 = zeros (NT, model . nu)
724+ lastu0 = zeros (NT, nu)
721725 x̂0 = [zeros (NT, model. nx); zeros (NT, nxs)]
722726 P̂_0 = Hermitian (P̂_0, :L )
723727 Q̂ = Hermitian (Q̂, :L )
724728 R̂ = Hermitian (R̂, :L )
725729 P̂ = copy (P̂_0)
726730 K̂, M̂ = zeros (NT, nx̂, nym), zeros (NT, nx̂, nym)
727- F̂_û, Ĥ = zeros (NT, nx̂+ model . nu, nx̂), zeros (NT, model . ny, nx̂)
728- buffer = StateEstimatorBuffer {NT} (nx̂, nym)
731+ F̂_û, Ĥ = zeros (NT, nx̂+ nu, nx̂), zeros (NT, ny, nx̂)
732+ buffer = StateEstimatorBuffer {NT} (nu, nx̂, nym, ny, nd )
729733 return new {NT, SM} (
730734 model,
731735 lastu0, x̂op, f̂op, x̂0, P̂,
0 commit comments