getPassiveIndex
Compute passivity index of linear system
Syntax
Description
getPassiveIndex
computes various measures of the excess
or shortage of passivity for a given system.
A linear system G(s) is passive if all its I/O trajectories (u(t),y(t)) satisfy:
for all T > 0. Equivalently, a system is passive if its frequency response is positive real, such that for all ω > 0,
(or the discrete-time equivalent).
computes the relative passivity index. R
= getPassiveIndex(G
)G
is passive
when R
is less than one. R
measures the relative excess (R
< 1) or shortage
(R
> 1) of passivity.
For more information about the notion of passivity indices, see About Passivity and Passivity Indices.
computes the input passivity index. The system is input strictly
passive when nu
= getPassiveIndex(G
,'input')nu
> 0.
nu
is also called the input feedforward passivity
(IFP) index. The value of nu
is the minimum
feedforward action such that the resulting system is passive.
For more information about the notion of passivity indices, see About Passivity and Passivity Indices.
computes the output passivity index. The system is output
strictly passive when rho
= getPassiveIndex(G
,'output')rho
> 0.
rho
is also called the output feedback passivity
(OFP) index. The value of rho
is the minimum feedback
action such that the resulting system is passive.
For more information about the notion of passivity indices, see About Passivity and Passivity Indices.
computes the combined I/O passivity index. The system is very
strictly passive when tau
= getPassiveIndex(G
,'io')tau
>
0.
For more information about the notion of passivity indices, see About Passivity and Passivity Indices.
[index,
also returns the frequency at which the returned index value is
achieved.FI
] = getPassiveIndex(___)
Examples
Input Arguments
Output Arguments
Limitations
getPassiveIndex(G,'output')
might return incorrect results when one of the following conditions occurs:G^-1
is improper, that is, has infinite gain ats = Inf
orz = Inf
.G^-1
has poles on the imaginary axis (for continuous-timeG
) or on the unit circle (for discrete-timeG
).
To circumvent this limitation, perturb
G
to have as many zeros as poles and only stable zeros. In the following example,getPassiveIndex
initially returns an incorrect answer forG
.G = tf([1 0],[1 0.2 1]); [rho,freq] = getPassiveIndex(G,'output')
Perturb
G
such that it is bi-proper and has stable zeros.getPassiveIndex
then returns the expected answer.zpk(G+1e-4) [rho,freq] = getPassiveIndex(G+1e-4,'output');
References
[1] Xia, M., P. Gahinet, N. Abroug, C. Buhr, and E. Laroche. “Sector Bounds in Stability Analysis and Control Design.” International Journal of Robust and Nonlinear Control 30, no. 18 (December 2020): 7857–82. https://doi.org/10.1002/rnc.5236.
Version History
Introduced in R2016a