2012-12-19 7 views
3

При работе на упражнении 6.5 Ch06 в методе D-OA доктора Миддлебрук, я пытался сделать Боде участок передаточной функции:Боде в J (правая половина плоскости ноль, второго порядка)

bodeplot [s/100 + 100/с * (1 + 10/с)] (вход WolframAlpha)

в J

results from wolframalpha

Каким-то образом фазы кода участок J не согласен с результатом Mathematica, хотя график величины соответствует штрафу.

Что-то не так с моим J-кодом?

Af =: 4 : 0"_ 0 
s=.0j1*y 
'w q'=.x 
f=.(s%w) + (w%s)*(1+w%q*s) 
20*10^. | f 
) 

Pf =: 4 : 0"_ 0 
s=.0j1*y 
'w q'=.x 
f=.(s%w) + (w%s)*(1+w%q*s) 
(180%o.1)* 1{ *. f 
) 

load 'plot' 

plot (; (100 10 Af (10^]))) 0.02*i.200 

plot (; (100 10 Pf (10^]))) 0.02*i.200 

enter image description here

Чтобы быть более общим, скажем, комплексная переменная на единичной окружности в комплексной плоскости г = соз х + I грех х

Если мы наносим ее фазовый угол, там будет скачка на 180 градусов (от 180 до -180)

z_unit_circle =. ((2 o. ]) + (0j1 * (1 o.]))) @ (180 %~ o.) 

plot (180%o.1)*1{"1 *. z_unit_circle i.360 

unit circle phase angle

Я думаю, что это происходит, когда фазовый угол приближается к 180 или -180 в предыдущем графике J bode.

Чтобы избежать этого скачка, мы можем использовать соотношение Tan (Im (z)/Re (z)) = Tan (-180 + Im (z)/Re (z)), т.е. перед рукой.

phase_angle =. _180 + (180 % o.1) * (_3 o. %~/) @ +. 

Pf =: 4 : 0"_ 0 
s=.0j1*y 
'w q'=.x 
f=.(s%w) + (w%s)*(1+w%q*s) 
phase_angle f 
) 

plot (; (100 10 Pf (10^]))) 0.02*i.200 

Это по существу то же, что и ответ, предоставленный Eelvex.

Однако это phase_angle [г] имеет больше прыжков, чем Arg [г]

plot phase_angle"1 z_unit_circle i.360 

third quadrant

Так что мой вопрос заключается в том, чтобы сделать правильный Бод участок в J. Других слов, зная, угол сдвига фаз идет от 3-го квадранта в 2 квадранта, таким образом, -180, прежде чем руки

ответ

1
Don't use Arg (*.), use -180 + arctan(Im(T)/Re(T)) 

plot 180-~(180%o.1) * _3 o. %~/"1 +. T 0j1 * (10^3-~0.1*i.80) 

enter image description here

(где T - ваша передаточная функция: T =: 3 : '(y%100) + (100*(1+10%y))%y')