Main Content

genfrd

一般化周波数応答データ (FRD) モデル

説明

一般化 FRD (genfrd) モデルは、調整可能な制御設計ブロックと周波数応答データとして表現される固定の数値コンポーネントの両方を含むシステムを表すために使用します。genfrd モデルは、調整可能なブロックが固定の周波数応答コンポーネントとどのようにやり取りするのかを記録します。調整可能なコンポーネントをもつ一般化モデルの詳細については、一般化モデルを参照してください。

作成

genfrd モデルを構築するには、次を行います。

説明

fsys = genfrd(sys,frequency) は、静的モデルまたは動的システム モデルを一般化 FRD モデルに変換し、fsysFrequency プロパティの値を設定します。sysfrd モデル オブジェクトではない場合、genfrdfrequency の各点の周波数応答を計算します。sysfrd モデルの場合、frequencysys.Frequency の値と一致しなければなりません。

frdsys = genfrd(sys,frequency,frequencyunit) は、さらに Frequency の単位を指定し、fsysFrequencyUnit プロパティを設定します。

frdsys = genfrd(sys,frequency,frequencyunit,timeunit) は、さらに fsysTimeUnit プロパティを指定します。この構文は静的モデルを genfrd 形式に変換する場合に便利です。静的モデルには関連付けられた時間単位がないためです。

入力引数

すべて展開する

genfrd に変換するモデル。動的システム モデルまたは静的モデルとして指定します。たとえば、以下を sys に指定できます。

  • tfzpkss モデルなどの数値 LTI モデル。

  • frd モデルなどの周波数応答データ モデル。sysfrd モデルの場合、frequencysys.Frequency の値と一致しなければなりません。frd モデルを別の周波数ベクトルで genfrd 形式に変換するには、先に interp を使用して frd モデルをリサンプリングします。

  • genss モデルなどの一般化 LTI モデル。

  • 静的な一般化行列 genmat などの静的モデル。

結果の genfrd モデルには、sys と同じ制御設計ブロックが含まれます。sys が数値 LTI モデルや制御設計ブロックがないその他のモデルの場合、結果の genfrd モデルに制御設計ブロックは含まれません。

プロパティ

すべて展開する

一般化 LTI モデルまたは一般化行列に含まれる制御設計ブロック。構造体として指定します。Blocks のフィールド名は、制御設計ブロックの Name プロパティです。

ドット表記を使用すると、これらの制御設計ブロックのいくつかの属性を変更できます。たとえば、一般化 LTI モデルまたは一般化行列 Mrealp の調整可能なパラメーター a を含んでいる場合に a の現在の値を変更します。

M.Blocks.a.Value = -1;

システム応答をサンプリングする周波数の値。FrequencyUnit で与えられた単位の値のベクトルとして指定します。

Frequency プロパティの周波数ベクトルの単位。以下のいずれかの値として指定します。

  • 'rad/TimeUnit'

  • 'cycles/TimeUnit'

  • 'rad/s'

  • 'Hz'

  • 'kHz'

  • 'MHz'

  • 'GHz'

  • 'rpm'

単位 'rad/TimeUnit''cycles/TimeUnit' は、TimeUnit プロパティで指定された時間単位に相対的です。

このプロパティを変更してもリサンプリングやデータの変換は行われません。プロパティを変更すると、既存のデータの解釈のみが変更されます。chgFreqUnit を使用して、データをさまざまな周波数単位に変換します。

各入力チャネルの入力遅延。次のいずれかとして指定します。

  • スカラー — SISO システムに入力遅延を、または多入力システムのすべての入力に同じ遅延を指定します。

  • Nu 行 1 列のベクトル — 多入力システムの入力に別々の入力遅延を指定します。Nu は入力の数です。

連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で入力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で入力遅延を指定します。

詳細については、線形システムでのむだ時間を参照してください。

各出力チャネルの出力遅延。次のいずれかとして指定します。

  • スカラー — SISO システムに出力遅延を、または多出力システムのすべての出力に同じ遅延を指定します。

  • Ny 行 1 列のベクトル — 多出力システムの出力に別々の出力遅延を指定します。Ny は出力の数です。

連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で出力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で出力遅延を指定します。

詳細については、線形システムでのむだ時間を参照してください。

入力チャネル名。以下のいずれかとして指定します。

  • 文字ベクトル (単入力モデルの場合)。

  • 文字ベクトルの cell 配列 (多入力モデルの場合)。

  • '' (いずれの入力チャネルにも名前を指定しない場合)。

あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys が 2 入力モデルである場合は、以下のように入力します。

sys.InputName = 'controls';

入力名は自動的に {'controls(1)';'controls(2)'} へと拡張されます。

省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、sys.usys.InputName と同じです。

