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

genss

一般化状態空間モデル

説明

一般化状態空間 (genss) モデルは、調整可能なパラメーターまたはコンポーネントを含む状態空間モデルです。genss モデルは、数値 LTI モデルを調整可能なコンポーネント (制御設計ブロック) を含むモデルと組み合わせたときに発生します。数値 LTI モデルと制御設計ブロックの詳細は、調整可能な係数をもつモデルを参照してください。

一般化状態空間モデルを使用すると、固定および調整可能なコンポーネントが混在している制御システムを表すことができます。一般化状態空間モデルは、systunelooptune といったコマンドを使用したパラメーター調査やパラメーター調整などの制御設計作業に使用します。

構築

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

  • seriesparallellft、または connect か、算術演算子 +-*/\、および ^ を使用して数値 LTI モデルと制御設計ブロックを組み合わせる。

  • tf または ss で、数値配列ではなく一般化行列 (genmat) である 1 つ以上の入力引数を使用する。

  • 以下を使用して、sys などの任意の数値 LTI モデル、制御設計ブロックまたは slTuner インターフェイス (Simulink® Control Design™ が必要) を genss 型に変換する:

    gensys = genss(sys)

    sysslTuner インターフェイスである場合、gensys にはこのインターフェイスで指定されたすべての調整可能なブロックおよび解析ポイントが含まれます。特定の I/O 伝達関数の調整可能なモデルを計算するには、getIOTransfer(gensys,in,out) を呼び出します。ここで、in および out は対象となる解析ポイントです(getPoints(sys) を使用して解析ポイントの完全なリストを取得します)。同様に、特定の開ループ伝達関数の調整可能なモデルを計算するには、getLoopTransfer(gensys,loc) を使用します。ここで、loc は対象となる解析ポイントです。

プロパティ

Blocks

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

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

M.Blocks.a.Value = -1;

A,B,C,D

調整可能なパラメーターおよび不確かさをもつパラメーターに対する状態空間行列の依存関係。一般化行列 (genmat)、不確かさをもつ行列 (umat)、または double 配列として格納されます。

これらのプロパティは、静的な制御設計ブロック realpurealucomplex、または ucomplexm に対する状態空間行列の依存関係をモデル化します。tunableGaintunableSS などの動的な制御設計ブロックはそれらの現在の値に設定され、内部遅延はゼロに設定されます。

対応する状態空間行列が静的な制御設計ブロックに一切依存しない場合、これらのプロパティは double 行列として評価されます。

例については、状態空間行列のパラメーターへの依存関係を参照してください。

E

E 行列。一般化状態空間方程式が陰的である場合、double 行列として格納されます。値 E = [] は、一般化状態空間方程式が陽的であることを意味します。陰的な状態空間モデルの詳細については、状態空間モデルを参照してください。

StateName

状態名。次のいずれかとして格納されます。

  • 文字ベクトル — 'velocity' などの 1 次モデルの場合。

  • 文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合 (たとえば {'position';'velocity'} など)。

  • '' — 名前のない状態の場合。

genss モデルに状態名を割り当てることができるのは、そのすべての制御設計ブロックが静的な場合のみです。それ以外の場合、コンポーネント モデルを相互接続して genss モデルを作成する前に、コンポーネント モデルに状態名を指定します。これを行うと、genss モデルは割り当てられた状態名を追跡します。例については、一般化状態空間モデルの状態名の追跡を参照してください。

既定値: すべての状態に対して ''

StateUnit

状態単位のラベル。次のいずれかとして格納されます。

  • 文字ベクトル — 'm/s' などの 1 次モデルの場合。

  • 文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合 (たとえば {'m';'m/s'} など)。

  • '' — 名前のない状態の場合。

StateUnit は便宜上、各状態の単位にラベルを付けますが、システムの動作には影響しません。

genss モデルに状態単位を割り当てることができるのは、そのすべての制御設計ブロックが静的な場合のみです。それ以外の場合、コンポーネント モデルを相互接続して genss モデルを作成する前に、コンポーネント モデルに状態単位を指定します。これを行うと、genss モデルは割り当てられた状態単位を追跡します。例については、一般化状態空間モデルの状態名の追跡を参照してください。

既定値: すべての状態に対して ''

InternalDelay

内部遅延を格納するベクトル。

内部遅延は、たとえば、システムで遅延のあるフィードバック ループを閉じるときや、遅延システムを順番にまたは並列で接続するときに生じます。内部遅延の詳細については、むだ時間のある閉フィードバック ループを参照してください。

