Margin gives wrong 0db point. (the second crossing of the 0db line not the first)

조회 수: 5 (최근 30일)
Max
Max 2011년 11월 15일
In the code below, brief explanation is:
Some parameters, Transfer function H, Controller C, Plant C*H, and bodeplot, margin
The error is in the last step, were margin provides me the second 0db crossing and not the first. Weird thing is that for a = 1, the (good) result is the first 0db crossing.
K = 450; a=3; m1 = 0.015; m2 = 0.045; M = m1+m2; k = 2200; d = 0.4; s=tf('s'); H = ((m2*(s)^2) + d*s + k )/((s^2)*((m1*m2*(s^2))+(d*M*s)+(k*M))); C = K* (((1/(2*pi*(20/a)))*s+1) / ((1/(2*pi*20*a))*s+1) ); CH = C*H; bodeplot(CH) [Gm,Pm,Wg,Wp] = margin(CH) margin(CH)

답변 (1개)

Craig
Craig 2011년 11월 16일
Hi Max,
The MARGIN command computes the mimimum phase margin, which in the code example you provided does occur for the third 0dB crossover. So the MARGIN command is behaving as expected.
From the help for margin
" ... If there are several crossover points, margin returns the smallest margins (gain margin nearest to 0dB and phase margin nearest to 0 degrees). ... "
If you want all the margins you can use the ALLMARGIN command.
Thanks, -craig

카테고리

Help CenterFile Exchange에서 Frequency-Domain Analysis에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by