InputName の使用目的は次のとおりです。

  • モデル表示とプロット上のチャネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

入力チャネル単位。以下のいずれかとして指定します。

  • 文字ベクトル (単入力モデルの場合)。

  • 文字ベクトルの cell 配列 (多入力モデルの場合)。

  • '' (いずれの入力チャネルにも単位を指定しない場合)。

InputUnit を使用して入力信号の単位を指定します。InputUnit はシステムの動作に影響しません。

入力チャネル グループ。構造体として指定します。InputGroup プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 12、および 35 をそれぞれ含む、controls および noise という名前の入力グループを作成するには、次のように入力します。

sys.InputGroup.controls = [1 2];
sys.InputGroup.noise = [3 5];

その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。

sys(:,'controls')

既定では、InputGroup はフィールドのない構造体です。

出力チャネル名。次のいずれかとして指定されます。

  • 文字ベクトル (単出力モデルの場合)。

  • 文字ベクトルの cell 配列 (多出力モデルの場合)。

  • '' (いずれの出力チャネルにも名前を指定しない場合)。

あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys が 2 出力モデルである場合は、以下のように入力します。

sys.OutputName = 'measurements';

出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。

省略形表記 y を使用して OutputName プロパティを参照することもできます。たとえば、sys.ysys.OutputName と同じです。

OutputName の使用目的は次のとおりです。

  • モデル表示とプロット上のチャネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

出力チャネル単位。次のいずれかとして指定されます。

  • 文字ベクトル (単出力モデルの場合)。

  • 文字ベクトルの cell 配列 (多出力モデルの場合)。

  • '' (いずれの出力チャネルにも単位を指定しない場合)。

OutputUnit を使用して出力信号の単位を指定します。OutputUnit はシステムの動作に影響しません。

出力チャネル グループ。構造体として指定します。OutputGroup を使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1、および 35 をそれぞれ含む、temperature および measurement という名前の出力グループを作成します。

sys.OutputGroup.temperature = [1];
sys.OutputGroup.measurement = [3 5];

その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。

sys('measurement',:)

既定では、OutputGroup はフィールドのない構造体です。

システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO' とします。

システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。

システム名。文字ベクトルとして指定します。たとえば、'system_1' とします。

サンプル時間。以下として指定します。

  • 0 (連続時間システムの場合)。

  • 離散時間システムのサンプリング周期を表す正のスカラー。TsTimeUnit プロパティによって指定される時間単位で指定します。

  • -1 (サンプル時間が指定されていない離散時間システムの場合)。

メモ

Ts を変更してもモデルの離散化やリサンプリングは行われません。

時間変数の単位。次のいずれかとして指定します。

  • 'nanoseconds'

  • 'microseconds'

  • 'milliseconds'

  • 'seconds'

  • 'minutes'

  • 'hours'

  • 'days'

  • 'weeks'

  • 'months'

  • 'years'

TimeUnit の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

モデル配列のサンプリング グリッド。構造体配列として指定します。

SamplingGrid を使用して、モデル配列の各モデルに関連付けられている変数値を追跡します。これには同定された線形時不変 (IDLTI) モデル配列も含まれます。

構造体のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値スカラーでなければならず、サンプル値のすべての配列はモデル配列の次元と一致しなければなりません。

たとえば、t = 0:10 の各時点で線形時変システムのスナップショットを記録することにより、線形モデルの 11 行 1 列の配列 sysarr を作成することができます。次のコードは線形モデルでの時間サンプルを格納します。

 sysarr.SamplingGrid = struct('time',0:10)

同様に、2 つの変数 zetaw を個別にサンプリングすることにより、6 行 9 列のモデル配列 M を作成できます。次のコードは (zeta,w) の値を M にマッピングします。

[zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>)
M.SamplingGrid = struct('zeta',zeta,'w',w)

M を表示する際、配列の各エントリは対応する zetaw の値を取り込みます。

M
M(:,:,1,1) [zeta=0.3, w=5] =
 
        25
  --------------
  s^2 + 3 s + 25
 

M(:,:,2,1) [zeta=0.35, w=5] =
 
         25
  ----------------
  s^2 + 3.5 s + 25
 
...

複数のパラメーター値または操作点で Simulink® モデルを線形化することにより生成されたモデル配列の場合、SamplingGrid には配列の各エントリに対応する変数値が自動的に入力されます。たとえば、Simulink Control Design™ のコマンド linearize (Simulink Control Design) および slLinearizer (Simulink Control Design) により、SamplingGrid が自動的に入力されます。

既定では、SamplingGrid はフィールドのない構造体です。

オブジェクト関数