連続時間モデルの場合、内部遅延はモデルの TimeUnit プロパティで指定された時間単位で表現されます。離散時間モデルの場合、内部遅延はサンプル時間 Ts の整数倍として表現されます。たとえば InternalDelay = 3 は 3 サンプリング周期の遅延を意味します。

内部遅延の値は変更できます。ただし、sys.InternalDelay のエントリの数は、モデルの構造に組み込まれているので変更できません。

InputDelay

各入力チャネルの入力遅延。スカラー値または数値ベクトルとして指定します。連続時間システムの場合、TimeUnit プロパティに格納された時間単位で入力遅延を指定します。離散時間システムの場合、サンプル時間 Ts の整数倍で入力遅延を指定します。たとえば、InputDelay = 3 は 3 サンプル時間の遅延を意味します。

Nu 入力のあるシステムの場合、InputDelayNu 行 1 列のベクトルに設定します。このベクトルの各エントリは、対応する入力チャネル用の入力遅延を表す数値です。

InputDelay をスカラー値に設定して、同一の遅延をすべてのチャネルに適用することもできます。

既定値: 0

OutputDelay

出力遅延。OutputDelay は、各出力チャネル用のむだ時間を指定する数値ベクトルです。連続時間システムの場合、TimeUnit プロパティに格納された時間単位で出力遅延を指定します。離散時間システムの場合、サンプル時間 Ts の整数倍で出力遅延を指定します。たとえば OutputDelay = 3 は 3 サンプリング周期の遅延を意味します。

Ny 出力のあるシステムの場合、OutputDelayNy 行 1 列のベクトルに設定します。ここで、それぞれのエントリは、対応する出力チャネル用の出力遅延を表す数値です。OutputDelay をスカラー値に設定して、同一の遅延をすべてのチャネルに適用することもできます。

既定値: すべての出力チャネルに対して 0

Ts

サンプル時間。連続時間モデルの場合、Ts = 0。離散時間モデルの場合、Ts はサンプリング周期を表す正のスカラーです。この値は、モデルの TimeUnit プロパティで指定される単位で表されます。指定のないサンプル時間を伴う離散時間モデルを示すには、Ts = -1 と設定します。

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

既定値: 0 (連続時間)

TimeUnit

モデル内の時間変数、サンプル時間 Ts および何らかのむだ時間の単位。以下のいずれかの値として指定します。

  • 'nanoseconds'

  • 'microseconds'

  • 'milliseconds'

  • 'seconds'

  • 'minutes'

  • 'hours'

  • 'days'

  • 'weeks'

  • 'months'

  • 'years'

このプロパティを変更しても他のプロパティには影響しないため、システム全体の動作が変更されます。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

既定値: 'seconds'

InputName

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

  • 文字ベクトル — 単入力モデルの場合 (たとえば 'controls' など)。

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

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

sys.InputName = 'controls';

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

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

以下を含めて、入力チャネル名はいくつかの用途をもちます。

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

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

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

既定値: すべての入力チャネルに対する ''

InputUnit

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

  • 文字ベクトル — 単入力モデルの場合 (たとえば 'seconds' など)。

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

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

既定値: すべての入力チャネルに対する ''

InputGroup

入力チャネル グループ。InputGroup プロパティによって、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照することができます。入力グループを構造体として指定します。この構造体においてフィールド名はグループ名であり、フィールド値は各グループに属する入力チャネルです。以下に例を示します。

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

これは、入力チャネル 1、2 および 3、5 をそれぞれ含む controls および noise という名前の入力グループを作成します。その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。

sys(:,'controls')

既定値: フィールドのない構造体

OutputName

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

  • 文字ベクトル — 単出力モデルの場合。たとえば、'measurements' とします。

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

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

sys.OutputName = 'measurements';

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

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

以下を含めて、出力チャネル名はいくつかの用途をもちます。

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

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

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

既定値: すべての出力チャネルに対して ''

OutputUnit

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

  • 文字ベクトル — 単出力モデルの場合。たとえば、'seconds' とします。

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

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

既定値: すべての出力チャネルに対して ''

OutputGroup

出力チャネル グループ。OutputGroup プロパティによって、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照できます。出力グループを構造体として指定します。この構造体内においてフィールド名はグループ名であり、フィールド値は各グループに属する出力チャネルです。以下に例を示します。

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

これは、出力チャネル 1 および 3、5 をそれぞれ含む temperature および measurement という名前の出力グループを作成します。その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。

sys('measurement',:)

既定値: フィールドのない構造体

