• 検索結果がありません。

システム工学実験 パラメータ推定手順

N/A
N/A
Protected

Academic year: 2021

シェア "システム工学実験 パラメータ推定手順"

Copied!
33
0
0

読み込み中.... (全文を見る)

全文

(1)

システム工学実験

パラメータ推定手順

(2)

アウトライン

1. 線形システムと周波数情報

2. パラメータ推定

3. 実際の手順

(3)

線形時不変システムと伝達関数

入力と出力の関係が線形な定係数微分方程式で与えられるとき,

この方程式を線形時不変システムという

Laplace 変換:

(4)

周波数領域での入出力表現

伝達関数

初期値応答

入力

出力

 入出力関係は,

伝達関数

で記述される

(5)

伝達関数から分かる情報

• 安定性

: (有理)伝達関数の極の実部が負ならば,安定

入力がない場合,任意の初期値に対して出力がゼロになる

• 周波数情報

(安定な場合)

-50 -40 -30 -20 -10 0 10 ゲ イ ン ( dB ) 10-2 10-1 100 101 102 103 -90 -45 0 位相 (deg ) ボード線図

Bode 線図(ゲインと位相の対数グラフ)

ゲイン

位相:

高周波数では

入力信号が抑制されている

高周波数では

位相が遅れる

num=[5];

den=[1 2];

G=tf(num,den);

w=10.^[-2:0.1:3];

bode(G,omega)

(6)

線形システムの特徴

• 入出力関係の周波数は同じ

• 線形システムは重ね合わせの原理が成り立つ

• 安定な線形システムならば

,周波数情報からシステムが推定

できる

【安定な場合】

(7)

アウトライン

1. 線形システムと周波数情報

2. パラメータ推定

(8)

-50 -40 -30 -20 -10 0 10 ゲ イ ン ( dB ) 10-2 10-1 100 101 102 103 -90 -45 0 位相 (deg ) ボード線図 周波数 (rad/s)

周波数情報から線形システムの復元

周波数応答から線形システムを作る

入出力関係の周波数情報は,安定なシステムでなければならない

(9)

0 1 2 3 4 5 6 7 8 9 10 0 0.5 1 1.5 2 2.5x 10 4 0 1 2 3 4 5 6 7 8 9 10 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

安定限界,不安定なシステムの挙動

安定限界

: 外部入力がない場合に,初期値応答でゼロにならない方程式

不安定

: 外部入力がない場合に,初期値が厳密にゼロでないかぎり発散する

説明

(定義は講義(線形制御論など)を参照)

外部入力をゼロにする

外部入力をゼロにする

解:

解:

初期値を振幅として振動

初期値から指数関数的に発散

(10)

周波数応答

(11)

パラメータ推定

制御しながら

システムのパラメータを推定する

(12)

閉ループ系と伝達関数

が分かれば,

P(s)

も分かる

閉ループ系の周波数情報を求めればよい

実験から求める

(13)

閉ループ系の実験データ

-2 0 2 4 10-6 10-4 10-2 100 102

Bode gain

-1.5 -1 -0.5 0 0.5 -0.5 0 0.5 1 1.5

Nyquist

制御器を

試行錯誤で作成し,

データを取る!

(14)

アウトライン

1. 線形システムと周波数情報

2. パラメータ推定

3. 実際の手順

1. データの前処理

2. パラメータ推定: 分子多項式係数

3. パラメータ推定: 分母多項式係数

(15)

閉ループ系の伝達関数

(16)

伝達関数から分かること

• ゼロ点

で出力がゼロになる

• 高周波数領域

: ゲインが

入力に正弦波を入れたときの出力の性質

実験データ

他のパラメータは

最適化問題として解く(後述)

(17)

データの前処理

1. まずは,データの理解

• 実験から得なければならないのは,閉ループ系の伝達関数

• 実際に得られるのは入出力データの時系列

⇒ 信号処理で伝達関数のデータへ変換したものをデータ保存

2. 使えるデータの整理

• 雑音や非線形摩擦の項が強いデータは避ける

• 周波数情報

をうまく使う(関数の正則性など)

(18)

データの理解

• 実験で得るデータは,入出力データではない

• 入出力データを集めると,計算機のメモリが足りなくなる

⇒ 他のデータを収集する

出力の

整理

を求めればよい

(19)

制御器と実験データ

-2 0 2 4 10-6 10-4 10-2 100 102

Bode gain

-1.5 -1 -0.5 0 0.5 -0.5 0 0.5 1 1.5

Nyquist

の下で,次のデータを得る

(20)

ゲインと位相の注意

• arctan は,sinとcosの符号まで考えれば,360度分

Bode 位相線図は描けない

• Nyquist線図は描ける

⇒ 位相の特徴は,

Nyquist 線図で確認

する

10

