Main Content

stepinfo

立ち上がり時間、整定時間、および他のステップ応答の特性

説明

stepinfo では、動的システム モデルまたはステップ応答データの配列についてのステップ応答の特性を計算できます。ステップ応答 y(t) について、stepinfo は yinit および yfinal に対する特性を計算します。ここで、yinit は初期オフセット、つまり、ステップが適用される前の値です。yfinal は応答の定常値です。これらの値は使用する構文によって異なります。

  • 動的システム モデル sys の場合、stepinfo は yinit = 0 および yfinal = 定常値を使用します。

  • ステップ応答データの配列 [y,t] の場合、stepinfo は yinit = 0 および yfinal = y の最後のサンプル値を使用します (これらの値を明示的に指定しない場合)。

stepinfo によるステップ応答特性の計算方法の詳細については、アルゴリズムを参照してください。

次の図は、stepinfo で計算されるステップ応答の特性の一部を示したものです。この応答では、t < 0 において y(t) = 0 と仮定しているため、yinit = 0 です。

Step response characteristics. The figure shows peak response, peak time, rise time, settling time, and transient time of the response.

S = stepinfo(sys) は、動的システム モデル sys のステップ応答の特性を計算します。この構文では、yinit = 0 および yfinal = 定常値をこれらの値に依存する特性の計算に使用します。

S = stepinfo(y,t) は、ステップ応答データ y と対応する時間ベクトル t の配列からステップ応答の特性を計算します。SISO システム応答の場合、yt と同じエントリ数をもつベクトルになります。MIMO 応答データの場合、y は各 I/O チャネルの応答を含む配列になります。この構文では、yinit = 0 および yfinal = y の最後の値 (または各チャネルの対応する応答データの最後の値) を使用します。

S = stepinfo(y,t,yfinal) は、定常値 yfinal に対するステップ応答の特性を計算します。この構文は、測定ノイズなどの理由から、予想される定常状態システム応答が y の最後の値とは異なることがわかっている場合に有用です。この構文では yinit = 0 を使用します。

SISO の応答の場合、ty は、同じ長さ NS をもつベクトルです。NU 入力と NY 出力をもつシステムについては、yNS x NY x NU の配列 (step を参照)、yfinalNYNU 列の配列として指定できます。この場合、stepinfo は、NYNU 列の各 I/O ペアに対応する応答特性の構造体配列 S を返します。

S = stepinfo(y,t,yfinal,yinit) は、応答初期値 yinit に対するステップ応答の特性を計算します。この構文は、y データに初期オフセットがある場合、つまりステップ発生前の y が非ゼロである場合に有用です。

SISO の応答の場合、ty は、同じ長さ NS をもつベクトルです。NU 入力と NY 出力をもつシステムについては、yNS x NY x NU の配列、yinitNYNU 列の配列として指定できます。この場合、stepinfo は、NYNU 列の各 I/O ペアに対応する応答特性の構造体配列 S を返します。

S = stepinfo(___,'SettlingTimeThreshold',ST) を使用すると、整定時間および過渡時間の定義に使用されるしきい値 ST を指定できます。既定値は ST = 0.02 (2%) です。この構文では、前述の任意の入力引数の組み合わせで使用できます。

S = stepinfo(___,'RiseTimeLimits',RT) を使用すると、立ち上がり時間の定義に使われる下限と上限のしきい値を指定できます。既定では、立ち上がり時間は、応答が初期値から定常値までの間で 10% から 90% に上がるまでの時間になります (RT = [0.1 0.9])。上限しきい値 RT(2)SettlingMin および SettlingMax の計算にも使用されます。これらの値は、応答が上限しきい値に達した後に発生する応答の最小値と最大値です。この構文では、前述の任意の入力引数の組み合わせで使用できます。

すべて折りたたむ

動的システム モデルの立ち上がり時間、整定時間、オーバーシュートなどのステップ応答の特性を計算します。この例では、連続時間の伝達関数を使用します。

sys=s2+5s+5s4+1.65s3+5s2+6.5s+2

伝達関数を作成してそのステップ応答を確認します。

