ドキュメンテーション センター

  • 評価版
  • 製品アップデート

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

frest.findSources

時変ソース ブロックを特定します。

構文

blocks = frest.findSources(model)
blocks = frest.findSources(model,io)

説明

blocks = frest.findSources(model) は、Simulink® モデル model でマークされた任意の線形化出力ポイントの信号パスですべての時変ソース ブロックを検出します。

blocks = frest.findSources(model,io) は、線形解析ポイント io の配列内で指定された任意の線形化出力ポイントの信号パスですべての時変ソース ブロックを検出します。

入力引数

model

周波数応答推定を行う時変ソース ブロックを識別する Simulink モデルの名前を含んでいる文字列。単一引用符で囲みます。

io

線形化 I/O 点の配列。

io の要素は、関数 getlinio または関数 linio を使用して作成する線形化 I/O オブジェクトです。関数 frest.findSources では、周波数応答推定を妨げる可能性のある時変ソース ブロックを探すために出力ポイントのみを使用します。詳細は、「アルゴリズム」を参照してください。

出力引数

blocks

Simulink.BlockPath オブジェクトの配列で、周波数応答推定を妨げる可能性のある model のすべての時変ソース ブロックのブロック パスを識別します。blocks 引数にはサブシステムおよびノーマルモードの参照先モデル内の時変ソース ブロックが含まれています。

io を指定した場合、blocks には io の出力ポイントで信号に影響を与えるすべての時変ソース ブロックが含まれます。

io を指定しない場合、blocks には model でマークされた出力ポイントで信号に影響を与えるすべての時変ソース ブロックが含まれます。

時変ソース ブロックをもつモデルの周波数応答を推定します。以下の例では、周波数応答推定を妨げる時変ソース ブロックを識別する関数 frest.findSources の使用方法を説明します。また、推定で時変ソース ブロックを無効にする関数 frestimateOptionsBlocksToHoldConstant オプションの使用法も示されています。

モデル scdspeed_ctrlloop を読み込みます。

mdl = 'scdspeed_ctrlloop';
open_system(mdl)
% Convert referenced model to normal mode for accuracy 
set_param('scdspeed_ctrlloop/Engine Model',...
                    'SimulationMode','Normal');

最初に、周波数応答推定における時変ソース ブロックの効果を表示します。これを行うには、時変ソース ブロックを無効にしないで推定を行います。

この例では、線形化 I/O ポイントはモデル内で既に定義されています。getlinio コマンドを使用して関数 frestimate の I/O 点を取得します。

io = getlinio(mdl)

sinestream 信号を定義して、推定される周波数応答 sysest を計算します。

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

正確な線形化を行い、推定応答と比較します。

sys = linearize(mdl,io);
bodemag(sys,sysest,'r*')

推定される周波数応答は正確な線形化とは一致しません。モデル内の時変ソース ブロックにより応答が安定状態にならないために、このような不一致が発生します。

関数 frest.findSources を使用して時変ブロックを検索します。

srcblks = frest.findSources(mdl);

srcblks は、モデル内の時変ソース ブロックに対応するブロック パスの配列です。結果を調べるには、配列にインデックスを指定します。

たとえば、次のように入力します。

srcblks(2)

次の結果が返されます。

ans = 

  Simulink.BlockPath
  Package: Simulink

  Block Path:
    'scdspeed_ctrlloop/Engine Model'
      'scdspeed_plantref/Drag Torque/Step1'

これで、時変ソース ブロックの影響を受けずに周波数応答を推定できます。これを行うには、関数 frestimateOptionsBlocksToHoldConstant オプションを srcblks と等しくなるように設定し、推定を行います。

opts = frestimateOptions
opts.BlocksToHoldConstant = srcblks
% Run frestimate again with blocks disabled
 [sysest2,simout2] = frestimate(mdl,io,in,opts);

こうすると、周波数応答推定によって正確な線形化結果をよく近似するようになります。

