Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

impulse

動的システムのインパルス応答プロット、インパルス応答データ

    説明

    [y,tOut] = impulse(sys) は動的システム sys のインパルス応答 y を計算します。時間ベクトル tOutsys の時間単位で表されます。impulse では、システム ダイナミクスに基づいてシミュレーションのタイム ステップと期間が自動的に決まります。

    [y,tOut] = impulse(sys,tFinal) は、t = 0 から終了時間 t = tFinal までのインパルス応答を計算します。

    [y,tOut] = impulse(sys,[t0,tFinal]) は、t0 から tFinal までの応答を計算します。インパルス遅延 td を指定した応答構成 config では、関数は時間 t = t0 + td におけるインパルスを適用します。 (R2023b 以降)

    [y,tOut] = impulse(sys,t) は、ベクトル t で指定された時間における動的システム モデル sys のインパルス応答を返します。

    [y,tOut] = impulse(sys,t,p) は、LPV モデルのパラメーターの軌跡 p も指定します。 (R2023a 以降)

    [y,tOut] = impulse(___,config) は、振幅や入力オフセットなど、インパルス応答を計算するための追加オプションを指定します。RespConfig を使用して、オプション セット config を作成します。前述の任意の入力引数と出力引数の組み合わせで config を使用できます。

    [y,t,x] = impulse(sys) は状態軌跡 x も返します。ここで、sysss モデルや idss モデルなどの状態空間モデルです。

    [y,t,x,ysd] = impulse(sys,___) は、sysidssidtf、または idnlarx のモデルなど、同定されたモデルである場合、インパルス応答 y の標準偏差 ysd も計算します。

    [y,t,x,~,pOut] = impulse(sys,t,p,___) は、syslpvss モデルの場合にパラメーターの軌跡 pOut も返します。 (R2023a 以降)

    impulse(sys,___)sys のインパルス応答をプロットします。この構文は、impulseplot(sys,__) と等価です。追加のプロット カスタマイズ オプションが必要な場合は、代わりに impulseplot を使用してください。

    すべて折りたたむ

    以下の伝達関数で表される連続時間システムのインパルス応答をプロットします。

    sys(s)=4s2+2s+10

    この例では、伝達関数を表す tf モデルを作成します。零点-極-ゲイン (zpk) モデルや状態空間 (ss) モデルなど、他の動的システム モデル タイプのインパルス応答を同様にプロットできます。

    sys = tf(4,[1 2 10]);

    インパルス応答をプロットします。

    impulse(sys)

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

    impulse プロットには、定常状態の応答を示す水平の点線が自動的に含まれます。MATLAB® Figure ウィンドウでプロットを右クリックして、ピーク応答や過渡時間など、インパルス応答の他の特性を表示できます。

    離散時間システムのインパルス応答をプロットします。システムは 0.2 秒のサンプル時間をもち、次の状態空間行列で表されます。

    A = [1.6 -0.7;
          1  0];
    B = [0.5; 0];
    C = [0.1 0.1];
    D = 0;

    状態空間モデルを作成し、そのインパルス応答をプロットします。

    sys = ss(A,B,C,D,0.2);
    impulse(sys)

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

    インパルス応答にはモデルの離散化が反映され、0.2 秒ごとに計算される応答が表示されます。

    次の零点-極-ゲイン モデルのインパルス応答を調べます。

    sys = zpk(-1,[-0.2+3j,-0.2-3j],1) * tf([1 1],[1 0.05]) 
    sys =
     
                (s+1)^2
      ----------------------------
      (s+0.05) (s^2 + 0.4s + 9.04)
     
    Continuous-time zero/pole/gain model.
    
    impulse(sys)

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

    既定では、impulse は応答が向かっている定常状態を示す終了時間を選択します。過渡応答を詳しく調べるには、インパルス プロットを t = 20 秒に制限します。

    impulse(sys,20)

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

    あるいは、インパルス応答を調べる時間が一定間隔で区切られている場合は、正確な時間を指定することができます。たとえば、過渡状態の終わりからシステムが定常状態に到達するまでの応答を調べます。

    t = 20:0.2:120;
    impulse(sys,t)

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

    このプロットは t = 20 で開始されますが、impulse は常にインパルス入力を t = 0 で適用します。

    以下の 2 次状態空間モデルについて考えます。

    [x˙1x˙2]=[-0.5572-0.78140.78140][x1x2]+[1-102][u1u2]y=[1.96916.4493][x1x2]

    A = [-0.5572,-0.7814;0.7814,0];
    B = [1,-1;0,2];
    C = [1.9691,6.4493];
    sys = ss(A,B,C,0);

    このモデルには 2 つの入力と 1 つの出力があるため、最初の入力から出力へと、2 番目の入力から出力への 2 つのチャネルがあります。各チャネルには固有のインパルス応答があります。

    impulse を使用すると、すべてのチャネル応答が計算されます。

    impulse(sys)

    Figure contains 2 axes objects. Axes object 1 with title From: In(1) contains an object of type line. This object represents sys. Axes object 2 with title From: In(2) contains an object of type line. This object represents sys.

    左のプロットには最初の入力チャネルのインパルス応答が表示され、右のプロットには 2 番目の入力チャネルのインパルス応答が表示されます。impulse を使用して MIMO モデルの応答をプロットするたびに、モデルのすべての I/O チャネルを表すプロットの配列が生成されます。たとえば、5 つの状態、3 つの入力、および 2 つの出力をもつランダム状態空間モデルを作成し、そのインパルス応答をプロットします。

    sys = rss(5,2,3);
    impulse(sys)

    Figure contains 6 axes objects. Axes object 1 with title From: In(1), ylabel To: Out(1) contains an object of type line. This object represents sys. Axes object 2 with ylabel To: Out(2) contains an object of type line. This object represents sys. Axes object 3 with title From: In(2) contains an object of type line. This object represents sys. Axes object 4 contains an object of type line. This object represents sys. Axes object 5 with title From: In(3) contains an object of type line. This object represents sys. Axes object 6 contains an object of type line. This object represents sys.

    MATLAB Figure ウィンドウで、プロットを右クリックし、[I/O セレクター] を選択して、プロットをチャネルのサブセットに制限できます。

    impulse を使用して、複数の動的システムの応答を同じ軸上にプロットできます。たとえば、PI コントローラーと PID コントローラーでシステムの閉ループ応答を比較します。システムの伝達関数を作成し、コントローラーを調整します。

    H = tf(4,[1 2 10]);
    C1 = pidtune(H,'PI');
    C2 = pidtune(H,'PID');

    閉ループ システムを形成し、そのインパルス応答をプロットします。

    sys1 = feedback(H*C1,1);
    sys2 = feedback(H*C2,1);
    impulse(sys1,sys2)
    legend('PI','PID','Location','SouthEast')

    Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent PI, PID.

    既定では、impulse は、プロットするシステムごとに異なる色を選択します。入力引数 LineSpec を使用して色とライン スタイルを指定できます。

     impulse(sys1,'r--',sys2,'b')
     legend('PI','PID','Location','SouthEast')

    Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent PI, PID.

    最初の LineSpec "'r--' は、PI コントローラーでの応答を表す赤い破線を指定します。2 番目の LineSpec "'b' は、PID コントローラーでの応答を表す青い実線を指定します。凡例に、指定された色とライン スタイルが反映されます。プロットをさらにカスタマイズするには、impulseplot を使用します。

    「複数システムのインパルス応答の比較」 の例では、いくつかの個々のシステムの応答を 1 つの軸にプロットする方法を説明しています。モデル配列に複数の動的システムが配置されている場合、impulse はそのすべての応答を一度にプロットします。

    モデル配列を作成します。この例では、固有振動数が異なる 2 次伝達関数の 1 次元配列を使用します。最初に、モデル配列のメモリを事前に割り当てます。次のコマンドで、零点とゲインの SISO 伝達関数からなる 1 行 5 列の行を作成します。最初の 2 つの次元は、モデルの出力と入力を表します。残りの次元は配列の次元です

     sys = tf(zeros(1,1,1,5));

    配列を設定します。

    w0 = 1.5:1:5.5;    % natural frequencies
    zeta = 0.5;        % damping constant
    for i = 1:length(w0)
       sys(:,:,1,i) = tf(w0(i)^2,[1 2*zeta*w0(i) w0(i)^2]);
    end

    (モデル配列とそれらの作成方法の詳細については、モデル配列を参照してください)。配列内のすべてのモデルのインパルス応答をプロットします。

    impulse(sys)

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

    impulse は、配列内のすべてのエントリの応答に同じライン スタイルを使用します。エントリを区別する 1 つの方法は、動的システム モデルの SamplingGrid プロパティを使用して配列内の各エントリを対応する w0 値に関連付けることです。

    sys.SamplingGrid = struct('frequency',w0);

    次に、応答を MATLAB Figure ウィンドウにプロットする場合は、トレースをクリックして、対応する周波数値を確認できます。

    出力引数を指定すると、impulse は応答データの配列を返します。SISO システムの場合、応答データは、応答がサンプリングされる時間点の数と等しい長さの列ベクトルとして返されます。時間点のベクトルを指定するか、impulse でシステム ダイナミクスに基づいて時間点が自動的に選択されるようにします。たとえば、t = 0 ~ t = 5 秒の間、101 の時間点で SISO システムのインパルス応答を抽出します。

    sys = tf(4,[1 2 10]);
    t = 0:0.05:5;
    y = impulse(sys,t);
    size(y)
    ans = 1×2
    
       101     1
    
    

    MIMO システムの場合、応答データは次元 N×Ny×Nu の配列で返されます。NyNu は動的システムの出力および入力の数です。たとえば、2 入力、1 出力のシステムを表す、以下の状態空間モデルを考えます。

    A = [-0.5572,-0.7814;0.7814,0];
    B = [1,-1;0,2];
    C = [1.9691,6.4493];
    sys = ss(A,B,C,0);

    t = 0 ~ t = 20 秒の間、200 の時間点でこのシステムのインパルス応答を抽出します。

    t = linspace(0,20,200);
    y = impulse(sys,t);
    size(y)
    ans = 1×3
    
       200     1     2
    
    

    y(:,i,j) は、時間 "t" における "j" 番目の入力から "i" 番目の出力へのインパルス応答を含む列ベクトルです。たとえば、2 番目の入力から出力へのインパルス応答を抽出します。

    y12 = y(:,1,2);
    plot(t,y12)

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

    同定されたパラメトリック モデルのインパルス応答を、ノンパラメトリック (実測) モデルのインパルス応答と比較します。また、3 σ の信頼領域も表示します。

    データを読み込みます。

    load iddata1 z1

    パラメトリック モデルを推定します。

    sys1 = ssest(z1,4);

    ノンパラメトリック モデルを推定します。

    sys2 = impulseest(z1);

    比較のためにインパルス応答をプロットします。

    t = (0:0.1:10)';
    [y1, ~, ~, ysd1] = impulse(sys1,t);
    [y2, ~, ~, ysd2] = impulse(sys2,t);
    plot(t, y1, 'b', t, y1+3*ysd1, 'b:', t, y1-3*ysd1, 'b:')
    hold on
    plot(t, y2, 'g', t, y2+3*ysd2, 'g:', t, y2-3*ysd2, 'g:')

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

    同定された時系列モデルのインパルス応答を計算します。

    時系列モデルは信号モデルとも呼ばれ、測定される入力信号がありません。このモデルのインパルス プロットでは、その (測定されない) ノイズ チャネルを、インパルス信号の適用先の入力チャネルとして使用します。

    データを読み込みます。

    load iddata9;

    時系列モデルを推定します。

    sys = ar(z9, 4);

    sys は形式 A y(t) = e(t) のモデルで、e(t) はノイズ チャネルを表します。インパルス応答を計算するため、e(t) は入力チャネルとして扱われ、e@y1 と名付けられます。

    インパルス応答をプロットします。

    impulse(sys)

    Figure contains an axes object. The axes object with title From: e@y1 To: y1 contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents sys.

    状態空間モデルを作成します。

    A = [-0.8429,-0.2134;-0.5162,-1.2139];
    B = [0.7254,0.7147;0,-0.2050];
    C = [-0.1241,1.4090;1.4897,1.4172];
    D = [0.6715,0.7172;-1.2075,0];
    sys = ss(A,B,C,D);

    既定のオプション セットを作成し、ドット表記を使用して値を指定します。

    respOpt = RespConfig;
    respOpt.InputOffset = [-2,3];
    respOpt.Amplitude = [2,-0.5];
    respOpt.InitialState = [0.1,-0.1];
    respOpt.Delay = 5;

    インパルス応答を計算します。

    t = 0:0.1:20;
    impulse(sys,t,respOpt)

    Figure contains 4 axes objects. Axes object 1 with title From: In(1), ylabel To: Out(1) contains an object of type line. This object represents sys. Axes object 2 with ylabel To: Out(2) contains an object of type line. This object represents sys. Axes object 3 with title From: In(2) contains an object of type line. This object represents sys. Axes object 4 contains an object of type line. This object represents sys.

    この例では、LPV モデルのインパルス応答をシミュレートする方法を示します。この例では、fcnMaglev.m で定義された浮遊するボールのモデルの外乱 du に対する閉ループ応答をシミュレートします。

    maglev-feedback.png

    システムを適切に初期化して h = h0 でほぼ維持するように、基準を h0 に設定する必要があります。

    モデルを作成し、離散化します。

    hmin = 0.05; 
    hmax = 0.25;
    h0 = (hmin+hmax)/2;
    Ts = 0.01;
    Glpv = lpvss("h",@fcnMaglev,0,0,h0);
    Glpvd = c2d(Glpv,Ts,'tustin'); 

    3 つの高さの値について LPV モデルをサンプリングし、PID コントローラーを調整します。

    hpid = linspace(hmin,hmax,3);
    [Ga,Goffset] = sample(Glpvd,[],hpid);
    wc = 50;
    Ka = pidtune(Ga,'pidf',wc);
    Ka.Tf = 0.01;

    ゲイン スケジュール PID コントローラーを作成します。

    Ka.SamplingGrid = struct('h',hpid);
    Koffset = struct('y',{Goffset.u});
    Clpv = ssInterpolant(ss(Ka),Koffset);

    閉ループ モデルを作成します。

    CL = feedback(Glpvd*[1,Clpv],1,2,1);
    CL.InputName = {'du';'href'};
    CL.OutputName = 'h';

    h = h0 の定常状態電流を取得して外乱の大きさを設定します。

    [~,~,~,~,~,~,~,u0] = Glpv.DataFunction(0,h0);

    duh0 でのインパルス変化に対する応答。

    t = 0:Ts:2;
    pFcn = @(k,x,u) x(1);
    Config = RespConfig('InputOffset',[0;h0],'Amplitude',0.2*[u0;h0]*Ts,'Delay',0.5,'InitialParameter',h0);
    impulse(CL,t,pFcn,Config)
    title('Impulse disturbance in current and impulse change in height')

    Figure contains 2 axes objects. Axes object 1 with title From: du, ylabel To: h contains an object of type line. This object represents CL. Axes object 2 with title From: href contains an object of type line. This object represents CL.

    入力引数

    すべて折りたたむ

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

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

    • genssuss モデルなどの一般化された、あるいは不確かさをもつ LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox™ ソフトウェアが必要です。)

      • 調整可能な制御設計ブロックの場合、関数は応答データをプロットする処理と返す処理の両方においてモデルをその現在の値で評価します。

      • 不確かさをもつ制御設計ブロックの場合、関数はモデルのノミナル値とランダム サンプルをプロットします。出力引数を使用する場合、関数はノミナル モデルのみの応答データを返します。

    • sparss モデルや mechss モデルなどのスパース状態空間モデル。スパース状態空間モデルの最終時間 tFinal を指定しなければなりません。

    • idtfidssidproc モデルなどの同定された LTI モデル。このようなモデルの場合、関数は信頼区間をプロットし、周波数応答の標準偏差を返すこともできます。(同定されたモデルを使用するには System Identification Toolbox™ ソフトウェアが必要です。)

    • 線形時変 (ltvss) モデルと線形パラメーター変動 (lpvss) モデル。

    impulse は、frdgenfrdidfrd モデルなどの周波数応答データ モデルをサポートしません。

    sys がモデルの配列である場合、この関数は同じ座標軸上に配列のすべてのモデルの応答をプロットします。

    インパルス応答の終了時間。正のスカラー値として指定します。impulse は、t = 0 から t = tFinal までインパルス応答をシミュレートします。

    • 連続時間システムの場合、この関数は、システム ダイナミクスから自動的にステップ サイズと点数を判定します。システム時間単位で tFinal を表し、sysTimeUnit プロパティで指定されます。

    • 離散時間システムの場合、この関数は sys のサンプル時間をステップ サイズとして使用します。システム時間単位で tFinal を表し、sysTimeUnit プロパティで指定されます。

    • サンプル時間を指定しない離散時間システム (Ts = -1) では、impulsetFinal を、シミュレートするサンプリング周期の数として解釈します。

    R2023b 以降

    インパルス応答の時間範囲。正のスカラー値の 2 要素ベクトルとして指定します。impulse は、t = t0 から t = tFinal までの応答をシミュレートします。

    RespConfig を使用してインパルス遅延 td を指定した場合、関数は t = t0+td におけるインパルスを適用します。

    インパルス応答を計算するタイミングの時間ベクトル。正のスカラー値のベクトルとして指定します。システム時間単位で t を表し、sysTimeUnit プロパティで指定されます。

    • 連続時間モデルの場合は、tT0:dt:Tf 形式で指定します。各タイム ステップでの応答を取得するために、関数は dt を連続システムに対する離散近似のサンプル時間として使用します。シミュレーションは T0 に始まり、Tf に終了します。

    • 離散時間モデルの場合は、tT0:Ts:Tf 形式で指定します。ここで、Tssys のサンプル時間です。

    LPV モデルのパラメーターの軌跡。行列または関数ハンドルとして指定します。

    • 外因的または明示的な軌跡の場合、p を次元 N 行 Np 列の行列として指定します。ここで、N は時間サンプルの数、Np はパラメーターの数です。

      したがって、行ベクトル p(i,:) には、i 番目のタイム ステップのパラメーター値が含まれます。

    • 内因的または暗黙的な軌跡の場合、pp = F(k,x,u) の形式の関数ハンドルとして指定し、時間サンプル k、状態 x、および入力 u の関数としてパラメーターを与えます。impulse では、このオプションは離散時間 LPV モデルでのみサポートされます。

      このオプションは、準 LPV モデルをシミュレートする場合に便利です。

    適用されるインパルス信号の構成。RespConfig オプション セットとして指定します。既定では、impulse は時間 t = 0 に入力を適用します。この入力引数を使用して応答の構成を変更し、遅延や入力オフセットなどを指定します。例については、インパルス応答のオプションの構成を参照してください。

    オフセット (x0(t),u0(t)) の lpvss モデルおよび ltvss モデルの場合、RespConfig を使用して u0(t,p) を基準とする入力を定義し、シミュレーションを状態 x0(t,p) で初期化できます。

    出力引数

    すべて折りたたむ

    インパルス応答データ。配列として返されます。

    • SISO システムの場合、y は、t (指定した場合) または tOut (t を指定しない場合) と同じ長さの列ベクトルです。

    • 単入力、多出力システムの場合、y は、時間サンプルと同じ行数、および出力と同じ列数をもつ行列です。したがって、y の j 番目の列、つまり y(:,j) には、入力から j 番目の出力へのインパルス応答が含まれます。

    • MIMO システムの場合、各入力チャネルのインパルス応答は y の 3 番目の次元に沿って積み上げられます。y の次元は N×Ny×Nu です。ここで、

      • N は時間サンプルの数です。

      • Ny はシステムの出力数です。

      • Nu はシステムの入力数です。

      したがって、y(:,i,j) は、t または tOut で指定された時間における "j" 番目の入力から "i" 番目の出力へのインパルス応答を含む列ベクトルです。

    インパルス応答が計算される時間。ベクトルとして返されます。特定の時間ベクトル t を指定しない場合、impulse は、システム ダイナミクスに基づいてこの時間ベクトルを選択します。時間は sys の時間単位で表されます。

    状態軌跡。配列として返されます。sys が状態空間モデルの場合、x には、t または tOut の各時間における sys の状態の発展が含まれます。x の次元は N×Nx×Nu です。ここで、

    • N は時間サンプルの数です。

    • Nx は状態の数です。

    • Nu はシステムの入力数です。

    したがって、k 番目の入力で挿入されたインパルスへの応答に伴う状態の発展は、配列 x(:,:,k) で与えられます。行ベクトル x(i,:,k) には、i 番目のタイム ステップの状態値が含まれます。

    同定されたモデルのインパルス応答の標準偏差。y と同じ次元の配列として返されます。sys にパラメーター共分散情報が含まれていない場合、ysd は空です。

    パラメーターの軌跡。配列として返されます。sys が線形パラメーター変動モデルの場合、pOut には、t または tOut の各時間における sys のパラメーターの発展が含まれます。pOut の次元は N×Np×Nu です。ここで次のようになります。

    • N は時間サンプルの数です。

    • Np はパラメーターの数です。

    • Nu はシステムの入力数です。

    そのため、k 番目の入力で挿入された信号への応答のパラメーターの発展は、配列 pOut(:,:,k) で与えられます。行ベクトル pOut(i,:,k) には、i 番目のタイム ステップのパラメーター値が含まれます。

    制限

    • ゼロでない行列 D の連続システムのインパルス応答は t = 0 で無限になります。impulse はこの不連続を無視し、t = 0 におけるより低い連続値 Cb を返します。

    • impulse コマンドは、内部遅延をもつ連続時間モデルでは機能しません。そのようなモデルでは、pade を使用してむだ時間を近似してから、インパルス応答を計算します。

    • impulse コマンドは、連続時間 LPV モデルについては、暗黙的なパラメーターの軌跡に沿ったシミュレーションをサポートしていません。

    ヒント

    • 追加のプロット カスタマイズ オプションが必要な場合は、代わりに impulseplot を使用してください。

    • 任意の入力信号へのシステム応答をシミュレートするには、lsim を使用します。

    アルゴリズム

    連続時間 LTI モデルは、まず状態空間形式に変換されます。単入力状態空間モデルのインパルス応答

    x˙=Ax+buy=Cx

    は初期状態が b の自由応答と等価です。

    x˙=Ax,x(0)=by=Cx

    この応答をシミュレーションするため、システムは入力にゼロ次ホールドを使用して離散化されます。サンプル時間は、時間ベクトル t = T0:dt:Tf が指定されている場合を除き、システム ダイナミクスに基づいて自動的に選択されます。そのため、dt がサンプル時間として使用されます。

    バージョン履歴

    R2006a より前に導入

    すべて展開する