Main Content

非線形プラントの周波数応答のオンライン推定

この例では、Frequency Response Estimator ブロックを使用してプラントの周波数応答のオンライン推定を実行する方法を説明します。非線形プラントの場合、異なる定格操作点での推定により、さまざまな周波数応答が得られます。

周波数応答のリアルタイムの推定

"周波数応答" は、正弦波入力信号に対するシステムの定常状態応答を表します。システムが線形の $G$($s$) の場合、出力信号は異なる振幅と位相シフトをもつ同じ周波数の正弦波です。複数の周波数での周波数応答情報が保存された周波数応答データ (frd) モデルは、プラント ダイナミクスの解析、線形化結果の検証、制御システムの設計、パラメトリック モデルの推定などのタスクに役立ちます。

Simulink® 環境で frd モデルを取得するにはいくつか異なった方法があります。最も一般的な方法は、Simulink モデルを線形化し、取得した状態空間システムから周波数応答を直接計算することです。Simulink モデルが線形化できない場合は、frestimate コマンドまたはモデル線形化器アプリを使用して、摂動信号を使ったシミュレーションを実行できます。その後、収集した実験データに基づいてプラントの周波数応答をオフラインで推定します。この方法は "オフライン推定" と呼ばれます。

この例では、これに代わる "オンライン推定" の手法を説明します。Frequency Response Estimator ブロックを使用して実験を行い、シミュレーション中に周波数応答を推定します。この例では Simulink でモデル化されたプラントを使用しますが、Simulink にプラント モデルがない場合は、ブロックをターゲット システムに展開し、物理プラントに対しリアルタイムで周波数応答の推定を行うことも可能です。詳細については、周波数応答のオンライン推定の基礎を参照してください。

非線形プラント モデル

この例では安定した非線形 SISO プラントを使用します。プラントには 2 つの状態があります。モデルを平衡化して、プラント出力がゼロである最初の定常状態操作点を見つけます。

plantMDL = 'scdfrePlant';
y0 = 0;
op = operspec(plantMDL);
op.Outputs.Known = true;
op.Outputs.y = y0;
options = findopOptions('DisplayReport','off');
[op_point, op_report] = findop(plantMDL,op,options);
x0 = [op_report.States(1).x;op_report.States(2).x];
y0 = op_report.Outputs.y;
u0 = op_report.Inputs.u;

この例の目標の 1 つは、0.1 ~ 10 rad/s のプラント周波数応答を、プラント出力が 0.5 と -0.5 である他の 2 つの定常状態操作点で取得することです。プラントをこれらの操作点に近づけるため、離散 PID コントローラーを最初の操作点で設計します。コントローラーのサンプル時間には 0.01 秒、開ループ帯域幅には 20 rad/s を使用します。

Ts = 0.01;
G0 = c2d(linearize(plantMDL,op_point),Ts);
c = pidtune(G0,'pidf',20);

sinestream モードを使用したオンライン推定

モデル scdfreSinestream には、コントローラー c を使用する PID 制御ループ内のプラントが含まれます。また、[制御動作 + 摂動] 出力構成に Frequency Response Estimator ブロックを含んでいます。この構成では、ブロックをコントローラーとプラントの間の制御ループに挿入します。

mdlSS = 'scdfreSinestream';
open_system(mdlSS);

start/stop 信号を使用してオンライン推定実験の開始と終了ができます。ブロックがアイドル状態の場合、制御信号は変更なしでブロックを通過します。

実験中は、[実験モード][Sinestream] の場合、ブロックは最低周波数から最高周波数まで 1 周波数ずつ、プラントに正弦波信号を挿入します。[重ね合わせ] モードに比べて sinestream の実験の方が割り込みが少なく、正確です。ただし、実験の実施にずっと長い時間を要します。

この例では、モデルの正確な線形化を取得できます。したがって、これをブロックのベースラインに使用して、これを "真" として実行時に推定結果を直接比較することが可能です。プラント出力が 0.5 である定常状態の操作点を見つけ、この操作点で線形化を行って G1 を取得します。

op.Outputs.y = 0.5;
op_point = findop(plantMDL,op,options);
G1 = c2d(linearize(plantMDL,op_point),Ts);

ボード線図のベースラインとしてモデル G1 を使用するようにブロックを構成します。

set_param([mdlSS,'/Frequency Response Estimator'], 'BaselinePlant', 'G1');

実験は PID コントローラーがプラントを新しい操作点 (y = 0.5) に移動させてから 10 秒後に開始されます。実験が開始すると、PID コントローラーは挿入される正弦波 (実質的には負荷外乱) を抑制しようとします。したがって、コントローラーによってプラントが実験中に定格操作点からあまり離れすぎないようになり、推定結果に対するプラントの非線形性の影響が緩和されます。モデルをシミュレートして、推定された応答が実験中どのように変化するかをボード線図で観察します。推定結果はベースラインと非常によく一致します。

