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

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

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

tf

伝達関数モデルの作成、伝達関数モデルへの変換

構文

sys = tf(num,den)
sys = tf(num,den,Ts)
sys = tf(M)
sys = tf(num,den,ltisys)
tfsys = tf(sys)
tfsys = tf(sys, 'measured')
tfsys = tf(sys, 'noise')
tfsys = tf(sys, 'augmented')

説明

tf を使用して、実数値または複素数値の伝達関数モデル (TF オブジェクト) を作成するか、または状態空間モデルまたは零点-極-ゲイン モデルを伝達関数形式に変換します。tf を使用して、一般化状態空間 (genss) モデルや不確かさをもつ状態空間 (uss) モデルを作成することもできます。

伝達関数の作成

sys = tf(num,den) は、分子が num、分母が den で指定される連続時間伝達関数を作成します。出力 sys は、次のようになります。

  • numden が数値配列の場合は、tf モデル オブジェクト。

  • num または denrealp パラメーターまたは一般化行列 (genmat) などの調整可能なパラメーターが含まれる場合は、一般化状態空間モデル (genss)。

  • num または den が不確かさをもつ場合は、不確かさをもつ状態空間モデル (uss) (Robust Control Toolbox™ ソフトウェアが必要)。

SISO の場合、numden は、s の "降べき順" に並べられた分子と分母の係数の実数値または複素数値の行ベクトルです。この 2 つのベクトルは長さが同じである必要はなく、伝達関数はプロパーである必要はありません。たとえば、h = tf([1 0],1) は、純粋な導関数 h(s) = s を指定します。

MIMO 伝達関数モデルを作成するには、次の方法のいずれかを使用します。

  • SISO tfモデルを連結します。

  • tf コマンドをセル配列引数と一緒に使用します。この場合、numden は、出力と同じ数の行、入力と同じ数の列をもつ行ベクトルのセル配列です。行ベクトル num{i,j} および den{i,j}は、入力 j から出力 i への伝達関数の分子と分母を指定します。

MIMO 伝達関数作成の例は、「」と、『Control System Toolbox™ ユーザー ガイド』の「MIMO 伝達関数モデル」を参照してください。

MIMO 伝達関数の SISO エントリの分母がすべて同じ場合は、den をこの共通分母の行ベクトル表現に設定することもできます。詳細は、「例」を参照してください。

sys = tf(num,den,Ts) は、サンプル時間 Ts (秒単位) で離散時間伝達関数を作成します。サンプル時間を未指定のままにするには、Ts = -1 を設定します。入力引数 numden は、連続時間の場合と同じであり、分子と分母の係数を z の降べき順に列挙しなければなりません。

sys = tf(M) は、静的 ゲイン M (scalar or matrix) を作成します。

sys = tf(num,den,ltisys) は、プロパティを備えた伝達関数を作成します。このプロパティは、動的システム モデル ltisys から継承したものです (サンプル時間も含む)。

伝達関数の配列の構築には、いくつかの方法があります。SISO または MIMO の TF モデルの配列を作成するには、多次元セル配列を使用して各 SISO エントリの分子と分母を指定するか、または for ループを使用して各 TF モデルを配列に連続的に割り当てます。詳細は、『Control System Toolbox ユーザー ガイド』の「モデル配列」を参照してください。

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

'Property',Value

各組は入力名や伝達関数変数などのモデルの特定のプロパティを指定します。tf オブジェクトのプロパティについては、「プロパティ」を参照してください。次のことに注意してください。

sys = tf(num,den,'Property1',Value1,...,'PropertyN',ValueN)

は次のもののショートカットです。

sys = tf(num,den)
set(sys,'Property1',Value1,...,'PropertyN',ValueN)

s または z での有理式としての伝達関数

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

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

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

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

伝達関数への変換

tfsys = tf(sys) は、動的システム モデル sys を伝達関数形式に変換します。出力 tfsys は、伝達関数として表された sys を示す tf モデル オブジェクトです。

sysgenssgenmatltiblock.tfltiblock.ss モデルなどの調整可能なコンポーネントをもつモデルである場合、結果として生じる伝達関数 tfsys は調整可能なコンポーネントの現在の値をとります。

同定されたモデルの変換

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

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

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

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

    ヒント:   同定された非線形モデルは伝達関数に変換できません。linearizelinapp などの線形近似関数を使用してください。

一般化状態空間モデルの作成

次の構文を使用して、

gensys = tf(num,den)

1 つ以上のエントリ num および den が調整可能な realp または genmat モデルに依存するときに一般化状態空間 (genss) モデルを作成できます。一般化状態空間モデルの詳細は、「調整可能な係数をもつモデル」を参照してください。

例 1

1 入力 2 出力をもつ伝達関数モデル

1 入力 2 出力の次の伝達関数を作成します。

入力は current、出力は torqueang velocity です。

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

num = {[1 1] ; 1};
den = {[1 2 2] ; [1 0]};
H = tf(num,den,'inputn','current',...
                      'outputn',{'torque' 'ang. velocity'},...
                          'variable','p')

これらのコマンドは、以下の結果を作成します。

Transfer function from input "current" to output...
              p + 1
 torque:  -------------
          p^2 + 2 p + 2
 
                 1
 ang. velocity:  -
                 p

'variable' プロパティを 'p' に設定すると、結果が変数 p の伝達関数として表示されることに注意してください。

例 2

有理式を使用する伝達関数モデル

有理式を使用して SISO TF モデルを作成するには、次のように入力します。

s = tf('s');
H = s/(s^2 + 2*s +10);

これは、次の伝達関数と同じものを作成します。

h = tf([1 0],[1 2 10]);

例 3

