Main Content

周波数応答推定に対する時変ソース ブロックの影響

Simulink® モデルの時変ソース ブロックは、システムの定常状態操作点からモデルを離して、周波数応答推定を妨げる可能性があります。周波数応答推定を容易にするために、時変ソース ブロックを推定用の定数値に設定して無効にすることができます。

コマンド ラインで周波数応答を推定する際、およびモデル線形化器アプリを使用する場合に時変ソースを指定できます。

ソース ブロックを見つけるために、ソフトウェアは、モデルの各線形化出力ポイントで信号値に影響を与える可能性のあるすべての信号パスをトレースします。トレースされる信号パスは次のとおりです。

  • バーチャルおよび非バーチャル サブシステム内の信号パス。

  • ノーマルモードの参照先モデル内の信号パス。アルゴリズムで参照モデル内のソース ブロックが確実に特定されるように、時変ソースを見つける前にすべての参照モデルをノーマル シミュレーション モードに設定します。

  • From ブロックおよび Goto ブロック、または Data Store Read ブロックおよび Data Store Write ブロックを介してルーティングされた信号。

  • switch を介してルーティングされた信号。ソフトウェア アルゴリズムでは、周波数応答推定時に switch の任意の極をアクティブにできると仮定しています。したがって、アルゴリズムはすべての switch 入力を介して信号を逆にトレースします。

一部の時変ソース ブロックは、このアルゴリズムでは見つからない可能性があります。ブロックの内部信号パスに入力端子のないブロックが含まれる場合、このブロックは、関数 frest.findSources またはアプリで報告されます。モデルを定常状態にするには、ソース ブロックを Constant ブロックまたは異なるソース ブロックに置き換えます。

モデル線形化器を使用して推定で時変ソースを一定に設定

この例では、モデル線形化器アプリを使用して周波数応答を推定する際に時変ソースを一定に設定することで推定結果を改善する方法も説明します。

  1. Simulink モデルを開きます。

    sys = "scdspeed_ctrlloop";
    open_system(sys)

  2. モデルを線形化します。

    1. 線形化の精度を高めるために、Engine Model ブロックをノーマル モードに設定します。

      set_param("scdspeed_ctrlloop/Engine Model","SimulationMode","Normal")

    2. モデルのモデル線形化器を開きます。

      Simulink モデル ウィンドウの [アプリ] ギャラリーで、[モデル線形化器] をクリックします。

    3. [ボード線図] をクリックしてモデルを線形化し、その結果のボード線図を生成します。

      線形化されたモデル linsys1[線形解析ワークスペース] に表示されます。

  3. sinestream の入力信号を作成して推定します。

    1. [sinestream の入力の作成] ダイアログ ボックスを開きます。

      [推定] タブの [入力信号] ドロップダウン リストで、[Sinestream] を選択します。

    2. [周波数の追加] ダイアログ ボックスを開きます。

      [周波数の追加] をクリックします。

    3. sinestream 入力の周波数範囲と周波数点数を指定します。

      [最小値] ボックスに「10」と入力します。

      [最大値] ボックスに「100」と入力します。

      周波数点数のボックスに 10 と入力します。

      [OK] をクリックします。

      追加された点が、[sinestream の入力の作成] ダイアログ ボックスの周波数成分ビューアーに表示されます。

    4. [sinestream の入力の作成] ダイアログ ボックスの周波数成分ビューアーで、すべての周波数点を選択します。

    5. 入力 sinestream のパラメーターを指定します。

      モデルが入力 sinestream の各周波数点で必ず定常状態に達するように、[周期数][整定周期] を変更します。

      [周期数] ボックスに 30 と入力します。

      [整定周期] ボックスに 25 と入力します。

    6. sinestream 入力を作成します。

      [OK] をクリックします。新しい入力信号 in_sine1[線形解析ワークスペース] に表示されます。

  4. 推定を実行するときに診断ビューアーが起動されるように設定します。

    [推定] タブで [診断ビューアー] を選択します。

  5. モデルの周波数応答を推定します。

    [ボード線図 1] をクリックして、周波数応答を推定します。[診断ビューアー] がドキュメント エリアに表示され、推定されたシステム estsys1[線形解析ワークスペース] に表示されます。

  6. 推定モデルと線形化モデルを比較します。

    1. [ボード線図 1] には、推定と線形化が一致しない 1 つの周波数点があります。

    2. モデル線形化器のプロット エリアで、[診断ビューアー] タブをクリックします。

    3. 推定の結果と線形化の結果が一致しない周波数点のみを表示するように、[診断ビューアー] を構成します。

      [診断ビューアー] タブの [周波数セレクター] セクションで [下限] ボックスに 9[上限] ボックスに 「11」と入力して、[診断ビューアー] で解析する周波数範囲を設定します。

      [フィルター後の定常状態の時間応答] プロットには、正弦波ではない信号が表示されます。

    4. フィルター処理されていない時間応答を表示します。

      [フィルター後の定常状態の時間応答] プロットを右クリックし、[フィルター後の定常状態の出力のみ表示] オプションをオフにします。

      ステップ入力と外乱がモデルの線形化に使用される操作点からモデルを離し、応答が定常状態に到達するのを妨げています。この問題を解決するには、推定を妨げている時変ソース ブロックを見つけて無効にします。その後、モデルの周波数応答をもう一度推定します。

  7. モデル内の時変ソースを見つけて無効にします。

    1. [周波数応答の推定のオプション] ダイアログ ボックスを開きます。

      [推定] タブの [オプション] セクションで、[追加オプション] をクリックします。

    2. [周波数応答の推定のオプション] ダイアログ ボックスで、[時変ソース] タブの [時変ソース ブロックを自動的に検出して追加] をクリックします。

      時変ソース リストにモデル内の時変ソースのブロック パスが入力されます。これらのソースは推定が行われる間も保持されます。

    ダイアログ ボックスを閉じます。

  8. モデルの周波数応答を推定します。

    [推定] タブで [ボード線図 1] をクリックして、周波数応答を推定します。推定結果のシステム estsys2[線形解析ワークスペース] に表示されます。

  9. 新しく推定されたモデルと線形化されたモデルを比較します。

    [ボード線図 1] では、estsys1 の振幅応答が正確な線形化と一致します。

