首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >J(右半平面0,二阶)的bode图

J(右半平面0,二阶)的bode图
EN

Stack Overflow用户
提问于 2012-12-19 03:36:18
回答 1查看 755关注 0票数 3

在米德尔布鲁克博士的plot方法中研究Ch06的练习6.5时,我试图绘制传递函数的bode图:

bodeplot(1+10/s)

在J中

不知怎么的,J代码的相位图与Mathematica的结果不一致,尽管大小图匹配得很好。

我的J码有什么问题吗?

代码语言:javascript
复制
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度)。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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_anglez比Argz有更多的跳跃。

代码语言:javascript
复制
plot phase_angle"1 z_unit_circle i.360

因此,我的问题是如何在J.中做出正确的波德图,换句话说,知道相位角从第三象限到第二象限,即手前180度。

EN

回答 1

Stack Overflow用户

发布于 2012-12-20 03:02:37

代码语言:javascript
复制
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'__)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13945135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档