sys = tf([1 5 5],[1 1.65 5 6.5 2]);
step(sys)

Figure contains an axes object. The axes object contains an object of type line. This object represents sys.

プロットから、応答は数秒間で立ち上がった後、約 2.5 の定常値に下がることがわかります。stepinfo を使用してこの応答の特性を計算します。

S = stepinfo(sys)
S = struct with fields:
         RiseTime: 3.8456
    TransientTime: 27.9762
     SettlingTime: 27.9762
      SettlingMin: 2.0689
      SettlingMax: 2.6873
        Overshoot: 7.4915
       Undershoot: 0
             Peak: 2.6873
         PeakTime: 8.0530

ここで、関数は yinit= 0 を使用して動的システム モデル sys の特性を計算します。

既定では、整定時間は、誤差が |yinit-yfinal| の 2% を下回ったままでいるまでの所要時間になります。結果の S.SettlingTime から、sys ではこの条件が約 28 秒後に発生することがわかります。既定では、立ち上がり時間は、応答が yinit= 0 から yfinal までの間で 10% から 90% に上がるまでの時間として定義されます。S.RiseTime から、sys ではこの立ち上がりが 4 秒未満で発生することがわかります。最大オーバーシュートは S.Overshoot に返されます。このシステムでは、ピーク値 S.Peak が時間 S.PeakTime で発生し、定常値を約 7.5% オーバーシュートします。

MIMO システムの場合、stepinfo は構造体配列を返し、その各エントリはシステムの対応する I/O チャネルの応答特性を含みます。この例では、2 つの出力と 2 つの入力をもつ離散時間システムを使用します。ステップ応答の特性を計算します。

A = [0.68 -0.34; 0.34 0.68];
B = [0.18 -0.05; 0.04 0.11];
C = [0 -1.53; -1.12 -1.10];
D = [0 0; 0.06 -0.37];
sys = ss(A,B,C,D,0.2);

S = stepinfo(sys)
S=2×2 struct array with fields:
    RiseTime
    TransientTime
    SettlingTime
    SettlingMin
    SettlingMax
    Overshoot
    Undershoot
    Peak
    PeakTime

特定の I/O チャネルの応答の特性にアクセスするには、S にインデックスを付けます。たとえば、S(2,1) に対応する、sys の最初の入力から 2 番目の出力への応答の特性を調べます。

S(2,1)
ans = struct with fields:
         RiseTime: 0.4000
    TransientTime: 2.8000
     SettlingTime: 3
      SettlingMin: -0.6724
      SettlingMax: -0.5188
        Overshoot: 24.6476
       Undershoot: 11.1224
             Peak: 0.6724
         PeakTime: 1

特定の値にアクセスするには、ドット表記を使用します。たとえば、(2,1) チャネルの立ち上がり時間を抽出します。

rt21 = S(2,1).RiseTime
rt21 = 0.4000

整定時間および立ち上がり時間の既定の割合は、アルゴリズムの節で説明しているように、SettlingTimeThreshold および RiseTimeThreshold を使用してそれぞれ変更できます。この例では、次で与えられるシステムを使用します。

sys=s2+5s+5s4+1.65s3+6.5s+2

伝達関数を作成します。

sys = tf([1 5 5],[1 1.65 5 6.5 2]);

sys の応答の誤差がギャップ |yfinal-yinit| の 0.5% を下回ったままでいるまでの時間を計算します。そのためには SettlingTimeThreshold を 0.5%、つまり 0.005 に設定します。

S1 = stepinfo(sys,'SettlingTimeThreshold',0.005);
st1 = S1.SettlingTime
st1 = 46.1325

sys の応答が yinit から yfinal までの間で 5% から 95% に上がるまでの時間を計算します。そのためには、RiseTimeThreshold をこれらの範囲を含むベクトルに設定します。

S2 = stepinfo(sys,'RiseTimeThreshold',[0.05 0.95]);
rt2 = S2.RiseTime
rt2 = 4.1690

整定時間と立ち上がり時間の両方の割合を同じ計算で定義できます。