bodemag(sys,sysest2,'r*')

代替方法

Simulink モデル アドバイザーを使用して、モデル内の線形化出力ポイントの信号パスに時変ソース ブロックが存在するかどうかを調べることができます。そうするには、モデル アドバイザー チェックの [周波数応答の推定を干渉する時変ソース ブロックを特定します] を使用します。モデル アドバイザーの使用方法の詳細は、『Simulink ユーザー ガイド』の「モデル アドバイザーの使用」を参照してください。

詳細

すべて展開する

ヒント

  • 周波数応答推定を妨げる可能性のある時変ソース ブロックを特定するには、関数 frest.findSources を使用します。このような blocks を無効にして周波数応答を推定するには、関数 frestimateOptionsBlocksToHoldConstant オプションを blocks または blocks のサブセットと等しくなるように設定します。次に、関数 frestimate を使用して周波数応答を推定します。

  • 場合によっては、model には線形化出力ポイントの信号パス内にソース ブロックを含んでいる参照先モデルが含まれていることがあります。このような場合、参照先モデルをノーマル シミュレーション モードに設定し、関数 frest.findSources がそれらを検索するようにします。set_param コマンドを使用して、関数 frest.FindSources を実行する前に任意の参照先モデルの SimulationModeNormal に設定します。

アルゴリズム

周波数応答推定を妨げる可能性のある時変ソース ブロックを検出するために、モデルの各線形化出力ポイントで関数 frest.findSources を開始します。アルゴリズムでは各出力ポイントからブロックごとに各信号パスを逆にトレースします。アルゴリズムは、ソース ブロックが Constant または Ground ブロックでない限り、検出した任意のソース ブロック (入力端子のないブロック) をレポートします。

frest.findSources アルゴリズムは、モデルの各線形化出力ポイントで信号値に影響を与える可能性のあるすべての信号パスをトレースします。トレースされるパスには以下のものがあります。

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

  • ノーマルモードの参照先モデル内の信号パス。関数 frest.findSources を使用する前にすべての参照先モデルをノーマル シミュレーション モードに設定して、アルゴリズムが参照先モデル内のソース ブロックを識別するようにします。

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

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

たとえば、モデル scdspeed_ctrlloop を考えてみましょう。このモデルには、Speed Output というラベルの付いた Sum ブロックの出力に配置された 1 つの線形化出力ポイントがあります(frest.findSources アルゴリズムは線形化入力ポイントを無視します)。frest.findSources を実行する前に、次のように参照先モデルをノーマル シミュレーション モードに変換します。

set_param('scdspeed_ctrlloop/Engine Model',...
                       'SimulationMode','Normal');

これで、frest.findSources を実行して、モデル内で定義された線形化出力ポイントを使用して時変ソース ブロックを識別できるようになりました。

 srcblks = frest.findSources('scdspeed_ctrlloop');

アルゴリズムは出力ポイントで開始され、Sum ブロックの Speed Output を介して逆にトレースします。Speed Output への入力の 1 つはサブシステム External Disturbance です。アルゴリズムはサブシステムを入力し、Step Disturbance というラベルのソース ブロックを検出し、そのブロックをレポートします。

Sum ブロックの Speed Output には別の入力があります。これは、アルゴリズムが参照先モデル Engine Model へ逆にトレースするものです。Engine Model には複数のサブシステムが含まれ、アルゴリズムはこれらのサブシステムを介して信号をトレースし、任意の時変ソース ブロックの存在を識別します。

たとえば、Combustion サブシステムには Spark Advance ソースからの信号をルーティングする delta というマークの付いた From ブロックが含まれています。しかし、Spark Advance は Constant ソース ブロックであるため、アルゴリズムはブロックが存在することをレポートしません。

各線形化出力ポイントで信号に影響を与える可能性のあるすべての信号パスを調べるまで、アルゴリズムはトレースを続けます。

参考

|

この情報は役に立ちましたか?