-6

10

-4

10

-2

10

0

10

2

Bode gain

-0.5

0

0.5

1

1.5

Nyquist

共に滑らかなので,よいデータ

(21)

使えるデータの整理

• データは多い方がよい(40個前後のデータは少ない)

• データには信頼性の低いものも得られてしまう

⇒ データを整理する

• 周波数情報(Bode線図,Nyquist 線図を見る)

10

-2

10

0

10

2

10

4

10

-6

10

-4

10

-2

10

0

10

2

Bode gain

-1.5

-1

-0.5

0

0.5

-0.5

0

0.5

1

1.5

Nyquist

変化の激しい箇所の情報が欲しい

全体的にもデータを増やしたい

(22)

別の実験データ

10-2 100 102 104 10-6 10-4 10-2 100 102

Bode gain

-1.5 -1 -0.5 0 0.5 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 1.4

Nyquist

周波数を変えて実験

(角周波数を 10^[-1:3] の間をランダムに41点)

ゲインは合っているように見えるが,位相が怪しい

まあまあ良さそうなデータ

データ整理

(23)

プログラム例

load('data_struct20141003p1i1.mat');

% ランダムに選んだ周波数点

P2=data_struct.P;

omega2=data_struct.omega;

clear data_struct

for k=1:length(omega2)

gain2(k) = sqrt(P2(2*k)^2 + P2(2*k-1)^2);

phase2(k) = atan2(P2(2*k), P2(2*k-1));

end

Gcl=gain2.*exp(1i*phase2);

figure

subplot(1,2,1)

loglog(omega2,gain2,'b+');

title('Bode gain','fontsize',16)

subplot(1,2,2)

plot(real(Gcl),imag(Gcl),'b*');

title('Nyquist','fontsize',16)

10-2 100 102 104 10-6 10-4 10-2 100 102

Bode gain

-1.5 -1 -0.5 0 0.5 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 1.4

Nyquist

これでデータを確認

(24)

プログラム例

Ns = find(gain<0.5);% gain が 0.5以上のデータがあやしいので,それ以外を用意

figure

subplot(1,2,1)

loglog(omega2(Ns),gain2(Ns),'b+');

