Main Content

frestimate

Simulink モデルの周波数応答の推定

説明

sysest = frestimate(model,io,input) は、指定された入力信号、モデルの初期条件で定義された操作点、および io に指定された解析ポイントを使用して、Simulink® モデルの周波数応答を推定します。

sysest = frestimate(model,op,io,input) は、周波数応答を推定する前に、操作点 op でモデルを初期化します。モデルの初期条件が定常状態にない場合や、対象とする操作点ではない場合は、この構文を使用して別の操作点を指定します。

[sysest,simout] = frestimate(model,op,io,input) は、シミュレートされたモデル出力も返します。シミュレーション結果のビューアー (frest.simView) を使用して推定結果を調べる場合は、この構文を使用します。

[___] = frestimate(___,options) は、追加のオプションを使用して周波数応答を計算します。この構文は、前記すべての入力引数と出力引数の組み合わせで使用できます。

sysest = frestimate(data,freqs,units) は、オフライン推定モードで Frequency Response Estimator ブロックを使って取得されたシミュレーション データを使用して、周波数応答を推定します。この構文は、そのブロックを使用してログに記録されたデータでのみ使用します。

すべて折りたたむ

watertank モデルでプラントの開ループ応答を推定します。モデルを開きます。

model = 'watertank';
open_system(model)

プラントの開ループ応答を推定するには、解析ポイントでモデルのこの部分を指定する線形化 I/O セットを定義します。コントローラー出力で入力解析ポイントを定義し、プラント出力で開ループの出力ポイントを定義します。

io(1)=linio('watertank/PID Controller',1,'input');
io(2)=linio('watertank/Water-Tank System',1,'openoutput');

推定のための定常状態の操作点を見つけます。この例では、モデルの初期条件から派生する定常状態の操作点を使用します。

watertank_spec = operspec(model);
opOpts = findopOptions('DisplayReport','off');
op = findop(model,watertank_spec,opOpts);

入力信号を作成して推定します。この例では、指定した周波数で一連の正弦波摂動を個別に送信する sinestream 信号を使用します。

input = frest.Sinestream('Frequency',logspace(-3,2,30));

モデルの指定部分の周波数応答を推定します。結果は、sinestream 信号に指定された各周波数での応答を含む周波数応答モデルです。

sysest = frestimate(model,op,io,input);
size(sysest)

測定された周波数応答を調べます。

bode(sysest,'*')

Simulink モデルを線形化し、周波数応答の推定を使って正確な線形化の結果を検証します。

watertank モデルを開きます。

model = 'watertank';
open_system(model);

プラントの開ループ応答の線形化を取得します。そのためには線形化 I/O ポイントを定義し、モデルの初期条件近傍の定常状態操作点を見つけます。その後、モデルを線形化します。

io(1)=linio('watertank/PID Controller',1,'input');
io(2)=linio('watertank/Water-Tank System',1,'openoutput');

watertank_spec = operspec(model);
opOpts = findopOptions('DisplayReport','off');
op = findop(model,watertank_spec,opOpts);

syslin = linearize(model,op,io);

線形化をチェックするには、同じ解析ポイントと操作点を使用して周波数応答を推定します。この例では、推定に sinestream 入力信号を使用します。

input = frest.Sinestream('Frequency',logspace(-3,2,20));
sysest = frestimate(model,op,io,input);

ボード線図を使用して、周波数領域における正確な線形化と推定された応答を比較します。

bode(syslin,'b-',sysest,'r*')
legend('Exact linearization','Estimation')

シミュレーション結果のビューアーでは、周波数応答の推定結果を周波数ごとに調べることができます。ビューアーを開くには frest.simView コマンドを使用します。そのためには、frestimatesimout 出力引数を使ってシミュレーション データを保存します。

watertank モデルでプラントの開ループ応答を推定します。最初にモデルを開きます。

model = 'watertank';
open_system(model)

プラントを指定する線形化 I/O セットを定義し、推定のための定常状態の操作点を見つけます。

io(1)=linio('watertank/PID Controller',1,'input');
io(2)=linio('watertank/Water-Tank System',1,'openoutput');

watertank_spec = operspec(model);
opOpts = findopOptions('DisplayReport','off');
op = findop(model,watertank_spec,opOpts);

その後、推定のための入力信号を作成し、モデルの指定部分の周波数応答を推定します。simout 出力引数を使用して推定データを保存します。

