在Middlebrook博士D-OA方法的Ch06练习6.5中,我尝试制作传递函数的波特图:
bodeplot [s / 100 + 100 / s *(1 + 10 / s)](输入wolframalpha)
在J
不知何故,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
我认为当早期J波特图中相位角大约为180或-180时会发生这种情况。
为了避免这种跳跃,我们可以利用关系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提供的答案基本相同。
然而,这个phase_angle [z]比Arg [z]
有更多的跳跃plot phase_angle"1 z_unit_circle i.360
所以我的问题是如何在J中制作正确的波特图。换句话说,知道相位角从第三象限变为第二象限,因此在手之前是-180
答案 0 :(得分: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'
)