S3 = stepinfo(sys,'SettlingTimeThreshold',0.005,'RiseTimeThreshold',[0.05 0.95])
S3 = struct with fields:
         RiseTime: 4.1690
    TransientTime: 46.1325
     SettlingTime: 46.1325
      SettlingMin: 2.0689
      SettlingMax: 2.6873
        Overshoot: 7.4915
       Undershoot: 0
             Peak: 2.6873
         PeakTime: 8.0530

システムのモデルがない場合でも、ステップ応答データからステップ応答の特性を抽出することができます。たとえば、システムのステップ入力への応答を測定して、結果の応答データを、応答値を含むベクトル y と応答の時間を含むもう 1 つのベクトル t に保存したとします。応答データを読み込んで調べます。

load StepInfoData t y
plot(t,y)

Figure contains an axes object. The axes object contains an object of type line.

stepinfo を使用して、この応答データからステップ応答の特性を計算します。定常状態応答値 yfinal を指定しない場合、stepinfo では、応答ベクトル y の最後の値が定常状態応答であると仮定します。データにはノイズが含まれるため、y の最後の値は実際の定常状態応答値ではない可能性があります。定常値がわかっている場合は、それを stepinfo に対し指定できます。この例では、定常状態応答を 2.4 と仮定します。

S1 = stepinfo(y,t,2.4)
S1 = struct with fields:
         RiseTime: 1.2897
    TransientTime: 19.6478
     SettlingTime: 19.6439
      SettlingMin: 2.0219
      SettlingMax: 3.3302
        Overshoot: 38.7575
       Undershoot: 0
             Peak: 3.3302
         PeakTime: 3.4000

データにノイズがあるため整定時間の既定の定義では厳密すぎ、その結果、ほぼ 20 秒の不特定の値になります。ノイズを考慮するため、整定時間のしきい値を既定の 2% から 5% に増やします。

S2 = stepinfo(y,t,2.4,'SettlingTimeThreshold',0.05)
S2 = struct with fields:
         RiseTime: 1.2897
    TransientTime: 10.4201
     SettlingTime: 10.4149
      SettlingMin: 2.0219
      SettlingMax: 3.3302
        Overshoot: 38.7575
       Undershoot: 0
             Peak: 3.3302
         PeakTime: 3.4000

ピーク偏差 emax がギャップ |yfinal-yinit| (アルゴリズムを参照) と等しければ、整定時間と過渡時間は等しくなります。これには、アンダーシュートやフィードスルーがなく、オーバーシュートが 100% 未満のモデルが該当します。フィードスルーをもつモデル、原点に零点があるモデル、不安定な零点 (アンダーシュート) をもつモデル、オーバーシュートが大きいモデルでは、これらが等しくならない傾向があります。

次のモデルについて考えます。

s = tf('s');
sys1 = 1+tf(1,[1 1]);                        % feedthrough
sys2 = tf([1 0],[1 1]);                      % zero at the origin
sys3 = tf([-3 1],[1 2 1]);                   % non-minimum phase with undershoot
sys4 = (s/0.5 + 1)/(s^2 + 0.2*s + 1);        % large overshoot

step(sys1,sys2,sys3,sys4)
grid on
legend('Feedthrough','Zero at origin','Non-minimum phase with undershoot','Large overshoot')

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent Feedthrough, Zero at origin, Non-minimum phase with undershoot, Large overshoot.

ステップ応答の特性を計算します。

S1 = stepinfo(sys1)
S1 = struct with fields:
         RiseTime: 1.6095
    TransientTime: 3.9121
     SettlingTime: 3.2190
      SettlingMin: 1.8005
      SettlingMax: 2.0000
        Overshoot: 0
       Undershoot: 0
             Peak: 2.0000
         PeakTime: 10.5458

S2 = stepinfo(sys2)
S2 = struct with fields:
         RiseTime: 0
    TransientTime: 3.9121
     SettlingTime: NaN
      SettlingMin: 2.6303e-05
      SettlingMax: 1
        Overshoot: Inf
       Undershoot: 0
             Peak: 1
         PeakTime: 0

