3

在使用 Dr. Middlebrook 的 D-OA 方法进行Ch06的练习 6.5 时,我尝试制作传递函数的波特图:

bodeplot[s/100+100/s*(1+10/s)] (输入到 wolframalpha)

在 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

单位圆相位角

我认为这就是早期 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

4

1 回答 1

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':)

于 2012-12-20T03:02:37.833 回答