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

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

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

zpk

零点-極-ゲイン モデルを作成するか、零点-極-ゲイン モデルに変換する

構文

sys = zpk(z,p,k)
sys = zpk(z,p,k,Ts)
sys = zpk(M)
sys = zpk(z,p,k,ltisys)
s = zpk('s')
z = zpk('z',Ts)
zsys = zpk(sys)
zsys = zpk(sys, 'measured')
zsys = zpk(sys, 'noise')
zsys = zpk(sys, 'augmented')

説明

zpk を使用すると、零点-極-ゲイン モデル (zpk モデル オブジェクト) を作成するか、あるいは動的システムを零点-極-ゲイン形式に変換します。

零点-極-ゲイン モデルの作成

sys = zpk(z,p,k) は、零点 z、極 p、およびゲイン k を備えた連続時間零点-極-ゲイン モデルを作成します。出力 sys はモデル データを格納する zpk モデル オブジェクトです。

SISO の場合、zp は、実数値または複素数値の零点と極のベクトルであり、k は実数値または複素数値のスカラー ゲインです。

零点または極がないシステムでは、z または p[] に設定してください。この 2 つのベクトルは長さが同じである必要はなく、モデルはプロパーである必要はありません (つまり、極が過剰に存在)。

MIMO 零点-極-ゲイン モデルを作成するには、このモデルの各 SISO エントリの零点、極、およびゲインを指定します。この場合、

  • zp は、行数が出力と同じで列数が入力と同じベクトルのセル配列です。k は行数が出力と同じで列数が入力と同じ行列です。

  • ベクトル z{i,j}p{i,j} は、入力 j から出力 i への伝達関数の零点と極を指定します。

  • k(i,j) は、入力 j から出力 i への伝達関数の (スカラー) ゲインを指定します。

MIMO の例は、以下を参照してください。

sys = zpk(z,p,k,Ts) は、サンプル時間 Ts (秒単位) で離散時間零点-極-ゲイン モデルを作成します。サンプル時間を未指定のままにするには、Ts = -1 または Ts = [] を設定します。入力引数 zp、および k は、連続時間の場合と同じです。

sys = zpk(M) は、静的ゲイン M を指定します。

sys = zpk(z,p,k,ltisys) は、プロパティを備えた零点-極-ゲイン モデルを作成します。このプロパティは、LTI モデル ltisys から継承したものです (サンプル時間も含む)。

zpk モデル オブジェクトの配列を作成するには、for ループを使用します。または、zp には多次元セル配列、k には多次元配列を使用します。

これまで説明したどの構文にも、次のプロパティ名/プロパティ値の組み合わせを続けることができます。

'PropertyName',PropertyValue

各組は入力名や入力遅延時間などのモデルの特定のプロパティを指定します。zpk モデル オブジェクトのプロパティの詳細は、「プロパティ」を参照してください。次の点に注意してください。

sys = zpk(z,p,k,'Property1',Value1,...,'PropertyN',ValueN)

は次のコマンドの並びのショートカットです。

sys = zpk(z,p,k)
set(sys,'Property1',Value1,...,'PropertyN',ValueN)

s または z での有理式としての零点-極-ゲイン モデル

また、有理式を使用して ZPK モデルを作成することもできます。そのためには、次のいずれかを入力します。

  • s = zpk('s') は、ラプラス変数 s で有理関数を使用して ZPK モデルを指定します。

  • z = zpk('z',Ts) は、離散時間変数 z で有理関数を使用してサンプル時間が Ts の ZPK モデルを指定します。

これらの変数のいずれかを指定すると、ZPK モデルを有理式として変数 s または z で直接指定することができるようになります。そのためには、伝達関数を有理式として s または z に入力します。

零点-極-ゲイン形式への変換

zsys = zpk(sys) は、任意の LTI モデル sys を零点-極-ゲイン形式に変換します。出力 zsys は ZPK オブジェクトです。既定では、状態空間から零点-極-ゲインに変換するとき、zpkzero を使用して零点を計算します。あるいは、

zsys = zpk(sys,'inv')

は状態空間モデルの反転公式を使用して、零点を計算します。このアルゴリズムは高速ですが、s = 0 では低ゲインの高次モデルで精度が低下します。

同定されたモデルの変換

特定されたモデルは形式 y(t) = Gu(t) + He(t) の入出力式によって表されます。ここで u(t) は測定された入力チャンネルであり、e(t) はノイズ チャンネルを表します。Λ= LL' がノイズ e(t) の共分散を表す場合、この式は y(t) = Gu(t) + HLv(t) のように記述することもできます (cov(v(t)) = I)。

zsys = zpk(sys) または zsys = zpk(sys, 'measured') は、同定された線形モデルの測定成分を ZPK 形式に変換します。sys はタイプ idssidprocidtfidpoly または idgrey のモデルです。zsysuy の関係を表します。

zsys = zpk(sys, 'noise') は同定された線形モデルのノイズ成分を ZPK 形式に変換します。これは、ノイズ入力 v(t) と出力 y_noise = HL v(t) の関係を表します。ノイズ入力チャンネルは、InputGroup 'Noise' に属します。ノイズ入力チャンネルの名前は v@yname であり、ここで yname は対応する出力チャンネルの名前です。zsys には出力と同じ数の入力があります。

