phase margin and associated crossover frequency
[phm,fr] = p_margin(h)
phm=p_margin(h)
:h a SISO linear system (see :syslin). : :phm a number, the phase margin in degree if it exists or an empty
matrix.
:
Given a SISO linear system in continuous or discrete time, p_margin returns phm, the phase margin in degree of h and fr, the achieved corresponding frequency in hz.
The phase margin is the values of the phase at frequency points where the nyquist plot of h crosses the unit circle. In other words the phase margin is the difference between the phase of the frequency response of h and -180° when the gain of h is 1.
The algorithm uses polynomial root finder to solve the equations:
:h(s)*h(-s)=1 for the continuous time case. : :h(z)*h(1/z)=1 for the discrete time case. :
//continuous case
h=`syslin`_('c',-1+%s,3+2*%s+%s^2)
[p,fr]=p_margin(h)
[p,fr]=p_margin(h+0.7)
`show_margins`_(h+0.7,'nyquist')
//discrete case
h = `syslin`_(0.1,0.04798*%z+0.0464,%z^2-1.81*%z+0.9048);//ok
[p ,f]=p_margin(h)
`show_margins`_(h,'nyquist')