Name

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

既定値: ''

Notes

システムに関連付ける任意のテキスト。string または文字ベクトルの cell 配列として格納されます。プロパティには指定したデータ型が格納されます。たとえば、sys1sys2 が動的システム モデルである場合、その Notes プロパティを次のように設定できます。

sys1.Notes = "sys1 has a string.";
sys2.Notes = 'sys2 has a character vector.';
sys1.Notes
sys2.Notes
ans = 

    "sys1 has a string."


ans =

    'sys2 has a character vector.'

既定値: [0×1 string]

UserData

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

既定値: []

SamplingGrid

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

1 つまたは複数の独立変数をサンプリングすることによって得られるモデル配列の場合、このプロパティは配列内の各モデルに関連付けられた変数値を追跡します。この情報はモデル配列を表示またはプロットすると表示されます。この情報を使用して、結果を独立変数まで遡ります。

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

たとえば、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 のコマンドである linearizeslLinearizer は、この方法で SamplingGrid に入力します。

既定値: []

すべて折りたたむ

この例は、1 つの調整可能なパラメーター a をもつローパス フィルターを作成する方法を示します。

tunableTF を使用して F を表すことはできません。その理由は、tunableTF ブロックの分子と分母の係数が独立しているためです。代わりに、調整可能な実数パラメーター オブジェクト realp を使って F を構築します。

初期値 10 を使用して調整可能な実数パラメーターを作成します。

a = realp('a',10);

調整可能なフィルター F を作成するには、tf を使用します。

F = tf(a,[1 a]);

F は、Blocks プロパティに調整可能なパラメーター a をもつ genss オブジェクトです。F を他の調整可能なモデルまたは数値モデルと接続して、より複雑な制御システムのモデルを作成できます。例については、調整可能なコンポーネントを含む制御システムを参照してください。

この例は、固定パラメーターと調整可能なパラメーターの両方をもつ状態空間 (genss) モデルを作成する方法を示します。

ここで ab は初期値がそれぞれ -13 の調整可能パラメーターです。

realpを使用して調整可能なパラメーターを作成します。

a = realp('a',-1);
b = realp('b',3);

ab の代数式を使って一般化行列を定義します。

A = [1 a+b;0 a*b];

A は、Blocks プロパティに ab を含む一般化行列です。ab の初期値からの A の初期値は [1 2;0 -3] です。

固定値状態空間行列を作成します。

B = [-3.0;1.5];
C = [0.3 0];
D = 0;

ssを使用して状態空間モデルを作成します。

sys = ss(A,B,C,D)
sys =

  Generalized continuous-time state-space model with 1 outputs, 1 inputs, 2 states, and the following blocks:
    a: Scalar parameter, 2 occurrences.
    b: Scalar parameter, 2 occurrences.

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

sys は、調整可能なパラメーター a および b を含む一般化 LTI モデル (genss) です。sysA プロパティが一般化行列として格納されることを確認します。

sys.A
ans =

  Generalized matrix with 2 rows, 2 columns, and the following blocks:
    a: Scalar parameter, 2 occurrences.
    b: Scalar parameter, 2 occurrences.

Type "double(ans)" to see the current value, "get(ans)" to see all properties, and "ans.Blocks" to interact with the blocks.

この例では、固定されたプラントとセンサー ダイナミクスおよび調整可能な制御コンポーネントの両方をもつ制御システムの調整可能モデルを作成する方法を示します。

次の図の制御システムについて考えます。

プラント応答は で、センサー ダイナミクスのモデルは であると仮定します。コントローラー は調整可能な PID コントローラーであり、プレフィルター は 1 つの調整可能なパラメーター a をもつローパス フィルターです。

プラントとセンサー ダイナミクスを表すモデルを作成します。プラントとセンサー ダイナミクスは固定なので、それらを数値 LTI モデルで表します。

G = zpk([],[-1,-1],1);
S = tf(5,[1 4]);

調整可能なコンポーネントをモデル化するには、制御設計ブロックを使用します。コントローラー C の調整可能な表現を作成します。

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

CtunablePID オブジェクトであり、事前定義された比例-積分-微分 (PID) 構造をもつ制御設計ブロックです。

1 つの調整可能なパラメーターをもつフィルター のモデルを作成します。

a = realp('a',10); 
F = tf(a,[1 a]);

a は、初期値 10 の realp (実数の調整可能なパラメーター) オブジェクトです。atf 内の係数として使用すると、調整可能な genss モデル オブジェクト F が作成されます。

