Main Content

absorbDelay

むだ時間を z = 0 または移相シフトでの極に置き換える

説明

absorbDelay は、むだ時間を除去し、それらを追加のシステム ダイナミクスまたは周波数応答データにモデル化するために使用します。

  • 離散時間モデル (周波数応答データ モデルを除く) の場合、関数は k サンプリング周期の遅延を z = 0 での k 極に置き換えます。連続時間モデル (周波数応答データ モデルを除く) の場合、むだ時間は有限個の極と零点による正確な表現をもちません。そのため、pade を使用してむだ時間の有理数近似を計算します。

  • 連続時間と離散時間の両方の周波数応答データ モデルの場合、absorbDelay はすべてのむだ時間を位相シフトとして周波数応答データ内に吸収します。

sysnd = absorbDelay(sysd) は、動的システム モデル sysd のすべてのむだ時間をシステムのダイナミクスまたは周波数応答データに吸収します。システム ダイナミクス内へのむだ時間の吸収

sysnd = absorbDelay(sysd,scope) は、吸収する遅延群を指定します。 (R2024a 以降)

[sysnd,G] = absorbDelay(___) は、行列 G を返します。これは ss モデル sysd の初期状態を sysnd の初期状態にマッピングします。

すべて折りたたむ

むだ時間がある離散時間伝達関数を作成します。

z = tf('z',-1);
sysd = (-0.4*z -0.1)/(z^2 + 1.05*z + 0.08);
sysd.InputDelay = 3
sysd =
 
              -0.4 z - 0.1
  z^(-3) * -------------------
           z^2 + 1.05 z + 0.08
 
Sample time: unspecified
Discrete-time transfer function.

伝達関数分母に現れるシステムの極とは別に、sysd の表示は、InputDelayz^(-3) の係数として表します。

そのむだ時間を、z= 0 の極としてシステム ダイナミクス内に吸収します。

sysnd = absorbDelay(sysd)
sysnd =
 
        -0.4 z - 0.1
  -------------------------
  z^5 + 1.05 z^4 + 0.08 z^3
 
Sample time: unspecified
Discrete-time transfer function.

sysnd の表示は、z^(-3) の係数が追加の極として分母に吸収されていることを示します。

sysnd に入力遅延がないことを確認します。

sysnd.InputDelay
ans = 
0

離散時間多項式モデルを作成します。

m = idpoly(1,[0 0 0 2 3]);

m を伝達関数モデルに変換します。

sys = tf(m)
sys =
 
  z^(-2) * (2 z^-1 + 3 z^-2)
 
Sample time: unspecified
Discrete-time transfer function.

伝達関数 sys の分子は [0 2 3] であり、伝達遅延 sys.IODelay は 2 です。これは、B 多項式の値である m.B の先頭に 3 つのゼロが付加されているためです。固定された最初のゼロは、モデル内に直達がないことを示しています。その後ろの 2 つのゼロは、入力 - 出力遅延として扱われます。

先頭のゼロを通常の B 係数として扱うには、absorbDelay を使用します。

m2 = absorbDelay(m);
sys2 = tf(m2)
sys2 =
 
  2 z^-3 + 3 z^-4
 
Sample time: unspecified
Discrete-time transfer function.

sys2 の分子は [0 0 0 2 3] であり、伝達遅延は 0 です。モデル m2 は値を解放することによって、先頭のゼロを通常の係数として扱います。m2.Structure.B.Free(2:3)TRUE ですが、m.Structure.B.Free(2:3)FALSE になります。

R2024a 以降

この例では、関数 absorbDelay を使用して特定の遅延タイプを吸収する方法を示します。

入力チャネルと出力チャネルおよび I/O ペア間に遅延がある MIMO モデルを考えます。

rng(0)
sys = drss(3,2,3);
sys.InputDelay = [1 0 4];
sys.OutputDelay = [3 1];
sys.IODelay = [0 1 2;3 0 1];

出力チャネルの遅延と I/O ペア間の遅延を吸収します。

sysnd = absorbDelay(sys,["output","io"]);

システムに入力チャネルの遅延のみが含まれることを確認します。

sysnd.InputDelay
ans = 3×1

     1
     0
     4

sysnd.OutputDelay
ans = 2×1

     0
     0

sysnd.IODelay
ans = 2×3

     0     0     0
     0     0     0

遅延を吸収しても、sys の応答は sysnd の応答と厳密に一致します。

step(sys,sysnd,'r--')

MATLAB figure

入力引数

すべて折りたたむ

むだ時間をもつ動的システム。SISO または MIMO の動的システム モデルとして指定します。使用できる動的システムには次のようなものがあります。

  • tf モデル、zpk モデル、ss モデルなどの離散時間 LTI モデル。

  • sparss モデルや mechss モデルなどの離散時間スパース モデル。

  • genssuss (Robust Control Toolbox) モデルなどの一般化された、あるいは不確かさをもつ離散時間 LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox™ のライセンスが必要です。)

    結果のモデルでは以下が仮定されます。

    • 調整可能な制御設計ブロックについては調整可能なコンポーネントの現在値

    • 不確かさをもつ制御設計ブロックについてはモデルのノミナル値

  • 周波数応答モデル。

連続時間パラメトリック モデルの場合は pade を使用します。

R2024a 以降

吸収する遅延のタイプ。次の値のいずれかとして指定します。

  • "input" — 入力遅延のみを吸収し、他の遅延は変更しません。

  • "output" — 出力遅延のみを吸収し、他の遅延は変更しません。

  • "internal" — 内部遅延のみを吸収し、他の遅延は変更しません。

  • "io" — I/O チャネル遅延 (MIMO モデル) のみを吸収し、他の遅延は変更しません。

  • 配列 — 配列内の指定した遅延の組み合わせのみを吸収し、他の遅延は変更しません。たとえば、出力遅延と内部遅延のみを吸収するには、配列 ["output","io"] を使用します。

出力引数

すべて折りたたむ

遅延のない動的システム モデル。sysd と同じタイプのモデルとして返されます。

状態空間モデル sysd の状態 x0 の、sysnd の初期状態へのマッピング。行列として返されます。sysnd の初期条件は G*x0 です。

バージョン履歴

R2011b で導入

すべて展開する