input = frest.Sinestream('Frequency',logspace(-3,2,10));
[sysest,simout] = frestimate(model,op,io,input);

シミュレーション結果のビューアーを開きます。

frest.simView(simout,input,sysest)

ビューアーには、その [ボード線図] セクションで選択した範囲内にあるすべての周波数について、定常状態の時間応答とその応答の FFT が表示されます。これらのプロットは、応答がその想定された応答からいつ逸脱するかを特定するために役立ちます。シミュレーション結果のビューアーの使用の詳細については、推定された周波数応答の解析を参照してください。

推定対象としているシステムの線形モデルがある場合は、ビューアーでの比較に用いるベースライン応答としてそのモデルを使用できます。たとえば、正確な線形化によって取得したモデルを、推定された周波数応答と比較することができます。線形化 I/O セットと操作点を使用して、watertank プラントの正確な線形化を計算します。

syslin = linearize(model,io,op);

シミュレーション結果のビューアーを再び開き、今度は入力引数に syslin を指定します。

frest.simView(simout,input,sysest,syslin)

ビューアーの [ボード線図] セクションに、正確な応答 syslin を示す線が含まれています。このビューは、推定された応答が線形化から逸脱する特定の周波数を識別するために役立つことがあります。

入力引数

すべて折りたたむ

Simulink モデル。string または文字ベクトルとして指定します。モデルは現在の作業フォルダー内または MATLAB® パス上になければなりません。

入力、出力、およびループ開始点を含む解析ポイント セット。線形化 I/O オブジェクトとして指定します。解析ポイント セットは、Simulink モデルのうち、推定対象の周波数応答をもつサブセットを定義します。io を作成するには次を行います。

  • linio を使用して入力、出力および開始点を定義します。

  • 入力、出力および開始点が Simulink モデルで指定されている場合、getlinio を使用してモデルからこれらの点を抽出します。

周波数応答の推定では、I/O ポイントがバス信号上にあってはなりません。io は Simulink モデル model か、モデルの階層構造内にあるノーマル モードのモデル参照に対応していなければなりません (frestimate をモデル参照内で出力解析ポイントを指定して使用する場合、参照モデルの [最上位モデルごとに可能なインスタンスの総数] コンフィギュレーション パラメーターは 1 でなければなりません)。

推定のための I/O ポイントの指定は、線形化のための指定と似ています。線形化の入力、出力、開始点の指定の詳細については、モデルの一部を線形化するよう指定を参照してください。

モデル摂動のための入力信号。次のいずれかとして指定します。

周波数応答の推定のために入力信号を作成する方法の詳細については、推定用の入力信号を参照してください。

推定のためにモデルを初期化する操作点。次のいずれかの関数を使用して作成された OperatingPoint オブジェクトとして指定します。

  • operpoint

  • findop (単一の操作点の仕様または単一のスナップショット時間を指定)

一般に、推定には定常状態操作点を使用します。操作点を指定しない場合、モデルの初期条件で指定された操作点で推定プロセスが開始します。この操作点は、モデルに保存されている初期状態と入力信号の値で構成されます。

推定のオプション。frestimateOptions オブジェクトとして指定します。使用できるオプションには、推定のための並列計算有効化が含まれます (Parallel Computing Toolbox™ が必要)。

オフライン推定のために Frequency Response Estimator ブロックを使用してログに記録される応答データ。次のいずれかとして指定します。

  • ブロックの data 出力端子からのデータを To Workspace ブロックを使って MATLAB ワークスペースに書き込むことで取得される構造体。To Workspace ブロックの [保存形式] パラメーターは [timeseries] でなければなりません。

  • data 端子でデータを MATLAB ワークスペースに書き込むために Simulink のデータ ログを使って取得される Simulink.SimulationData.Dataset オブジェクト。

詳細については、Frequency Response Estimator ブロックのリファレンス ページまたはオフライン推定のための周波数応答実験データの収集にある data 端子の説明を参照してください。

オフライン推定の周波数。正の値のベクトルとして指定します。Frequency Response Estimator ブロックを使用して応答データを収集するときに、このブロックの [周波数] パラメーターを使用して推定実験のための周波数を指定します。ログ データを使ってオフライン推定を実行する際は、freqs に同じ周波数のベクトルを使用します。

