MATLAB allmargin() function return multiple GainMargin, but how to identify them on the Bode plot?

I have a high order discrete transfer function model which has the following form. When I use the allmargin function to get the gain margin, I get the following result:


G_uncoupled = tf(1,[0.25 0.5 0]);
G_uncoupled_d = c2d(G_uncoupled,0.001,'zoh');
D_d = tf([1 -1],[0.001 0],0.001);
H_d = tf([(1 - exp(-10*2*pi*0.001)) 0],[1 -(exp(-10*2*pi*0.001))],0.001);
delay_d = tf(1,[1 0],0.001);

L_uncoupled = (G_uncoupled_d*delay_d^3)/(1 + G_uncoupled_d*D_d*H_d^1*1*delay_d^3);

marginInfo = allmargin(L_uncoupled);


marginInfo =

struct with fields:

GainMargin: [336.0257 9.8081e+05]
GMFrequency: [37.5848 1.7955e+03]
PhaseMargin: [90.0569 84.1254]
PMFrequency: [0.0019 0.6617]
DelayMargin: [8.2179e+05 2.2191e+03]
DMFrequency: [0.0019 0.6617]
Stable: 0



When I plot the bode plot of this transfer function, I get the following graph, from the graph I can see two phase margins, but I only see a gain margin 336.0257(50.5dB) at 37.5 rad. For the second frequency 1.7955e+03, I can't see the gain margin at this frequency from the Bode plot, how did MATLAB get this value or what does this value represent?

• Try right clicking and there should be a menu item along the lines of show->all margins as opposed to show->minimum margin.
• Phase plot crosses 180 deg at multiple frequencies since any odd multiple of 180 deg is also effectively 180 deg.(180, 540, 900, 1260 etc.). The bode plot shown in the question, the phase plot crosses 540 deg apart from the 180 deg crossing. Visually the 540 deg crossing appears to be around $$2\cdot 10^3$$ rad/s.