график Боде в Дж (нулевая правая полуплоскость, второй порядок)

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

бодеплот[с/100+100/с*(1+10/с)] (ввод в вольфрамальфа)

in J

результаты 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

введите здесь описание изображения

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

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

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

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

угол фазы единичного круга

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

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

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.

Однако этот фазовый_угол[z] имеет больше скачков, чем Arg[z]

plot phase_angle"1 z_unit_circle i.360

третий квадрант

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


person Zhe Hu    schedule 19.12.2012    source источник


Ответы (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)

введите здесь описание изображения

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

person Eelvex    schedule 20.12.2012