Skip to content

Commit 2d96a0c

Browse files
committed
add measurement disturbance option to add_resonant_disturbance function
1 parent c725cf6 commit 2d96a0c

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/model_augmentation.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,17 @@ end
119119
120120
- `Bd`: The disturbance input matrix.
121121
"""
122-
function add_resonant_disturbance(sys::AbstractStateSpace, ω, ζ, Bd::AbstractArray)
122+
function add_resonant_disturbance(sys::AbstractStateSpace, ω, ζ, Bd::AbstractArray; measurement=false)
123123
Ad = [-ζ -float(ω); ω -ζ]
124124
if isdiscrete(sys)
125125
Ad .*= sys.Ts
126126
Ad = exp(Ad)
127127
end
128-
add_disturbance(sys, Ad, [Bd zeros(sys.nx)])
128+
if measurement
129+
add_measurement_disturbance(sys, Ad, Bd)
130+
else
131+
add_disturbance(sys, Ad, [Bd zeros(sys.nx)])
132+
end
129133
end
130134

131135
"""

test/test_augmentation.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,15 @@ Gd = add_resonant_disturbance(G, 1, 0, 1)
8080
allapproxin(a, b) = all(any(a .≈ b', dims=2))
8181
@test allapproxin(poles(Gd), [eigvals(exp([0 -1; 1 0]*0.1)); exp(-1*0.1)])
8282

83+
# Discrete time, input matrix, and measurement disturbance
84+
G = c2d(ss(tf(1.0, [1, 1])), 0.1)
85+
Gd = add_resonant_disturbance(G, 1, 0, [1.0 0.0], measurement=true)
86+
@test sminreal(Gd) == G
87+
@test Gd.nx == 3
88+
allapproxin(a, b) = all(any(a .≈ b', dims=2))
89+
@test allapproxin(poles(Gd), [eigvals(exp([0 -1; 1 0]*0.1)); exp(-1*0.1)])
90+
@test size(Gd.C, 2) == 3 # C matrix extended with disturbance states
91+
8392

8493
##
8594

0 commit comments

Comments
 (0)