周波数応答推定に対する時変ソース ブロックの影響
モデル線形化器を使用した推定実行中の時変ソースを一定に保持する設定
以下の例では、時変ソースが推定に与える影響を説明します。また、推定結果を改善するために、推定の実行中に時変ソースが一定に保持されるように設定する方法も説明します。
Simulink® モデルを開きます。
sys = 'scdspeed_ctrlloop'; open_system(sys)
モデルを線形化します。
線形化の精度を高めるために、
Engine Model
ブロックをノーマル モードに設定します。set_param('scdspeed_ctrlloop/Engine Model','SimulationMode','Normal')
モデルのモデル線形化器を開きます。
Simulink モデル ウィンドウの [アプリ] ギャラリーで、[モデル線形化器] をクリックします。
[ボード線図] をクリックしてモデルを線形化し、その結果のボード線図を生成します。
線形化されたモデル
linsys1
が [線形解析ワークスペース] に表示されます。
sinestream の入力信号を作成して推定します。
[sinestream の入力の作成] ダイアログ ボックスを開きます。
[推定] タブの [入力信号] ドロップダウン リストで、[Sinestream] を選択します。
[周波数の追加] ダイアログ ボックスを開きます。
をクリックします。
sinestream 入力の周波数範囲と周波数点数を指定します。
[最小値] ボックスに「
10
」と入力します。[最大値] ボックスに「
100
」と入力します。周波数点数のボックスに
10
と入力します。[OK] をクリックします。
追加された点が、[sinestream の入力の作成] ダイアログ ボックスの周波数成分ビューアーに表示されます。
[sinestream の入力の作成] ダイアログ ボックスの周波数成分ビューアーで、すべての周波数点を選択します。
入力 sinestream のパラメーターを指定します。
モデルが入力 sinestream の各周波数点で必ず定常状態に達するように、[周期数] と [整定周期] を変更します。
[周期数] ボックスに
30
と入力します。[整定周期] ボックスに
25
と入力します。sinestream 入力を作成します。
[OK] をクリックします。新しい入力信号
in_sine1
が [線形解析ワークスペース] に表示されます。
推定を実行するときに診断ビューアーが起動されるように設定します。
[推定] タブで [診断ビューアー] を選択します。
モデルの周波数応答を推定します。
[ボード線図 1] をクリックして、周波数応答を推定します。[診断ビューアー] がドキュメント エリアに表示され、推定されたシステム
estsys1
が [線形解析ワークスペース] に表示されます。推定モデルと線形化モデルを比較します。
モデル線形化器のプロット エリアで、[診断ビューアー - estsys1] タブをクリックします。
linsys1
を [線形解析ワークスペース] から診断ビューアーにドラッグし、[ボード線図] にlinsys1
を追加します。推定の結果と線形化の結果が一致しない周波数点のみを表示するように、診断ビューアーを構成します。
[診断ビューアー] タブをクリックします。
[周波数セレクター] セクションで [下限] ボックスに
9
、[上限] ボックスに11
と入力して、診断ビューアーで解析する周波数範囲を設定します。[フィルター後の定常状態の時間応答] プロットには、正弦波ではない信号が表示されます。
フィルター処理されていない時間応答を表示します。
[フィルター後の定常状態の時間応答] プロットを右クリックし、[フィルター後の定常状態の出力のみ表示] オプションをオフにします。
ステップ入力と外乱がモデルの線形化に使用される操作点からモデルを離し、応答が定常状態に到達するのを妨げています。この問題を解決するには、推定を妨げている時変ソース ブロックを見つけて無効にします。その後、モデルの周波数応答をもう一度推定します。
モデル内の時変ソースを見つけて無効にします。
[周波数応答の推定のオプション] ダイアログ ボックスを開きます。
[推定] タブの [オプション] セクションで、[追加オプション] をクリックします。
[周波数応答の推定のオプション] ダイアログ ボックスで、[時変ソース] タブの [時変ソース ブロックを自動的に検出して追加] をクリックします。
時変ソース リストにモデル内の時変ソースのブロック パスが入力されます。これらのソースは推定が行われる間も保持されます。
ダイアログ ボックスを閉じます。
モデルの周波数応答を推定します。
[推定] タブで
[ボード線図 1] をクリックして、周波数応答を推定します。推定結果のシステム
estsys2
が [線形解析ワークスペース] に表示されます。新しく推定されたモデルと線形化されたモデルを比較します。
モデル線形化器のプロット エリアで [診断ビューアー - estsys2] をクリックします。
linsys1
をクリックして、診断ビューアーにドラッグします。時変ソースを一定に保って取得した周波数応答は線形化結果と正確に一致します。
推定実行中の時変ソースを一定に保持する設定 (MATLAB コード)
次のようにして、正確な線形化手法を使用して取得された線形モデルと推定された周波数応答を比較します。
% Open the model mdl = 'scdspeed_ctrlloop'; open_system(mdl) io = getlinio(mdl); % Set the model reference to normal mode for accurate linearization set_param('scdspeed_ctrlloop/Engine Model','SimulationMode','Normal') % Linearize the model sys = linearize(mdl,io); % Estimate the frequency response between 10 and 100 rad/s in = frest.Sinestream('Frequency',logspace(1,2,10),'NumPeriods',30,'SettlingPeriods',25); [sysest,simout] = frestimate(mdl,io,in); % Compare the results frest.simView(simout,in,sysest,sys)
線形化結果は、最初の 2 つの周波数で推定された周波数応答と一致していません。フィルター処理されていない時間応答を表示するには、時間応答プロットを右クリックし、[フィルター後の定常状態の出力のみ表示] をオフにします。
ステップ入力と外乱がモデルを操作点から離し、応答が定常状態に到達するのを妨げています。この問題を解決するには、推定を妨げているこれらの時変ソース ブロックを見つけて無効にします。
次のように frest.findSources
を使用して、時変ソース ブロックを特定します。
srcblks = frest.findSources(mdl,io);
frestimate
オプション セットを作成してブロックを無効にします。
opts = frestimateOptions; opts.BlocksToHoldConstant = srcblks;
オプションの入力引数 opts
を使用して、周波数応答推定を繰り返します。
[sysest2,simout2] = frestimate(mdl,io,in,opts); frest.simView(simout2,in,sysest2,sys)
これで、結果の周波数応答は正確な線形化結果と一致します。フィルター処理されていない時間応答を表示するには、時間応答プロットを右クリックし、[フィルター後の定常状態の出力のみ表示] をオフにします。
制限
一部の時変ソース ブロックは、このアルゴリズムでは見つからない可能性があります。ブロックの内部信号パスに入力端子のないブロックが含まれる場合、このブロックは、関数 frest.findSources
またはアプリで報告されます。モデルを定常状態にするには、ソース ブロックを Constant ブロックまたは異なるソース ブロックに置き換えます。