zsys = zpk(sys, 'augmented') は測定されたダイナミクスとノイズ ダイナミクスの両方を ZPK モデルに変換します。zsys には、最初の nu 入力がチャンネル u(t) を表し、残りはチャンネル別にノイズ チャンネル v(t) を表す ny+nu 入力があります。zsys.InputGroup には、'measured''noise' の 2 つの入力グループがあります。 zsys.InputGroup.Measured1:nu に設定され、zsys.InputGroup.Noisenu+1:nu+ny. zsys に設定され、式 y(t) = [G HL] [u; v] を表します。

    ヒント:   同定された非線形モデルは ZPK システムに変換できません。linearizelinapp などの線形近似関数を使用します。

変数の選択

伝達関数の場合、零点-極-ゲイン モデルの表示に使用する変数を指定することができます。使用できる選択肢は、連続時間モデルでは s (既定値) と p、離散時間モデルでは z (既定値)、z-1、q-1 (z-1 と等価)、または q (z と等価) です。既定値をオーバーライドするには、'Variable' プロパティを再度割り当てます。変数を変更しても、影響を受けるのは零点-極-ゲイン モデルの表示だけです。

プロパティ

zpk オブジェクトには次のプロパティがあります。

z

システムの零点。

z プロパティは、伝達関数零点を格納します (分子の根)。SISO モデルの場合、z は零点を含むベクトルです。Ny 出力および Nu 入力のある MIMO モデルの場合、z は各入出力の組用の零点のベクトルの NyNu 列のセル配列です。

p

システムの極

p プロパティは、伝達関数極を格納します (分母の根)。SISO モデルの場合、p は極を含むベクトルです。Ny 出力および Nu 入力のある MIMO モデルの場合、p は各入出力の組用の極のベクトルの NyNu 列のセル配列です。

k

システム ゲイン。

k プロパティは伝達関数ゲインを格納します。SISO モデルの場合、k はスカラー値です。Ny 出力および Nu 入力のある MIMO モデルの場合、k は各入出力の組用のゲインを格納する NyNu 列の行列です。

DisplayFormat

分子と分母の多項式を表示するために因数分解する方法を指定する文字列。

分子と分母の多項式は、1 次と 2 次の係数の積としてそれぞれ表示されます。DisplayFormat はその係数の表示を制御します。DisplayFormat は次の値をとることができます。

  • 'roots' (既定) — 多項式の根の位置に関する係数を表示します。

  • 'frequency' — 根の固有振動数 ω0 と減衰比 ζ に関する係数を表示します。

    'frequency' 表示形式は、Variable の値 'z^-1' または 'q^-1' をもつ離散時間モデルには使用できません。

  • 'time constant' — 根の時定数 τ と減衰比 ζ に関する係数を表示します。

    'time constant' 表示形式は、Variable の値 'z^-1' または 'q^-1' をもつ離散時間モデルには使用できません。

連続時間モデルの場合、下の表は多項式の係数が各表示形式でどのように書き込まれるかを示します。

DisplayName1 次係数 (実根 R)2 次係数 (複素根ペア R = a±jb)
'roots'(s – R)(s2 – αs + β)、ここで α = 2a、β = a2 + b2
'frequency'(1 – s/ω0)、ここで ω0 = R1 – 2ζ(s/ω0) + (s/ω0)2、ここで ω02 = a2 + b2、ζ = a/ω0
'time constant'(1 – τs)、ここで τ = 1/R1 – 2ζ(τs) + (τs)2、ここで τ = 1/ω0、ζ = aτ

離散時間モデルの場合、多項式の係数は以下の変数の代入により連続時間で記述されます。

ここで Ts はサンプル時間になります。離散時間では、τ と ω0 は、等価な連続時間根の時定数と固有振動数と厳密に一致します。ただし、|z–1| ≪ Ts0 ≪ π/Ts  = ナイキスト周波数)。

既定値: 'roots'

Variable

伝送関数表示変数を指定する文字列。Variable は次の値をとることができます。

  • 's' — 連続時間モデルの場合の既定値

  • 'z' — 離散時間モデルの既定値

  • 'p' — と等価 's'

  • 'q' — と等価 'z'

  • 'z^-1' — の逆 'z'

  • 'q^-1' — と等価 'z^-1'

Variable の値は、zpk モデルの表示にのみ影響します。

既定値: 's'

ioDelay

転送遅延。ioDelay は各入出力の組に対する独立した転送遅延を指定する数値配列です。

連続時間システムの場合、TimeUnit プロパティに格納された時間単位で転送遅延を指定します。離散時間システムの場合、サンプリング周期 Ts の整数倍で転送遅延を指定します。

Ny 出力と Nu 入力を伴う MIMO システムの場合、ioDelayNyNu 列の配列に設定します。この配列の各エントリは、対応する入出力の組の転送遅延を表す数値です。ioDelay をスカラー値に設定して、同一の遅延をすべての入出力の組に適用することもできます。

