|
bode_ss
|
連続時間線形系(状態空間表現)のボード線図
|
<書式>
{Mag,Phase,w} = bode_ss(A,B,C,D)
{Mag,Phase,w} = bode_ss(A,B,C,D,iu)
{Mag,Phase,w} = bode_ss(A,B,C,D,iu,w)
Array Mag,Phase; //ゲイン線図,位相線図
Array w; //角周波数
Matrix A,B,C,D; //状態空間表現の4つの行列
Integer iu; //正弦波入力を与える入力番号
| |
備考1:状態空間表現は次のような式であらわされます.
上で用いている記号(x,y,A,B,C,D)と同じです.
.
x = Ax + Bu
y = Cx + Du
備考2:引数iuについて.
複数入力を持つシステムの場合,どの入力に正弦波を入力するか
で結果が変わります.1入力のシステムであれば
iu=1;
としておけば良いです.
備考3:角周波数wの単位は[rad/s]です.
logspaceを使うと簡単に対数間隔のベクトルがつくれます.
| |
<プログラム例>
Func void main()
{
Array Mag,Phase; //ゲイン線図,位相線図
Array w; //角周波数
Matrix A,B,C,D; //状態空間表現の4つの行列
Integer iu; //正弦波入力を与える入力番号
A=[[-1,2][-1,-3]];
B=trans([0,1]);
C=[2,0];
D=[0];
iu=1;
w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
//5000分割したベクトルを生成
{Mag,Phase,w} = bode_ss(A,B,C,D,iu,w);
mgplot_semilogx(1,w,Mag); //ゲイン線図のプロット
mgplot_semilogx(2,w,Phase); //位相線図のプロット
}
| |
|
bode_tf
|
連続時間線形系(伝達関数の係数の対)のボード線図
|
<書式>
{mag,phase,w} = bode_tf(num,den)
{mag,phase,w} = bode_tf(num,den,w)
Array mag,phase; //ゲイン線図,位相線図
Array w; //角周波数
Matrix num,den; //伝達関数の分子,伝達関数の分母
| |
備考1:引数numとdenについて.
伝達関数を分子(numerator)と分母(denominator)にわけています.
num(s)
G(s) = --------
den(s)
numとdenはそれぞれMatrix型になっていて,分子・分母の多項式の係数
を用いて表現します.
例えば伝達関数がつぎのような場合,
このようになります. num=[0,1,d]; den=[a,b,c]; 備考2:角周波数wの単位は[rad/s]です. logspaceを使うと簡単に対数間隔のベクトルがつくれます. 備考3:古いバージョンではバグがあったようです.参考:MaTX-ML Article 411 (02-10-30): bode_tf() について | |
<プログラム例>
/*
伝達関数G(s)= 1/(0.1s+1) からボード線図をプロット
*/
Func void main()
{
Array mag,phase; //ゲイン線図,位相線図
Array w; //角周波数
Matrix num,den; //伝達関数の分子,伝達関数の分母
num=[0,1]; //伝達関数の分子の係数
den=[0.1,1]; //伝達関数の分母の係数
w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
//5000分割したベクトルを生成
{mag,phase,w} = bode_tf(num,den,w);
mgplot_semilogx(1,w,Mag); //ゲイン線図のプロット
mgplot_semilogx(2,w,Phase); //位相線図のプロット
}
| |
|
bode_tfn
|
連続時間線形系(伝達関数)のボード線図
|
<書式>
{mag,phase,w} = bode_tfn(g)
{mag,phase,w} = bode_tfn(g,w)
Array mag,phase; //ゲイン線図,位相線図
Array w; //角周波数
Rational g; //伝達関数
| |
備考1:引数のgは有利多項式型(Rational)の伝達関数です. 定義の仕方などはプログラム例を参考にしてください. 備考2:角周波数wの単位は[rad/s]です. logspaceを使うと簡単に対数間隔のベクトルがつくれます. | |
<プログラム例>
/*
伝達関数G(s)= 1/(0.1s+1) からボード線図を出力
*/
Func void main()
{
Rational g; //伝達関数
Polynomial s; //ラプラス演算子
Array mag,phase; //ゲイン線図,位相線図
Array w; //角周波数
s=Polynomial("s"); //sを変数宣言
g=1/(0.1*s+1); //伝達関数の定義
w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
//5000分割したベクトルを生成
{mag,phase,w} = bode_tfn(g,w);
mgplot_semilogx(1,w,mag); //ゲイン線図のプロット
mgplot_semilogx(2,w,phase); //位相線図のプロット
}
| |
|
bode_tfm
|
連続時間線形系(伝達関数行列)のボード線図
|
<書式>
{mag,phase,w} = bode_tfm(G)
{mag,phase,w} = bode_tfm(G,iu)
{mag,phase,w} = bode_tfm(G,iu,w)
Array mag, phase; //ゲイン線図,位相線図
Integer iu; //正弦波入力を与える入力番号
RaMatrix G; //伝達関数行列
Array w; //周波数
| |
備考1:引数iuについて.
複数入力を持つシステムの場合,どの入力に正弦波を入力するか
で結果が変わります.1入力のシステムであれば
iu=1;
としておけば良いです.
備考2:角周波数wの単位は[rad/s]です.
logspaceを使うと簡単に対数間隔のベクトルがつくれます.
| |
<プログラム例>
Func void main()
{
Rational g1,g2,g3,g4; //伝達関数
RaMatrix G; //伝達関数行列
Polynomial s; //ラプラス演算子
Integer iu; //正弦波入力を与える入力番号
Array mag, phase; //ゲイン線図,位相線図
Array w; //周波数
s=Polynomial("s"); //sを変数宣言
g1=2/(s+1); //伝達関数の定義
g2=3/(s+2);
g3=4/(s+3);
g4=5/(s+4);
G=[[g1,g2][g3,g4]]; //伝達関数行列
print(G);
iu=2;//入力2に正弦波を入力
w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
//5000分割したベクトルを生成
{mag,phase,w} = bode_tfm(G,iu,w);
mgplot_semilogx(1,w,mag); //ゲイン線図のプロット
mgplot_semilogx(2,w,phase); //位相線図のプロット
}
| |
|
bode_plot_ss
|
連続時間線形系(状態空間表現)のボード線図のプロット
|
<書式>
bode_plot_ss(A,B,C,D)
bode_plot_ss(A,B,C,D,iu)
bode_plot_ss(A,B,C,D,iu,w)
Matrix A,B,C,D; //状態空間表現の4つの行列
Integer iu; //正弦波入力を与える入力番号
Array w; //角周波数
| |
備考1:状態空間表現は次のような式であらわされます.
上で用いている記号(x,y,A,B,C,D)と同じです.
.
x = Ax + Bu
y = Cx + Du
備考2:引数iuについて.
複数入力を持つシステムの場合,どの入力に正弦波を入力するか
で結果が変わります.1入力のシステムであれば
iu=1;
としておけば良いです.
備考3:角周波数wの単位は[rad/s]です.
logspaceを使うと簡単に対数間隔のベクトルがつくれます.
| |
<プログラム例>
Func void main()
{
Array w; //角周波数
Matrix A,B,C,D; //状態空間表現の4つの行列
Integer iu; //正弦波入力を与える入力番号
A=[[-1,2][-1,-3]];
B=trans([0,1]);
C=[2,0];
D=[0];
iu=1;
w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
//5000分割したベクトルを生成
bode_plot_ss(A,B,C,D,iu,w); //ボード線図をプロット
}
| |
|
bode_plot_tf
|
連続時間線形系(伝達関数の係数の対)のボード線図のプロット
|
<書式>
bode_plot_tf(num,den)
bode_plot_tf(num,den,w)
Array w; //角周波数
Matrix num,den; //伝達関数の分子,伝達関数の分母
| |
備考1:引数numとdenについて.
伝達関数を分子(numerator)と分母(denominator)にわけています.
num(s)
G(s) = --------
den(s)
numとdenはそれぞれMatrix型になっていて,分子・分母の多項式の係数
を用いて表現します.
例えば伝達関数がつぎのような場合,
このようになります. num=[0,1,d]; den=[a,b,c]; 備考3:角周波数wの単位は[rad/s]です. logspaceを使うと簡単に対数間隔のベクトルがつくれます. | |
<プログラム例>
/*
伝達関数G(s)= 1/(0.1s+1) からボード線図をプロット
*/
Func void main()
{
Array w; //角周波数
Matrix num,den; //伝達関数の分子,伝達関数の分母
num=[0,1]; //伝達関数の分子の係数
den=[0.1,1]; //伝達関数の分母の係数
w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
//5000分割したベクトルを生成
bode_plot_tf(num,den,w); //ボード線図のプロット
}
| |
|
bode_plot_tfn
|
連続時間線形系(伝達関数)のボード線図のプロット
|
<書式>
bode_plot_tfn(g)
bode_plot_tfn(g,w)
Array w; //角周波数
Rational g; //伝達関数
| |
備考1:引数のgは有利多項式型(Rational)の伝達関数です. 定義の仕方などはプログラム例を参考にしてください. 備考2:角周波数wの単位は[rad/s]です. logspaceを使うと簡単に対数間隔のベクトルがつくれます. | |
<プログラム例>
/*
伝達関数G(s)= 1/(0.1s+1) からボード線図を出力
*/
Func void main()
{
Rational g; //伝達関数
Polynomial s; //ラプラス演算子
Array w; //角周波数
s=Polynomial("s"); //sを変数宣言
g=1/(0.1*s+1); //伝達関数の定義
w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
//5000分割したベクトルを生成
bode_plot_tfn(g,w); //線図のプロット
}
| |
|
bode_plot_tfm
|
連続時間線形系(伝達関数行列)のボード線図のプロット
|
<書式>
bode_plot_tfm(G)
bode_plot_tfm(G,iu)
bode_plot_tfm(G,iu,w)
Integer iu; //正弦波入力を与える入力番号
RaMatrix G; //伝達関数行列
Array w; //周波数
| |
備考1:引数iuについて.
複数入力を持つシステムの場合,どの入力に正弦波を入力するか
で結果が変わります.1入力のシステムであれば
iu=1;
としておけば良いです.
備考2:角周波数wの単位は[rad/s]です.
logspaceを使うと簡単に対数間隔のベクトルがつくれます.
| |
<プログラム例>
Func void main23()
{
Rational g1,g2,g3,g4; //伝達関数
RaMatrix G; //伝達関数行列
Polynomial s; //ラプラス演算子
Array w; //周波数
s=Polynomial("s"); //sを変数宣言
g1=2/(s+1); //伝達関数の定義
g2=3/(s+2);
g3=4/(s+3);
g4=5/(s+4);
G=[[g1,g2][g3,g4]]; //伝達関数行列
print(G);
w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
//5000分割したベクトルを生成
bode_plot_tfm(G); //ボード線図のプロット
}
| |