Computing output passivity index of a simple system using getPassiveIndex

1 view (last 30 days)
I am trying to compute the output passivity index of the system,
by calling
H = tf([1 0],[1 0.2 1]);
[rho,freq] = getPassiveIndex(H,'output')
rho = -Inf
freq = NaN
The results in
rho = -Inf
freq = NaN
However, based on the definition of output passivity index here, I think the value of rho should be 0.2.
If we did
rho = 0.2;
Hc = feedback(H,0.2,+1)
Hc = s ------- s^2 + 1 Continuous-time transfer function.
isPassive(Hc)
ans = logical
1
we get a system that is just passive, and increasing rho any further would result in a closed loop system that is not passive.
Intuitively also, this makes sense. H is the transfer function from force to velocity of a (passive) spring-mass-dashpot system. 0.2 is the damping coefficient, and may be thought of as the surplus passivity that the system has.
I am wondering why getPassiveIndex doesn't return an output passivity index of 0.2, and if I am interpreting something incorrectly.

Accepted Answer

nick
nick on 6 May 2024
Hi Siva,
This is a limitation of the approach used for computation of the "getPassiveIndex". The frequency-domain test used is only valid when "H" has no zero on the imaginary axis or at infinity.
Both conditions are not satisfied here resulting in rho = -Inf. You can add a small feedback to work around this issue and recover the appropriate rho as shown :
[rho,freq] = getPassiveIndex(H+1e-4,'output')
Unrecognized function or variable 'H'.
You may refer to the following MATLAB answer to know more about limitation of "getPassiveIndex" :
Hope this helps.

More Answers (0)

Products


Release

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!