S3 = stepinfo(sys3)
S3 = struct with fields:
         RiseTime: 2.9198
    TransientTime: 6.5839
     SettlingTime: 7.3229
      SettlingMin: 0.9004
      SettlingMax: 0.9991
        Overshoot: 0
       Undershoot: 88.9466
             Peak: 0.9991
         PeakTime: 10.7900

S4 = stepinfo(sys4)
S4 = struct with fields:
         RiseTime: 0.3896
    TransientTime: 40.3317
     SettlingTime: 46.5052
      SettlingMin: -0.2796
      SettlingMax: 2.7571
        Overshoot: 175.7137
       Undershoot: 27.9629
             Peak: 2.7571
         PeakTime: 1.8850

プロットと特性を調べます。これらのモデルでは、ピーク偏差が初期値と最終値のギャップよりも大きいため、整定時間と過渡時間が等しくなりません。sys2 のようなモデルの場合、定常値がゼロであるため、整定時間は NaN として返されます。

この例では、初期オフセットをもつステップ応答データからステップ応答の特性を計算します。これは、ステップ発生前の応答データの値が非ゼロであることを意味します。

ステップ応答データを読み込んでプロットを調べます。

load stepDataOffset.mat
plot(stepOffset.Time,stepOffset.Data)

Figure contains an axes object. The axes object contains an object of type line.

yfinal および yinit を指定しない場合、stepinfo では、yfinal は応答ベクトル y の最後の値、yinit はゼロであると仮定します。定常値と初期値がわかっている場合は、それらを stepinfo に対して指定できます。ここでは、応答の定常状態 yfinal は 0.9 で、初期オフセット yinit は 0.2 です。

この応答データからステップ応答の特性を計算します。

S = stepinfo(stepOffset.Data,stepOffset.Time,0.9,0.2)
S = struct with fields:
         RiseTime: 0.0084
    TransientTime: 1.0662
     SettlingTime: 1.0662
      SettlingMin: 0.8461
      SettlingMax: 1.0878
        Overshoot: 26.8259
       Undershoot: 0.0429
             Peak: 0.8878
         PeakTime: 1.0225

ここで、stepinfoyinit からの最大偏差を測定するため、この応答のピーク値は 0.8878 になります。

入力引数

すべて折りたたむ

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

  • tfzpkss モデルなどの連続時間または離散時間の数値 LTI モデル。

  • genssuss (Robust Control Toolbox) モデルなどの一般化された、あるいは不確かさをもつ LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox™ ソフトウェアが必要です。)一般化モデルの場合、stepinfo は、調整可能なブロックの現在の値と不確かさをもつブロックのノミナル値を使用してステップ応答の特性を計算します。

  • idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox) モデルなどの同定された LTI モデル。(同定されたモデルを使用するには System Identification Toolbox™ ソフトウェアが必要です。)

ステップ応答データ。次のいずれかとして指定します。

  • SISO 応答データの場合、長さ Ns のベクトル。Ns は応答データ内のサンプル数です。

  • MIMO 応答データの場合、Ns x Ny x Nu の配列。Ny はシステム出力の数、Nu はシステム入力の数です。

y の応答データに対応する時間ベクトル。長さ Ns のベクトルとして指定します。

定常値。スカラーまたは配列として指定します。

  • SISO 応答データの場合、スカラー値を指定します。

  • MIMO 応答データの場合、NyNu 列の配列を指定します。各エントリは対応するシステム チャネルの定常状態応答値を指定します。

yfinal を指定しない場合、stepinfo は、y の対応するチャネルにある最後の値を定常状態応答値として使用します。

この引数は、入力としてステップ応答データを指定した場合のみサポートされます。入力が動的システム モデル sys の場合、stepinfo は yfinal = 定常値を使用してこの値に依存する特性を計算します。

ステップ発生前の y の値。スカラーまたは配列として指定します。

  • SISO 応答データの場合、スカラー値を指定します。

  • MIMO 応答データの場合、NyNu 列の配列を指定します。各エントリは対応するシステム チャネルの応答初期値を指定します。

yinit を指定しない場合、stepinfo は、応答初期値としてゼロを使用します。

