Skip to content

Closed-Loop Sensitivity Analysis

The Closed-Loop Sensitivity Analysis computes and visualizes the sensitivity function S=1/(1+PC) at one or several specified analysis points in a feedback system. This is useful for assessing the robustness of the closed-loop system to disturbances and model uncertainties.

Method Overview

The sensitivity function S(s) is the fundamental closed-loop transfer function. In the block diagram


         │e₁
         │  ┌─────┐
d₁────+──┴──►  P  ├─────┬──►e₄
      │     └─────┘    y│
      │u                │
      │     ┌─────┐    -│
 e₂◄──┴─────┤  C  ◄──┬──+───d₂
            └─────┘  │
                     │e₃

performing a sensitivity analysis at the analysis point y computes the output sensitivity function So=1/(1+PC) which is the transfer function between d₂ and e₃, while an analysis in the analysis point u computes the input sensitivity function Si=1/(1+CP), which is the transfer function between d₁ and e₁. For SISO systems, So=Si. The relationship between the sensitivity function and the complementary sensitivity T function is given by S+T=I.

This analysis linearizes the model and computes the sensitivity function at the specified analysis point or points, optionally breaking feedback loops as needed.

The peak value of |S(iω)| (the H norm) is related to classical robustness margins such as gain and phase margin. The margin bounds derived from this peak are shown in the Bode plot legend.

Example Definition

This example is a continuation of the DC Motor Control tutorial. We will analyze the sensitivity function S(s) at the plant output y.

dyad
analysis DCMotorClosedLoopSensitivityAnalysis
  extends DyadControlSystems.ClosedLoopSensitivityAnalysis(
    analysis_points = ["y"],
    wl = 1,
    wu = 1e4
  )
  model = DyadExampleComponents.TestDCMotorLoadControlled()
end
julia
using DyadInterface: artifacts
using Plots
asol = DCMotorClosedLoopSensitivityAnalysis()
fig = artifacts(asol, :BodePlot)
plot!(legend = :bottomright)

Analysis Arguments

The following arguments define a ClosedLoopSensitivityAnalysis:

Required Arguments

  • model: The model to be analyzed.

  • analysis_points::Vector{String}: Name of the analysis points where sensitivity is computed.

Optional Arguments

  • loop_openings::Vector{String} = []: Names of loop openings to break feedback if present.

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

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

Artifacts

A ClosedLoopSensitivityAnalysis returns the following artifact:

Standard Plot

  • BodePlot: Bode plot of the closed-loop sensitivity function S(s). The plot includes the H norm (maximum value), and the corresponding minimum gain and phase margins. For MIMO analysis, the plot shows the singular values of the sensitivity function as a function of frequency.

Further Reading