Skip to content

Closed-Loop Analysis ​

The Closed-Loop Analysis computes and visualizes the frequency- and time-domain properties of a feedback system by linearizing the model around an operating point. This analysis is useful for assessing stability, robustness, and performance of the closed-loop system.

Method Overview ​

The analysis considers the standard feedback interconnection:

              d             
     ┌─────┐  │  ┌─────┐    
r  e │     │u ▼  │     │ y  
──+─►│  C  ├──+─►│  P  ├─┬─►
  ▲  │     │     │     │ │  
 -│  └─────┘     └─────┘ │  
  │                      │  
  └──────────────────────┘

where C is the controller, P is the plant, r is the reference, d is an input disturbance, y is the measured output, and u is the control input.

The analysis linearizes the model and computes:

  • Closed-loop transfer functions:

    • Sensitivity: S=1/(1+PC). For MIMO systems, the output sensitivity is computed.

    • Complementary sensitivity: T=PC/(1+PC)

    • Controller sensitivity: C/(1+PC)

    • Plant sensitivity: P/(1+PC)

  • Robustness margins:

    • Disk margin (combined gain and phase margin). For MIMO systems, the simultaneous margin at the output is computed.

    • Classical gain and phase margins

  • Step responses to reference and disturbance inputs

Example Definition ​

This example is a continuation of the DC Motor Control tutorial. We will analyze the closed-loop properties of the transfer function from load disturbance (entering at the plant input u) to output y.

dyad
analysis DCMotorClosedLoopAnalysis
  extends DyadControlSystems.ClosedLoopAnalysis(
    measurement   = ["y"],
    control_input = ["u"],
    loop_openings = ["r"],
    wl = 1,
    wu = 1e4,
    num_frequencies = 300,
    pos_feedback = true,
    duration = 2.0
  )
  model = DyadExampleComponents.TestDCMotorLoadControlled()
end
julia
using DyadInterface: artifacts
asol = DCMotorClosedLoopAnalysis()
ClosedLoopAnalysisSolution
Phase margin (disk based): 34.9°
Gain margin (disk based): ["0.5", "1.9"]
julia
using Plots
plot!(artifacts(asol, :all); size=(1200,1200))

Analysis Arguments ​

The following arguments define a ClosedLoopAnalysis:

Required Arguments ​

  • model: The model to be analyzed.

  • measurement::Vector{String}: Name of the measurement signal analysis points (plant outputs).

  • control_input::Vector{String}: Name of the control input signal analysis points.

Optional Arguments ​

  • wl::Real = -1: Lower frequency bound for analysis (set to -1 for automatic selection).

  • wu::Real = -1: Upper frequency bound for analysis (set to -1 for automatic selection).

  • num_frequencies::Int = 300: Number of frequency points.

  • pos_feedback::Bool = true: Whether the feedback is positive (default is true; negative feedback is often built into the model).

  • duration::Real = -1.0: Duration of the step-response simulation (set to -1 for automatic selection).

Artifacts ​

A ClosedLoopAnalysis returns the following artifacts:

Standard Plots ​

  • all: Combined plot showing:
    • Bode plots of S, T, C/(1+PC), P/(1+PC)

    • Disk margin and classical margins

    • Step responses to reference and disturbance steps

Further Reading ​

Notes about MIMO Systems ​

When MIMO systems are analyzed, some sensitivity functions are drawn as Sigma plots rather than Bode plots. The disk margin is in this case computed for the output loop-transfer function Lo=PC, that is, the margin for simultaneous output-perturbations is analyzed. This is generally a conservative analysis. All computed sensitivity functions are computed at the plant output (using the loop-transfer function Lo=PC rather than Li=CP).