コマンド ラインで時変ソースを推定で一定に設定

この例では、関数 frestimate を使用して周波数応答を推定する際に時変ソースを一定に設定することで推定結果を改善する方法も説明します。

Simulink モデルを開きます。

sys = "scdspeed_ctrlloop";
open_system(sys)

モデルから線形解析ポイントを取得します。

io = getlinio(mdl);

正確なシミュレーション結果のために、Engine Model サブシステムをノーマル モードに設定します。

set_param("scdspeed_ctrlloop/Engine Model","SimulationMode","Normal")

モデルを線形化します。

sys = linearize(mdl,io);

10 から 100 rad/s の範囲の周波数応答を推定します。

in = frest.Sinestream(...
    "Frequency",logspace(1,2,10),...
    "NumPeriods",30,
    "SettlingPeriods",25);
[sysest,simout] = frestimate(mdl,io,in);

推定結果 sysest を正確な線形化 sys と比較します。

frest.simView(simout,in,sysest,sys)

最初の周波数点のフィルター処理されていない時間応答を表示するには、シミュレーション結果のビューアーで以下のようにします。

  • [ボード線図] セクションで、最初の周波数点のみが含まれるように影付きの周波数範囲を調整します。これはその周波数の正確な線形化に一致しません。

  • [時間応答] セクションでプロットを右クリックし、[フィルター後の定常状態の出力のみ表示] パラメーターをクリアします。

ステップ入力と外乱がモデルを操作点から離し、応答が定常状態に到達するのを妨げています。この問題を解決するには、推定を妨げている時変ソース ブロックを見つけて無効にします。

次のように frest.findSources を使用して、時変ソース ブロックを特定します。

srcblks = frest.findSources(mdl,io);

周波数応答推定オプション セットを作成してブロックを無効にします。

opts = frestimateOptions;
opts.BlocksToHoldConstant = srcblks;

指定したオプションを使用して、周波数応答推定を繰り返します。

[sysest2,simout2] = frestimate(mdl,io,in,opts);
frest.simView(simout2,in,sysest2,sys)

[ボード線図] セクションで、推定された周波数応答は正確な線形化に一致していません。

最初の周波数点のフィルター処理されていない時間応答を表示します。シミュレーション結果のビューアーで以下のようにします。

  • [ボード線図] セクションで、最初の周波数点のみが含まれるように影付きの周波数範囲を調整します。

  • [時間応答] セクションでプロットを右クリックし、[フィルター後の定常状態の出力のみ表示] パラメーターをクリアします。

[時間応答] プロットで示されているように、システムは初期操作点の近くに留まっています。

参考

アプリ

関数

関連するトピック