Use Delayed Feedback to Reduce Oscillations
Use Delayed Feedback to Reduce Oscillations
Time delays can be intentionally added to controllers to improve system performance. The active vibration absorber below can be controlled using delayed state feedback.
{eq1, eq2} = {u[t] + (Subscript[k, 1] + Subscript[k, 2]) Subscript[x, 1][t] - Subscript[k, 2] Subscript[x, 2][t] + (Subscript[b, 1] + Subscript[b, 2]) Derivative[1][Subscript[x, 1]][t] - Subscript[b, 2] Derivative[1][Subscript[x, 2]][t] + Subscript[m, 1]Derivative[2][Subscript[x, 1]][t] == 0, -u[t] + Subscript[k, 2] (-Subscript[x, 1][t] + Subscript[x, 2][t]) + Subscript[b, 2] (-Derivative[1][Subscript[x, 1]][t] + Derivative[1][Subscript[x, 2]][t]) + Subscript[m, 2] Derivative[2][Subscript[x, 2]][t] == 0};absorber = StateSpaceModel[{eq1, eq2}, {Subscript[x, 1][t], Subscript[x, 1]'[t], Subscript[x, 2][t], Subscript[x, 2]'[t]}, {u[t]}, {Subscript[x, 1][t]}, t];csys = SystemsModelStateFeedbackConnect[absorber, {{g SystemsModelDelay[τ]}}, {1}, {1}]The closed-loop vibration absorber has smaller oscillations near the resonant frequency with a delayed controller than with a delay-free controller:
values = {Subscript[k, 2] -> .1, Subscript[b, 2] -> .02, Subscript[m, 2] -> .1, Subscript[m, 1] -> 1, Subscript[b, 1] -> .05, Subscript[k, 1] -> 1, g -> 0.043};ynodelay = OutputResponse[csys /. values /. τ -> 0, Sin[ 1.1 t], {t, 0, 80}];
ydelay = OutputResponse[csys /. values /. τ -> 1.82, Sin[1.1t], {t, 0, 80}];Plot[{ynodelay, ydelay}, {t, 0, 80}, PlotRange -> All, PlotStyle -> {Purple, Thick}, PlotLegends -> {"Delay–Free", "Delayed"}, ImageSize -> Medium]