title('Bode gain2’,’fontsize’,16)

subplot(1,2,2)

plot(real(Gcl(Ns)),imag(Gcl(Ns)),'b*');

title('Nyquist','fontsize',16)

前のページに続けて書く

(不要な部分以外のデータ抽出)

100 101 102 103 10-5 10-4 10-3 10-2 10-1 100

Bode gain

-0.4 -0.3 -0.2 -0.1 0 0.1 -0.05 -0.04 -0.03 -0.02 -0.01 0 0.01

Nyquist

気になるならば,この辺りも削除する.

桁は小さいので,ここでは気にしない.

(25)

ゼロ点付近のデータ

101.1 101.3 101.5 10-3 10-2 10-1

Bode gain

-0.06 -0.04 -0.02 0 -0.04 -0.03 -0.02 -0.01 0 0.01 0.02

Nyquist

ゼロ点付近を細かく実験

(角周波数を 10^[-1:3] の間をランダムに41点)

微妙だが,

大きく外れてないので今回は使う

最小値付近の2点の中間くらいの角周波数を選ぶ

※ 最小値の角周波数を選ばない

(26)

データをマージする

for k=1:length(omega1) gain1(k) = sqrt(P1(2*k)^2 + P1(2*k-1)^2); phase1(k) = atan2(P1(2*k), P1(2*k-1)); end for k=1:length(omega2) gain2(k) = sqrt(P2(2*k)^2 + P2(2*k-1)^2); phase2(k) = atan2(P2(2*k), P2(2*k-1)); end Ns = find(gain2<0.5);% gain が 0.5以上のデータがあやしいので,それ以外を用意 for k=1:length(omega3) gain3(k) = sqrt(P3(2*k)^2 + P3(2*k-1)^2); phase3(k) = atan2(P3(2*k), P3(2*k-1)); end % データのマージ

gain=[gain1, gain2(Ns), gain3];

phase=[phase1, phase2(Ns), phase3]; omega = [omega1, omega2(Ns), omega3]; % 図で確認 figure subplot(2,1,1) loglog(omega,gain,'b+'); title('Bode gain','fontsize',16) subplot(2,1,2) plot(real(Gcl),imag(Gcl),'b*'); title('Nyquist','fontsize',16) data = struct('omega',omega,'gain',gain,'phase',phase); 10-1 100 101 102 103 10-5 10-4 10-3 10-2 10-1 100 101

Bode gain

-0.2 0 0.2 0.4 0.6 0.8 1 1.2 1.4

Nyquist

周波数,ゲイン,位相の

データをそろえる

(27)

アウトライン

1. 線形システムと周波数情報

2. パラメータ推定

3. 実際の手順

1. データの前処理

2. パラメータ推定: 分子多項式係数

3. パラメータ推定: 分母多項式係数

(28)

高周波数領域

• 得られているデータは,高周波数領域では信頼できそう

10-1 100 101 102 103 10-5 10-4 10-3 10-2 10-1 100 101

Bode gain

高周波数領域のデータから

線形回帰でパラメータを求める

※ 高周波数領域は目視で決める

Nf= find(omega>10^1.4)

b2=10^(mean(log10((omega(Nf).^2).*gain(Nf))))

(29)

得られたパラメータの妥当性

10-1 100 101 102 103 10-5 10-4 10-3 10-2 10-1 100 101

Bode gain

figure

loglog(omega,gain,'b+');

title('Bode gain','fontsize',16)

hold on

Nf= find(omega>10^(1.4))

b2=10^(mean(log10((omega(Nf).^2).*gain(Nf))))

omega0=21.135;

b1=(omega0^2) * b2;

loglog(omega(Nf),(b2./(omega(Nf).^2)),'r+');

ほとんど重なっているので,OK!

線形回帰問題は最適化問題なので,得られたパラメータは最小二乗誤差の意味で最適.

ただ,問題設定(高周波領域の設定やデータの選別)が悪いと,意味がない.

(30)

アウトライン

1. 線形システムと周波数情報

2. パラメータ推定

3. 実際の手順

1. データの前処理

2. パラメータ推定: 分子多項式係数

3. パラメータ推定: 分母多項式係数

(31)

分母多項式のパラメータ推定

• 非線形最適化問題になるので,要注意

• 求めるアルゴリズムは何でもよいが,得られる閉ループ伝達

関数は安定でなければならない.

• 不安定な極が出る場合はペナルティを課す

• データは1組の制御ゲイン(Kp,Ki) = (1,1) だが,実際には他のゲイン

の組でも安定化できる

⇒ ペナルティとして利用できる

(32)

コスト関数

function Y = cost_function(x,b1,b2,omega,G_data,Kp,Ki) a1=x(1);

a2=x(2); a3=x(3);

G = tf([Kp*b2, Ki*b2, Kp*b1, Ki*b1],[1, a3, (a2 + Kp*b2), (a1 + Ki*b2), Kp*b1, Ki*b1]); [gain_est,phase_est] = bode(G,omega);

gain_est = squeeze(gain_est)';

phase_est = squeeze(phase_est)’/180*pi;% radに変換

G_est=gain_est.*exp(1i*phase_est);

Y1 = norm(log( abs(G_data - G_est) + 1 ) );% 近さ

pole_max = max(real(pole(G)));% 極の実部の最大値が負でなければならない

Kp = 10; Ki=10; % 別のゲインでも極の実部の最大値が負でなければならない

G = tf([Kp*b2, Ki*b2, Kp*b1, Ki*b1],[1, a3, (a2 + Kp*b2), (a1 + Ki*b2), Kp*b1, Ki*b1]); pole_max2 = max(real(pole(G))); if (pole_max >= 0) || (pole_max2 >= 0) Y = Y1 + 10^10; else Y=Y1;

これを最小化する

 Nyquist 平面における近さを考える

 ゲインと位相を両方評価

 log で測っているので,引数が1のとき最小

コスト関数は色々工夫してみる

• ゲインを最大にする

• ステップ応答に合うようにする

不安定になったらペナルティ

※ rad ではなく,deg なので注意

(33)

プログラム例

• 最小化はMatlab のツールボックスを利用

(自分で作ってもよいが最適化の授業ではないので...)

• 局所最適値になることを避けるため,初期値を色々変えて行

• プログラム例:下記リンク参照

http://www.bode.amp.i.kyoto-u.ac.jp/member/ohki/lec/system_experiment/documents/parameter_estimation_example.pdf

参照

関連したドキュメント

(2)

・電源投入直後の MPIO は出力状態に設定されているため全ての S/PDIF 信号を入力する前に MPSEL レジスタで MPIO を入力状態に設定する必要がある。MPSEL

把握率 全電源のCO 2 排出係数 0.505. (火力発電のCO 2

(火力発電のCO 2 排出係数) - 調整後CO 2 排出係数 0.521 全電源のCO 2 排出係数

理由:ボイラー MCR範囲内の 定格出力超過出 力は技術評価に て問題なしと確 認 済 み で あ る が、複数の火力

Dual I/O リードコマンドは、SI/SIO0、SO/SIO1 のピン機能が入出力に切り替わり、アドレス入力 とデータ出力の両方を x2

 本資料は、宮城県に所在する税関官署で輸出通関又は輸入通関された貨物を、品目別・地域(国)別に、数量・金額等を集計して作成したもので

②出力制御ユニット等