以下のリストには、genfrd モデルで使用できる関数の代表的なサブセットが含まれています。一般に、一般化状態空間 (genss) モデルに適用できる関数の多くは genfrd モデルにも適用できます。genfrd モデルは、すべての時間領域解析関数で機能しません。

すべて展開する

getIOTransfer制御システムの一般化モデルからの閉ループ伝達関数
getLoopTransfergenss モデルで表される制御システムの開ループ伝達関数
getSensitivity制御システムの一般化モデルからの感度関数
getCompSensitivity制御システムの一般化モデルからの相補感度関数
getValue一般化モデルの現在値
getBlockValue一般化モデルの制御設計ブロックの現在値を取得
setBlockValue一般化モデルの制御設計ブロックの値の変更
bode動的システムのボード周波数応答
sigma動的システムの周波数応答の特異値
nyquist動的システムのナイキスト応答
nichols動的システムのニコルス応答
bandwidth周波数応答帯域幅
freqresp周波数のグリッドでのシステム応答の評価
marginゲイン余裕、位相余裕、および交差周波数
feedback複数のモデルのフィードバック接続
connect動的システムのブロック線図相互接続
series2 つのモデルの直列接続
parallel2 つのモデルの並列接続
systuneMATLAB でモデル化された固定構造制御システムの調整

すべて折りたたむ

固定値の frd モデルを調整可能な制御設計ブロックと接続して genfrd モデルを作成します。

周波数応答データを読み込みます。ファイル wtankData.mat には、周波数のベクトル frequency とそれに対応するシステムの応答 response が含まれています。このような周波数応答データは、実際にはシミュレーション、周波数応答推定、測定などによって得られます。このデータを使用して数値 frd モデルを作成します。

load wtankData.mat
fsys = frd(response,frequency);
size(fsys)
FRD model with 1 outputs, 1 inputs, and 20 frequency points.

tunablePID 制御設計ブロックで表される調整可能な PI コントローラーを作成します。

C = tunablePID('C','PI');

数値 frd モデルを調整可能な PI コントローラーと接続して、1 つの制御設計ブロック C を含む一般化 frd モデルを作成します。

gsys = feedback(fsys*C,1)
Generalized continuous-time FRD model with 1 outputs, 1 inputs, 20 frequency points, and the following blocks:
  C: Tunable PID controller, 1 occurrences.

Type "frd(gsys)" to see the current value and "gsys.Blocks" to interact with the blocks.

固有振動数と減衰係数が調整可能なパラメーターである 2 次システムの一般化状態空間モデルを作成します。

wn = realp('wn',3);
zeta = realp('zeta',0.8);
sys = tf(1,[(1/wn)^2 2*zeta*(1/wn) 1])
Generalized continuous-time state-space model with 1 outputs, 1 inputs, 2 states, and the following blocks:
  wn: Scalar parameter, 3 occurrences.
  zeta: Scalar parameter, 1 occurrences.

Type "ss(sys)" to see the current value and "sys.Blocks" to interact with the blocks.

genfrd コマンドを使用して、対象の周波数で sys をサンプリングします。結果は sys と同じ調整可能なパラメーターをもつ genfrd モデルになります。

frequency = logspace(-1,2,20);
fsys = genfrd(sys,frequency)
Generalized continuous-time FRD model with 1 outputs, 1 inputs, 20 frequency points, and the following blocks:
  wn: Scalar parameter, 3 occurrences.
  zeta: Scalar parameter, 1 occurrences.

Type "frd(fsys)" to see the current value and "fsys.Blocks" to interact with the blocks.

genfrd モデル fsysgenss モデル sys の対応を確認するには、それらの調整可能なパラメーターをそれぞれの現在の値に設定して両方のモデルの応答をプロットします。

bode(sys,"-",fsys,"g*")
legend

MATLAB figure

ans = 
  Legend (sys, fsys) with properties:

         String: {'sys'  'fsys'}
       Location: 'northeast'
    Orientation: 'vertical'
       FontSize: 8.1000
       Position: [0.8116 0.8583 0.1429 0.0884]
          Units: 'normalized'

  Use GET to show all properties

数値伝達関数モデルを作成し、それを genfrd 形式に変換します。これを行うには、genfrd コマンドを使用して、応答をサンプリングする周波数のベクトルを指定します。

sys = tf(1,[1 1]);
frequency = logspace(-1,2,20);
fsys = genfrd(sys,frequency)
Generalized continuous-time FRD model with 1 outputs, 1 inputs, 20 frequency points, and no blocks.

Type "frd(fsys)" to see the current value and "fsys.Blocks" to interact with the blocks.

結果のモデルは genfrd モデルになります。ただし、fsys に制御設計ブロックは含まれません。

fblocks = fsys.Blocks
fblocks = struct with no fields.


バージョン履歴

R2011a で導入