|
margin
|
ゲイン余裕,位相余裕,交差周波数を求める
|
<書式>
{gm,pm,wgc,wpc} = margin(Mg,Ph,w)
Real gm,pm,wgc,wpc; //ゲイン余裕,位相余裕,ゲイン交差周波数,位相交差周波数
Array Mg,Ph,w; //ゲイン,位相,周波数
| |
備考1:bode_tfnなどボード線図の値を出力する関数との組み合わせで使いましょう. 備考2:位相の単位は[deg],角周波数wの単位は[rad/s]です. logspaceを使うと簡単に対数間隔のベクトルがつくれます. 備考3:この関数で出力されるgmは絶対値です.また,gmはデシベル値では ないので,20*log10(gm)で [dB] に直す必要があります. | |
<プログラム例>
/*
一巡伝達関数G(s)H(s)が
1
G(s)H(s)=---------------
s(s+1)(s+2)
となっている直結フィードバックシステムの周波数応答(ボード線図)に
おいて,ゲイン余裕,位相余裕,ゲイン交差周波数,位相交差周波数を求める.
*/
Func void main()
{
Real gm,pm; //ゲイン余裕,位相余裕,
Real wgc,wpc; //ゲイン交差周波数,位相交差周波数
Array Mg,Ph,w; //ゲイン,位相,周波数
Rational g; //伝達関数
Polynomial s; //ラプラス演算子
s=Polynomial("s"); //sを変数宣言
g=1/(s*(s+1)*(s+2)); //伝達関数の定義
w = logspace(-2.0, 3.0); //周波数 0.01〜1000[rad/s] の対数ベクトルを生成
{Mg,Ph,w} = bode_tfn(g,w); //ゲインと位相を求める
{gm,pm,wgc,wpc} = margin(Mg,Ph,w);
printf("ゲイン余裕 :%2.2f [dB] \n",20*log10(gm));
printf("位相余裕 :%2.2f [deg] \n",pm);
printf("ゲイン交差周波数:%2.2f [rad/s] \n",wgc);
printf("位相交差周波数 :%2.2f [rad/s] \n",wpc);
}
| |