Main Content

gensig

lsim を使用してシステム応答をシミュレーションする周期信号を生成

    説明

    [u,t] = gensig(type,tau) は、指定されたタイプと期間の単位振幅周期信号を生成します。lsim または lsimplot を使用して単入力動的システムの時間応答をシミュレートするか、lsiminfo を使用して応答の特性を取得するには、信号 u と対応する時間ベクトル t を使用します。多入力システムの信号を作成するには、gensig を繰り返し呼び出し、結果の u ベクトルを行列にスタックします。u および t を使用して動的システム モデルをシミュレーションすると、t はモデルの TimeUnit プロパティの単位を持つものとして処理されます。

    [u,t] = gensig(type,tau,Tf) は、Tf の期間を指定して信号を生成します。t は 0 から Tf まで tau/64 ずつインクリメントして実行されます。

    [u,t] = gensig(type,tau,Tf,Ts) は、Ts のサンプル時間を指定して信号を生成します。t は 0 から Tf まで Ts ずつインクリメントして実行されます。離散時間モデルをシミュレートするための信号を生成するには、この構文を使用して、Ts をモデルのサンプル時間に設定します。

    すべて折りたたむ

    lsim を使用して動的システム応答をシミュレートするために使用する矩形波を 2 秒の周期で生成します。

    tau = 2;
    [u,t] = gensig("square",tau);

    gensig は、信号をベクトル u と対応する時間ベクトル t として返します。信号の期間を指定しないと、gensig は 5 つの周期 (Tf = 5*tau) を実行する信号を生成します。タイム ステップを指定しないと、既定では周期あたり 64 のサンプル (Ts = tau/64) に設定されます。したがって、この信号はタイム ステップ 0.03125 秒で 10 秒間実行されます。信号をプロットします。

    plot(t,u)

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

    gensig は、0 から始まる単位振幅の矩形波を返します。u を変更して振幅とエンドポイントが異なる矩形波を取得できます。15 秒間実行され、–1 と 1 の値を切り替える周期 5 の矩形波を作成します。

    tau = 5;
    Tf = 15;
    [u0,t] = gensig("square",tau,Tf);
    u = 2*u0-1;
    plot(t,u)

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

    tu を使用して、lsim で動的システムの応答をシミュレートします。lsim コマンドは、t の値が、シミュレーションした動的システム モデルの単位 (sys.TimeUnit) であることを前提としています。

    sys = tf(30,[1 5 30]);
    lsim(sys,u,t)

    MATLAB figure

    タイム ステップ (サンプル時間) を指定しない場合、既定では gensig は 1 周期あたり 64 サンプル (Ts = tau/64) に設定されます。lsim で離散時間モデルをシミュレートする場合、タイム ステップはモデルのサンプル時間と同じでなければなりません。gensig にこのサンプル時間を指定すると、適切な信号が生成されます。たとえば、0.1 秒のサンプル時間で離散時間の動的システム モデルをシミュレートするための正弦波を生成します。

    tau = 3;
    Tf = 6;
    Ts = 0.1;
    [u,t] = gensig("sine",tau,Tf,Ts);

    生成された信号に対するモデル応答をシミュレーションします。

    sys = zpk([],[-0.1,-0.5],1,Ts);
    lsim(sys,u,t,Ts)

    MATLAB figure

    lsim で多入力システムをシミュレーションするには、各入力に適用された信号を表す列をもつ行列として入力信号を指定します。つまり、u(:,j) は各タイム ステップの j 番目の入力に適用される信号です。gensig を使用してこのような入力行列を生成するには、各入力の信号をまとめて作成し、それらを行列にスタックします。

    たとえば、周期 2 秒の矩形波を 1 番目の入力に挿入し、1.5 秒ごとのパルスを 2 番目の入力に挿入する 2 入力システムをシミュレーションするための信号を作成します。2 つのベクトルが同じ長さになるように期間とサンプル時間を指定します。これは、ベクトルを行列に結合するために必要です。

    Tf = 8;
    Ts = 0.02;
    [uSq,t] = gensig("square",2,Tf,Ts);
    [uPu,~]  = gensig("pulse",1.5,Tf,Ts);
    u = [uSq uPu];
    size(u)
    ans = 1×2
    
       401     2
    
    

    u の各行 u(i,:) は、対応する時間 t(i) において入力に適用される信号 (u1,u2) です。

    gensig で作成されていない信号は同じ長さであれば、結合できます。たとえば、uSq を 1 番目の入力、uPu を 2 番目の入力に適用して 3 入力システムをシミュレートすると仮定します。また、0 から開始され、最終時間 Tf = 8 には 1 に増えるランプを 3 番目の入力に適用します。信号が uSq および uPu と同じ長さの列ベクトルであることを確認します。次に、信号を他の信号と結合して入力行列を作成します。

    uRa = linspace(0,1,401)'; 
    u = [uSq uPu uRa];
    size(u)
    ans = 1×2
    
       401     3
    
    
    plot(t,u)

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

    これで、ut を使用して 3 入力モデルをシミュレーションすることができます。3 入力、2 出力の状態空間モデルを生成し、入力に適用された u に対するその 2 つの出力における応答をシミュレーションします。

    rng('default')
    sys = rss(3,2,3);
    lsim(sys,u,t)

    MATLAB figure

    入力引数

    すべて折りたたむ

    生成する周期信号のタイプ、次のいずれかの値として指定します。

    • "sine" — 正弦波

    • "square" — 矩形波

    • "pulse" — 周期性パルス

    すべての信号には単位振幅があり、t = 0 における初期値は 0 です。string ではなく文字ベクトル ('sine') を使用してタイプを指定できます。

    生成される信号の周期。正のスカラー値として指定します。lsim でシミュレートする動的システム モデルの単位で tau を指定します。たとえば、sys.TimeUnit'seconds' の場合、30 秒の周期で sys をシミュレートするための信号を生成するには、tau を 30 に設定します。sys.TimeUnit'minutes' の場合、この信号を生成するには、tau を 0.5 に設定します。

    シミュレーションに使用する信号の期間。正のスカラー値として指定します。出力ベクトル t0:Ts:Tf 形式です。ここで、タイム ステップは Ts で設定されます。lsimt を使用して動的システム モデルをシミュレートすると、lsim では、t はモデルの TimeUnit プロパティで指定された単位を持つものとして解釈します。

    タイム ステップ、正のスカラー値として指定します。出力ベクトル t0:Ts:Tf 形式です。Ts の単位は、lsim でシミュレートする動的システム モデルの TimeUnit プロパティで指定された単位です。離散時間モデルをシミュレートする場合は、Ts をモデルのサンプル時間 Ts と等しい値に設定します。

    出力引数

    すべて折りたたむ

    生成された信号。t と同じ長さの列ベクトルとして返されます。信号の形状は type によって決まります。信号にはベースラインが 0 の単位振幅があります。

    時間ベクトル。0:Ts:Tf 形式の列ベクトルとして返されます。期間 Tf を指定しない場合、gensigTf = 5*tau を使用します。タイム ステップ Ts を指定しない場合、gensigtau/64 を使用します。

    バージョン履歴

    R2006a より前に導入