sim(mdlSS);
figSS = gcf;
hold on;

重ね合わせモードを使用したオンライン推定

もう 1 つのモデル scdfreSuperposition を開きます。このモデルでは、Frequency Response Estimator ブロックが [摂動のみ] の出力用に構成されています。この構成では、ブロックを制御ループの外に配置することができます。ブロックがアイドル状態の場合、Sum ブロックに入る摂動信号は 0 なので、ループに影響はありません。

mdlSP = 'scdfreSuperposition';
open_system(mdlSP);

このモデルには同じプラントとコントローラーがあります。ただし、このモデルの Frequency Response Estimator ブロックは [重ね合わせ] 実験モードを使用するように構成されています。このモードでは、すべての正弦波が加算されてプラントに同時に挿入されます。sinestream モードの実験と比べ、重ね合わせモードの実験はずっと高速です (低周波数をターゲットとする場合は特に)。

プラント出力が -0.5 である定常状態の操作点を見つけます。プラントを線形化して、この操作点でのベースライン応答 (G2) を見つけます。

op.Outputs.y = -0.5;
op_point = findop(plantMDL,op,options);
G2 = c2d(linearize(plantMDL,op_point),Ts);

ボード線図のベースラインとしてモデル G2 を使用するようにブロックを構成します。

set_param([mdlSP,'/Frequency Response Estimator'], 'BaselinePlant', 'G2');

実験は、PID コントローラーがプラントを新しい操作点 (y = -0.5) に移動させてから 10 秒後に開始されます。推奨される実験の長さは 377 秒であり、sinestream の実験で使用された 1738 秒よりもずっと短いことに注意してください。モデルをシミュレートして、再びボード線図で推定の進行状況を観察します。

sim(mdlSP);
figSP = gcf;
hold on;

PRBS モードを使用したオンライン推定

もう 1 つのモデル scdfrePRBS を開きます。このモデルでは、Frequency Response Estimator ブロックが [摂動のみ] の出力用に構成されています。この構成では、ブロックを制御ループの外に配置することができます。ブロックがアイドル状態の場合、Sum ブロックに入る摂動信号は 0 なので、ループに影響はありません。

mdlPRBS = 'scdfrePRBS';
open_system(mdlPRBS);

このモデルには同じプラントとコントローラーがあります。ただし、このモデルの Frequency Response Estimator ブロックは [PRBS] 実験モードを使用するように構成されています。このモードでは、2 値疑似乱数列をプラント モデルに挿入します。sinestream モードおよび重ね合わせモードの実験と比較すると、PRBS モードの実験は、周波数領域でずっと高い分解能を使用した場合でも、はるかに高速です。

プラント出力が -0.5 である定常状態の操作点を見つけます。プラントを線形化して、この操作点でのベースライン応答 (G3) を見つけます。

op.Outputs.y = -0.5;
op_point = findop(plantMDL,op,options);
G3 = c2d(linearize(plantMDL,op_point),Ts);

ボード線図のベースラインとしてモデル G3 を使用するようにブロックを構成します。

set_param([mdlPRBS,'/Frequency Response Estimator'], 'BaselinePlant', 'G3');

実験は、PID コントローラーがプラントを新しい操作点 (y = -0.5) に移動させてから 10 秒後に開始されます。推奨される実験の長さは 163.82 秒であり、重ね合わせモードの実験で使用された 377 秒よりもずっと短いことに注意してください。モデルをシミュレートして、再びボード線図で推定の進行状況を観察します。

sim(mdlPRBS);
figPRBS = gcf;
hold on;

ログに記録された実験データを使用したオフライン推定

Frequency Response Estimator ブロックには data 出力端子があり、シミュレーションからの実験データやリアルタイムでの実験データをログに記録できます。このデータセットは、frd オブジェクトを生成するために frestimate コマンドを使ってオフラインで処理することができます。

w = logspace(-1,1,20);

sinestream 実験からのオンライン推定とオフライン推定の結果を比較します。

G1frd = frestimate(dataSS,w,'rad/s');
figure(figSS);
bodeplot(gca,G1frd,w,'o');
legend('truth','online','offline')

重ね合わせ実験からのオンライン推定とオフライン推定の結果を比較します。

G2frd = frestimate(dataSP,w,'rad/s');
figure(figSP);
bodeplot(gca,G2frd,w,'o');
legend('truth','online','offline')

PRBS モードの実験からのオンライン推定とオフライン推定の結果を比較します。

G3frd = frestimate(dataPRBS,w,'rad/s');
figure(figPRBS);
bodeplot(gca,G3frd,w,'o');
legend('truth','online','offline')

オフライン推定での実験データ使用の詳細については、オフライン推定のための周波数応答実験データの収集を参照してください。

参考

関連するトピック