既定値: すべての入出力の組み合わせに対して 0

InputDelay

入力遅延。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 と設定します。

このプロパティを変更してもモデルの離散化やリサンプルは行われません。c2dd2c を使用して、連続時間表現と離散時間表現の間の変換を行います。d2d を使用して、離散時間システムのサンプリング時間を変更します。

既定値: 0 (連続時間)

TimeUnit

時間変数の単位を表す文字列。連続時間モデルの場合、このプロパティはモデルにおける任意のむだ時間を表します。離散時間モデルの場合はサンプリング時間 Ts を表します。以下のいずれかの値を使用します。

  • 'nanoseconds'

  • 'microseconds'

  • 'milliseconds'

  • 'seconds'

  • 'minutes'

  • 'hours'

  • 'days'

  • 'weeks'

  • 'months'

  • 'years'

このプロパティを変更すると、システム全体の動作が変更されます。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

既定値: 'seconds'

InputName

入力チャンネル名。単入力モデルでは、InputName を文字列に設定します。多入力モデルの場合は、InputName を文字列のセル配列に設定します。

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

sys.InputName = 'controls';

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

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

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

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

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

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

既定値: すべての入力チャンネルに対して空の文字列 ''

InputUnit

入力チャンネル単位。InputUnit を使用して入力信号単位を記録します。単入力モデルの場合、InputUnit を文字列に設定します。多入力モデルの場合は、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

出力チャンネル名。単出力モデルでは、OutputName を文字列に設定します。多出力モデルの場合は、OutputName を文字列のセル配列に設定します。

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

sys.OutputName = 'measurements';

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

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

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

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

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

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

既定値: すべての入力チャンネルに対して空の文字列 ''

OutputUnit

出力チャンネル単位。OutputUnit を使用して出力信号単位を記録します。単出力モデルの場合、OutputUnit を文字列に設定します。多出力モデルの場合は、OutputUnit を文字列のセル配列に設定します。OutputUnit はシステム動作には影響しません。

既定値: すべての入力チャンネルに対して空の文字列 ''

OutputGroup

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

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

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

sys('measurement',:)

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

Name

システム名。システムをラベル付けする文字列に Name を設定します。

既定値: ''

Notes

システムに関連付ける任意のテキスト。文字列または文字列のセル配列のいずれかに Notes を設定します。

既定値: {}

UserData

システムに関連付ける任意のデータ型。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
 
...

既定値: []

例 1

連続時間 SISO 伝達関数を作成します。

h(s) を zpk オブジェクトとして作成します。

h = zpk(0, [1-i 1+i 2], -2);

例 2

次の 1 入力/2 出力の零点-極-ゲイン モデルを指定します。

このためには、次のように入力します。

z = {[] ; -0.5};
p = {0.3 ; [0.1+i 0.1-i]};
k = [1 ; 2];
H = zpk(z,p,k,-1);    % unspecified sample time

例 3

次の伝達関数を

h = tf([-10 20 0],[1 7 20 28 19 5]);

次を使用して、零点-極-ゲイン形式に変換します。

zpk(h)

このコマンドは次の結果を返します。

Zero/pole/gain:
     -10 s (s-2)
----------------------
(s+1)^3 (s^2 + 4s + 5)

例 4

変数 z の有理式から離散時間 ZPK モデルを作成します。

z = zpk('z',0.1); 
H = (z+.1)*(z+.2)/(z^2+.6*z+.09)

このコマンドで次の結果が出力されます。

Zero/pole/gain:
(z+0.1) (z+0.2)
---------------
   (z+0.3)^2
 
Sampling time: 0.1

例 5

零点と極のセル配列を使用して MIMO zpk モデルを作成します。

2 入力/2 出力の零点-極-ゲイン モデル

を、次を入力して作成します。

Z = {[],-5;[1-i 1+i] []};

P = {0,[-1 -1];[1 2 3],[]};

K = [-1 3;2 0];

H = zpk(Z,P,K);

H(s) の対応する要素に零点または極がない場合は、[]Z または P のプレース ホルダーとして使用します。

例 6

同定された多項式モデルの測定成分とノイズ成分を 2 つの別々の ZPK モデルに抽出します。前者 (測定された成分) はプラント モデルとなることができ、後者は制御システム設計の外乱モデルとなることができます。

load icEngine
z = iddata(y,u,0.04);
nb = 2; nf = 2; nc = 1; nd = 3; nk = 3;
sys = bj(z, [nb nc nd nf nk]);

sysy(t) = B/F u(t) + C/D e(t) 形式のモデルで、B/F は測定された成分、C/D はノイズ成分を表します。

sysMeas = zpk(sys, 'measured') 

あるいは、zpk(sys) を使用して測定された成分を抽出することもできます。

sysNoise = zpk(sys, 'noise')

詳細

すべて展開する

アルゴリズム

zpk は、MATLAB 関数 roots を使用して伝達関数を変換し、関数 zeropole を使用して状態空間モデルを変換します。

参考

| | | | |

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