モデルを相互接続して r から y への完全な閉ループ応答のモデルを作成します。

T = feedback(G*C,S)*F
T =

  Generalized continuous-time state-space model with 1 outputs, 1 inputs, 5 states, and the following blocks:
    C: Parametric PID controller, 1 occurrences.
    a: Scalar parameter, 2 occurrences.

Type "ss(T)" to see the current value, "get(T)" to see all properties, and "T.Blocks" to interact with the blocks.

Tgenss モデル オブジェクトです。数値 LTI モデルのみを接続することによって構成される統合モデルとは対照的に、T は制御システムの調整可能な要素を記録しています。調整可能な要素は、genss モデル オブジェクトの Blocks プロパティに格納されます。T の調整可能な要素を調べます。

T.Blocks
ans = struct with fields:
    C: [1x1 tunablePID]
    a: [1x1 realp]

調整可能なコンポーネントをもつ制御システムの genss モデルを作成する場合は、systune などの調整コマンドを使用して、指定した設計要件を満たすように自由パラメーターを調整できます。

ラベル付きの状態名をもつ genss モデルを作成します。これを行うには、コンポーネント モデルを相互接続する前に、コンポーネントの LTI モデルの状態にラベルを付けます。たとえば、2 状態の固定係数プラント モデルと 1 状態の調整可能なコントローラーを接続します。

A = [-1 -1; 1 0];
B = [1; 0];
C = [0 1];
D = 0;
G = ss(A,B,C,D);
G.StateName = {'Pstate1','Pstate2'};

C = tunableSS('C',1,1,1);

L = G*C;

genss モデル L は、これを作成したコンポーネントの状態名を維持します。調整可能なコンポーネント C には状態名を割り当てていないため、ソフトウェアが自動的に状態名を割り当てます。確認するには、L の状態名を調べます。

L.StateName
ans = 3x1 cell array
    {'Pstate1'}
    {'Pstate2'}
    {'C.x1'   }

制御設計ブロックに状態名が自動的に割り当てられることで、一般化モデルのどの状態が調整可能コンポーネントから得られたものかを追跡することができます。

状態名は、genss モデルを固定係数状態空間モデルに変換した場合にも維持されます。これを確認するには、Lss 形式に変換します。

Lfixed = ss(L);
Lfixed.StateName
ans = 3x1 cell array
    {'Pstate1'}
    {'Pstate2'}
    {'C.x1'   }

genss モデルの StateUnit プロパティに格納される状態単位ラベルも同様に動作します。

調整可能パラメーターのある一般化モデルを作成し、そのパラメーターに対する A 行列の依存関係を調べます。これを行うには、一般化モデルの A プロパティを確認します。

G = tf(1,[1 10]);
k = realp('k',1);
F = tf(k,[1 k]);
L1 = G*F;
L1.A
ans =

  Generalized matrix with 2 rows, 2 columns, and the following blocks:
    k: Scalar parameter, 2 occurrences.

Type "double(ans)" to see the current value, "get(ans)" to see all properties, and "ans.Blocks" to interact with the blocks.

A プロパティは、調整可能な実数パラメーター k への依存関係を維持する一般化行列です。状態空間行列のプロパティ ABC、および D は、静的パラメーターへの依存関係のみを維持します。genss モデルが動的な制御設計ブロックをもつ場合、状態空間行列のプロパティを評価する際、これらはその現在値に設定されます。たとえば、調整可能な PI ブロックをもつ genss モデルの A 行列プロパティを調べます。

C = tunablePID('C','PI');
L2 = G*C;
L2.A
ans = 2×2

  -10.0000    0.0010
         0         0

ここで A 行列は double 行列として格納され、その値は L2 の現在の値の A 行列です。

L2cur = ss(L2);
L2cur.A
ans = 2×2

  -10.0000    0.0010
         0         0

また、ssdata を使用して状態空間行列を抽出すると、静的ブロックも含め、すべての制御設計ブロックがその現在の値またはノミナル値に設定されます。したがって、以下の操作はすべて L1A 行列の現在の値を返します。

[A,B,C,D] = ssdata(L1);
A
A = 2×2

   -10     1
     0    -1

double(L1.A)
ans = 2×2

   -10     1
     0    -1

L1cur = ss(L1);
L1cur.A
ans = 2×2

   -10     1
     0    -1

ヒント

  • genss モデルは通常の ss モデルとして扱うことができます。bodestep などの解析コマンドは、調整可能な各パラメーターをその現在の値に置き換えることによってモデルを評価します。

R2011a で導入