多入力多出力伝達関数モデル

離散 MIMO 伝達関数を指定します。

これは、共通分母が d (z) = z + 0.3 で、サンプル時間が 0.2 秒です。

nums = {1 [1 0];[-1 2] 3};
Ts = 0.2;
H = tf(nums,[1 0.3],Ts)     % Note: row vector for common den. d(z)

例 4

状態空間モデルの伝達関数への変換

次のデータをもつ状態空間モデルの伝達関数を計算します。

次のように入力します。

sys = ss([-2 -1;1 -2],[1 1;2 -1],[1 0],[0 1]);
tf(sys) 

これらのコマンドは、以下の結果を作成します。

Transfer function from input 1 to output:
s - 4.441e-016
--------------
s^2 + 4 s + 5
 
Transfer function from input 2 to output:
s^2 + 5 s + 8
-------------
s^2 + 4 s + 5

例 5

伝達関数モデルの配列

for ループを指定して、SISO TF モデルの 10 x 1 配列を指定します。

H = tf(zeros(1,1,10)); 
s = tf('s')                                                  
for k=1:10,                                                              
		H(:,:,k) = k/(s^2+s+k);                                               
end                                                                      

最初のステートメントは、TF 配列を事前に割り当てて、zero 伝達関数で埋めます。

例 6

調整可能なローパス フィルター

この例は、1 つの調整可能なパラメーター a 付きでローパス フィルター F = a/(s + a) を作成する方法を示します。

ltiblock.tf では F を表すことはできません。その理由は、ltiblock.tf ブロックの分子と分母の係数が独立しているためです。その代わりに、調整可能な実数パラメーター オブジェクト realp を使って F を構築します。

  1. 調整可能な実数パラメーターを作成します。

    a = realp('a',10);   
    

    realp オブジェクト a は、初期値 10 の調整可能なパラメーターです。

  2. tf を使用して調整可能なフィルター F を作成します。

    F = tf(a,[1 a]);

F は、Blocks プロパティに調整可能なパラメーター a をもつ genss オブジェクトです。F を他の調整可能なモデルまたは数値モデルと接続して、より複雑な制御システムのモデルを作成できます。たとえば、「調整可能なコンポーネントを含む制御システム」を参照してください。

例 7

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

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 = tf(sys, 'measured') 
sysNoise = tf(sys, 'noise')

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

離散時間の表記

制御とデジタル信号処理 (DSP) のコミュニティは、さまざまな表記を使用して離散伝達関数を指定する傾向にあります。大半の制御技術エンジニアは、z 変数を使用して、分子と分母の項を z の降べき順に並べます。たとえば、次のとおりです。

すると、多項式 z2 と z2 + 2z + 3 が、それぞれ行ベクトル [1 0 0] および [1 2 3] によって指定されます。これとは対照的に、DSP エンジニアは、この伝達関数を次のように書くことを好みます。

そして、分子を 1 と指定します ([1 0 0] およびその分母を [1 2 3] と書く代わりに)。

tf は、選択された変数 ('Variable' プロパティの値) に基づいて表記を切り替えます。

変数

表記

'z' (既定値) 'q'

行ベクトル [ak ... a1 a0] を使用して多項式 (z または q の降べき順に並べられた係数) を指定します。

'z^-1'

行ベクトル [b0 b1 ... bk] を使用して多項式 (z-1"昇べき順" に並べられた係数) を指定します。

たとえば、

g = tf([1 1],[1 2 3],0.1);

は離散伝達関数を指定します。

なぜなら、z が既定の変数だからです。これとは対照的に、

h = tf([1 1],[1 2 3],0.1,'variable','z^-1');

は DSP 表記を使用して次のものを作成します。

DSP 表記を使用した離散伝達関数の直接指定は、「filt」を参照してください。

tf は、分子と分母の長さが等しくなるようにデータを格納することに注意してください。特に、tf は次の値を格納します。

num = [0 1 1]; den = [1 2 3];

これは、g の場合です (分子は左側がゼロで埋められます)。また、次の値を格納します。

num = [1 1 0]; den = [1 2 3];

これは、h の場合です (分子は右側がゼロで埋められます)。

プロパティ

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

num

伝達関数の分子係数。

SISO 伝達関数の場合、num は降べきの順 (Variable 値の szp、または q の場合)、または昇べきの順に並べた (Variable 値の z^-1 または q^-1 の場合) 多項式の係数の行ベクトルです。

Ny 出力および Nu 入力のある MIMO 伝達関数の場合、num は各入出力の組の分子係数の NyNu 列のセル配列です。

den

伝達関数の分母係数。

SISO 伝達関数の場合、den は降べきの順に並べた (Variable 値の szp、または q の場合) か、または昇べきの順に並べた (Variable 値の z^-1 または q^-1 の場合) 多項式の係数の行ベクトルです。

Ny 出力および Nu 入力のある MIMO 伝達関数の場合、den は各入出力の組の分母係数の NyNu 列のセル配列です。

Variable

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

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

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

  • 'p' — と等価 's'

  • 'q' — と等価 'z'

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

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

Variable の値は表示に反映され、また、離散時間モデルの num および den 係数の解釈にも影響を与えます。Variable = 'z' または 'q' の場合、係数ベクトルは変数の降べき順に並べられます。Variable = 'z^-1' または 'q^-1' の場合、係数ベクトルは変数の昇べき順に並べられます。

既定値: '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
 
...

既定値: []

詳細

すべて展開する

アルゴリズム

tf は、MATLAB 関数 poly を使用して零点-極-ゲイン モデルを変換し、関数 zeropole を使用して状態空間モデルを変換します。

参考

| | | | | | | | | |

チュートリアル

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