3

ミドルブルック博士の 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 で正しいボード線図を作成する方法です。つまり、位相角を知ることは、第 3 象限から第 2 象限になるため、事前に -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 に答える