フィードスルーがないシステムでは、t = 0 の応答 y(0) は yinit と等しくなります。ただし、フィードスルーがある場合は、t = 0 の不連続性により、2 つの量は等しくなりません。

たとえば、次の図は、フィードスルーをもつシステム sys = tf([-1 0.2 1],[1 0.7 1]) のステップ応答を示しています。

Step response of a system with feedthrough equal to negative1

ここで、yinit はゼロ、フィードスルーの値は –1 です。

この引数は、入力としてステップ応答データを指定した場合のみサポートされます。入力が動的システム モデル sys の場合、stepinfo は yinit = 0 を使用してこの値に依存する特性を計算します。

整定時間および過渡時間を定義するためのしきい値。0 ~ 1 のスカラー値として指定します。既定の整定時間と過渡時間の定義 (アルゴリズムを参照) を変更するには、ST を異なる値に設定します。たとえば、誤差が 5% を下回る時点を測定するには ST を 0.05 に設定します。

立ち上がり時間を定義するためのしきい値。0 ~ 1 の非降順の値からなる 2 要素の行ベクトルとして指定します。既定の立ち上がり時間の定義 (アルゴリズムを参照) を変更するには、RT を異なる値に設定します。たとえば、立ち上がり時間を応答が初期値から定常値までの間で 5% から 95% に上がるまでの時間として定義するには、RT[0.05 0.95] に設定します。

出力引数

すべて折りたたむ

ステップ応答の特性。次のフィールドを含む構造体として返されます。

  • RiseTime

  • TransientTime

  • SettlingTime

  • SettlingMin

  • SettlingMax

  • Overshoot

  • Undershoot

  • Peak

  • PeakTime

stepinfo によるこれらの特性の定義方法の詳細については、アルゴリズムを参照してください。

MIMO モデルまたは応答データの場合、S は構造体配列になり、各エントリには対応する I/O チャネルのステップ応答の特性が含まれます。たとえば、3 入力 3 出力のモデルまたは応答データの配列を指定した場合、S(2,3) には、3 番目の入力から 2 番目の出力への応答の特性が含まれます。例については、MIMO システムのステップ応答の特性を参照してください。

sys が不安定な場合、すべてのステップ応答の特性は NaN になります。ただし、PeakPeakTime だけは Inf になります。

アルゴリズム

ステップ応答 y(t) について、stepinfo は yinit および yfinal に対する特性を計算します。動的システム モデル sys の場合、stepinfo は yinit = 0 および yfinal = 定常値を使用します。

次の表に、stepinfo による各特性の計算方法を示します。

ステップ応答の特性説明
RiseTime応答が yinit から yfinal までの間で 10% から 90% に上がるまでの時間
TransientTime

t ≥ T において、誤差 |y(t) – yfinal| ≤ SettlingTimeThreshold × emax となる最初の時間 T (ここで emax は、t ≥ 0 における最大誤差 |y(t) – yfinal|)。

既定では、SettlingTimeThreshold = 0.02 (ピーク誤差の 2%) です。過渡時間によって、過渡ダイナミクスが消滅する速度が測定されます。

SettlingTime

t ≥ T において、誤差 |y(t) – yfinal| ≤ SettlingTimeThreshold × |yfinal – yinit| となる最初の時間 T。

既定では、SettlingTime は、誤差が |yfinal – yinit| の 2% を下回ったままでいるまでの所要時間を測定します。

SettlingMin応答が立ち上がったときの y (t) の最小値
SettlingMax応答が立ち上がったときの y (t) の最大値
Overshootオーバーシュートの割合。正規化された応答 ynorm(t) = (y(t) – yinit)/(yfinal – yinit) を基準として、オーバーシュートは零点と 100 × max(ynorm(t) – 1) のうちの大きい方になります。
Undershootアンダーシュートの割合。正規化された応答 ynorm(t) を基準として、アンダーシュートは零点と –100 × max(ynorm(t) – 1) のうちの小さい方になります。
Peak|y(t) – yinit| のピーク値
PeakTimeピーク値が発生する時間

バージョン履歴

R2006a で導入

すべて展開する

R2021b での動作変更

参考

|