![slide1.JPG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202313/image.jpeg)
二次遅れ系システムに対するフィードフォワード制御波形の導出
16 views (last 30 days)
Show older comments
既知の二次遅れ系の伝達関数を有するシステムの逆関数を求め、目標信号(のこぎり波)に対してフィードフォワード制御信号を導出するプログラムを作成しております。
プログラムとしては、目標波形y(t)と出力波形u(t)の関係をy(t)=u(t)とすべく、目標波形y(t)のラプラス変換Y(s)に二次遅れ系の伝達関数の逆関数1/G(s)を乗じて、逆ラプラス変換するものです。しかし、Y(s)に1/G(S)を乗じた場合と何も乗じない場合(すなわち、元の目標波形の戻る)で逆ラプラス変換の結果(数式)こそ変わるのですが、fplotのグラフが変わりません。この原因がわからず困っております。
ご助力いただけますようよろしくお願いいたします。
T=0.005;
Tr=0.001;
syms t;
U(t)=2*16*triangularPulse(0,Tr,T,t)-16;
aFreq=3330;
K=1;
ext=0.015
sys=tf(K*aFreq^2,[1,2*ext*aFreq,aFreq^2]);
[num,den]=tfdata(sys);
% Convert transfer function to symbolic function
syms s;
sys_sym=poly2sym(cell2mat(num),s)/poly2sym(cell2mat(den),s);
% Generate invert transfer symbolic function
inv_sys_sym=poly2sym(cell2mat(den),s)/poly2sym(cell2mat(num),s);
Y(t)=ilaplace(laplace(U));
inv_Y(t)=ilaplace(laplace(U)*inv_sys_sym);
fplot(Y,[0 T]);
hold on;
fplot(inv_Y,[0 T]);
0 Comments
Answers (3)
Hiroumi Mita
on 1 Feb 2019
伝達関数の逆問題を解ける条件としては
上記の伝達関数sysは厳密にプロパーでなくてはいけないと思います。
上記スクリプトでは
sys =
1.109e07
-----------------------
s^2 + 99.9 s + 1.109e07
ですが、これは厳密にプロパーではありません。そこで
sys=1.109e7*(1e-6*s^2+1e-6*s+1)/( s^2 + 99.9 s + 1.109e07)
とします。これは厳密にプロパーとし、分子の2次と一次の係数の影響を微小にする意図です。
11.09 s^2 + 11.09 s + 1.109e07
------------------------------
s^2 + 99.9 s + 1.109e07
また、スクリプトの最後を少し変えます。
figure(1)
hold on;
fplot(Y,[0 T])
fplot(inv_Y,[0 T])
legend('Y','Inv Y')
hold off
[x1,y1]=fplot(Y,[0 T]);
[x2,y2]=fplot(inv_Y,[0 T]);
添付図を参照すると、この場合は正しく求められます。
![slide1.JPG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202313/image.jpeg)
Hiroumi Mita
on 6 Feb 2019
sys=1.109e7*(1e-6*s^2+1e-6*s+1)/( s^2 + 99.9 s + 1.109e07)
1e-6を順次1e-9,1e-12に変えたときのsysは同じものではありません。
周波数応答を見ると顕著いが現れます。
逆問題では
1/sys=( s^2 + 99.9 s + 1.109e07)/(1.109e7*(1e-6*s^2+1e-6*s+1))
これを扱うことになりますが、分母側を見ると
1.109e7*(1e-6*s^2+1e-6*s+1))->1.109e7*(1e-9*s^2+1e-9*s+1)->1.109e7*(1e-12*s^2+1e-12*s+1)
と変遷するごとに、分母の伝達関数は定数(ゲイン)に近くなります。
そこで、1.109e7*(1e-9*s^2+1e-9*s+1)->1.109e7*(1e-12*s^2+1e-12*s+1)は、低周波領域の特性は、ゲイン=定数、位相=0になり似ています。
しかし、1.109e7*(1e-6*s^2+1e-6*s+1))≒1e1s^2+1e1s+1.109e7
は、2次、1次の項が無視できない大きさなので
1e-6を1e-9,1e-12に変えたものとは大きく異なります。
![bode.PNG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/202904/image.png)
Hiroumi Mita
on 12 Feb 2019
訂正します。厳密にプロパーではないですね。
フィードフォワードのような逆問題が解けるタイプの伝達関数は分母と分子の次数が同じが正です。
さて、MATLABは数値計算機ですので、MATLAB自身が扱える数値の最小値は
eps
ans =
2.2204e-16
です。これより、小さい表現は無意味です。
指数の12を大きくすればするほど、より真値に近いということですが、
これは、以下の係数が小さくなれば、sysは本来のsys1に近くなるので当然です。
sys=1.109e7*(係数*s^2+係数*s+1)/( s^2 + 99.9 s + 1.109e07)
sys1=1.109e7( s^2 + 99.9 s + 1.109e07)
しかし、sysは、sys1を近似した表現で、sysそのものではありません。
或る程度、誤差が乗ることは前提です。係数を1e-300のような、MATLABの数値表現を範囲を超える値に
しても意味がありません。
この方法は、フィードフォワードのような逆問題を解くための近似的手段とご理解ください。
真値を求められる類の問題ではないと思います。
0 Comments
See Also
Categories
Find more on 微積分 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!