オフライン推定のための周波数の単位。string である "rad/s" または "Hz" のいずれか、または文字ベクトルである 'rad/s' または 'Hz' のいずれかとして指定します。Frequency Response Estimator ブロックを使用して応答データを収集するときに、周波数単位のブロック パラメーターを使用して推定実験のための周波数の単位を指定します。ログ データを使ってオフライン推定を実行する際は、同じ単位を指定します。

出力引数

すべて折りたたむ

推定された周波数応答。周波数応答 (frd) モデル オブジェクトとして返されます。frd モデルには、線形化解析ポイント io に指定されているものと同数の入力と出力があります。

sysest の周波数は、推定に使用する入力信号によって次のように決まります。

  • frest.Sinestream で作成された sinestream 信号を使用する場合、sysest の周波数は sinestream 信号に指定された周波数となる。

  • 他の何らかの入力信号を使用する場合、周波数は周波数応答を抽出するために関数が実行する FFT 計算によって決定される (アルゴリズムを参照)。

data 入力引数を使用して、Frequency Response Estimator ブロックを使って収集されるデータを提供する場合、sysest は SISO モデルになります。この場合、sysest の周波数は、freqs 入力引数で指定される周波数です。

推定プロセスの間に収集されたシミュレーション データ。Simulink.Timeseries オブジェクトの cell 配列として返されます。cell 配列の次元は mn 列で、m は I/O セット io の出力ポイント数、n は入力ポイント数です。このデータは以下に役立ちます。

制限

  • frestimate をモデル参照内で出力解析ポイントを指定して使用する場合、参照モデルの [最上位モデルごとに可能なインスタンスの総数] コンフィギュレーション パラメーターは 1 でなければなりません。

ヒント

  • 多入力多出力 (MIMO) システムの場合、対応する出力信号をシミュレートするために、frestimate によって各入力チャネルに信号が個別に挿入されます。推定アルゴリズムでは、入力とシミュレーションされた出力を使用して MIMO 周波数応答を計算します。多入力システムの線形化入力ポイントでさまざまな入力信号を挿入する場合は、システムを、複数の独立した単入力システムとして扱ってください。frestimate を使用して、各線形化入力ポイントについて個別の周波数応答推定を実行し、周波数応答の結果を連結します。

アルゴリズム

すべて折りたたむ

frestimate は、指定された入力信号 (uest(t)) を入力解析ポイントに挿入します。モデルをシミュレートして、sinestream 入力について次に図示されるように、出力解析ポイントで応答信号 (yest(t)) を収集します。

一般に、frestimate は高速フーリエ変換の出力信号と入力信号の比率を計算することによって周波数応答を推定します。

Resp=FFT(yest(t))FFT(uest(t)).

  • sinestream 入力信号の場合、関数は、各周波数の信号に指定された整定周期数内に収集されたデータを破棄する (sinestream 入力信号を参照)。sinestream 信号のフィルター処理のオプションがアクティブである場合、関数はバンドパス フィルターを対応する周波数の残りの信号に適用し、さらに 1 周期を破棄して残っている過渡信号をすべて削除します。関数は結果の信号の FFT を使用して Resp を計算します。結果の frd モデルには sinestream のすべての周波数が含まれます。

  • チャープ入力信号の場合、関数は比率 Resp において、チャープに指定された周波数範囲外にある周波数をすべて破棄する。結果の frd モデルはチャープ範囲内に収まるフーリエ変換のすべての周波数を含みます。

  • 他の入力信号の場合、結果の frd はフーリエ変換におけるすべての周波数を含む。

Frequency Response Estimator ブロックからのデータを使用した推定

frestimate(data,freqs,units) 構文を使用して、Frequency Response Estimator ブロックからのデータを使ったオフライン推定を実行できます。この場合、frestimate はデータ構造体の Ready フィールドを使用して、どのデータ点を Resp の FFT 計算に含めるかを決定します。

  • sinestream モードの場合、この信号は [整定周期数] ブロック パラメーターで決定される、各周波数で破棄する周期を示す。

  • 重ね合わせモードの場合、この信号は [推定に使用される最も低い周波数の周期数] パラメーターで決定されるデータ収集ウィンドウにどのデータが収まるかを示す。

frestimate が Resp を内挿して、結果の frd モデルを生成します。これにはブロックの実験パラメーターに指定した周波数が含まれています。詳細については、Frequency Response Estimator ブロックのリファレンス ページを参照してください。

代替機能

Simulink ブロック

Frequency Response Estimator

拡張機能

バージョン履歴

R2009b で導入