このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
非線形プラントの周波数応答のオンライン推定
この例では、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 の実験の方が割り込みが少なく、正確です。ただし、実験の実施にずっと長い時間を要します。
この例では、モデルの正確な線形化を取得できます。したがって、これをブロックのベースラインに使用して、これを "真" として実行時に推定結果を直接比較することが可能です。ブロックは、その生成するボード線図のベースラインとしてモデル G1
を使用するように構成されます。プラント出力が 0.5 である定常状態の操作点を見つけ、この操作点で線形化を行って G1
を取得します。
op.Outputs.y = 0.5; op_point = findop(plantMDL,op,options); G1 = c2d(linearize(plantMDL,op_point),Ts);
実験は PID コントローラーがプラントを新しい操作点 (y = 0.5) に移動させてから 10 秒後に開始されます。実験が開始すると、PID コントローラーは挿入される正弦波 (実質的には負荷外乱) を抑制しようとします。したがって、コントローラーによってプラントが実験中に定格操作点からあまり離れすぎないようになり、推定結果に対するプラントの非線形性の影響が緩和されます。モデルをシミュレートして、推定された応答が実験中どのように変化するかをボード線図で観察します。推定結果はベースラインと非常によく一致します。
sim(mdlSS);
figSS = gcf;
hold on;
重ね合わせモードを使用したオンライン推定
もう 1 つのモデル scdfreeSuperposition
を開きます。このモデルでは、Frequency Response Estimator ブロックが [摂動のみ] の出力用に構成されています。この構成では、ブロックを制御ループの外に配置することができます。ブロックがアイドル状態の場合、Sum ブロックに入る摂動信号は 0 なので、ループに影響はありません。
mdlSP = 'scdfreSuperposition';
open_system(mdlSP);
このモデルには同じプラントとコントローラーがあります。ただし、このモデルの Frequency Response Estimator ブロックは [重ね合わせ] 実験モードを使用するように構成されています。このモードでは、すべての正弦波が加算されてプラントに同時に挿入されます。sinestream モードの実験と比べ、重ね合わせモードの実験はずっと高速です (低周波数をターゲットとする場合は特に)。
プラント出力が -0.5 である定常状態の操作点を見つけます。プラントを線形化して、この操作点でのベースライン応答 (G2
) を見つけます。Frequency Response Estimator ブロックはこのベースラインを使用してボード線図を生成するように構成されます。
op.Outputs.y = -0.5; op_point = findop(plantMDL,op,options); G2 = c2d(linearize(plantMDL,op_point),Ts);
実験は、PID コントローラーがプラントを新しい操作点 (y = -0.5) に移動させてから 10 秒後に開始されます。推奨される実験の長さは 377 秒であり、sinestream の実験で使用された 1738 秒よりもずっと短いことに注意してください。モデルをシミュレートして、再びボード線図で推定の進行状況を観察します。
sim(mdlSP);
figSP = 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')
オフライン推定での実験データ使用の詳細については、オフライン推定のための周波数応答実験データの収集を参照してください。