frd
周波数応答データ モデル
説明
frd を使用して実数値の、または複素数値の周波数応答データ モデルを作成したり、動的システム モデルを周波数応答データ モデル形式に変換したりします。
周波数応答データ モデルは、複素数の周波数応答データを、対応する周波数点と共に保存します。たとえば、周波数応答データ モデル H(jwi) は、各入力周波数 wi における周波数応答を保存します。ここで i = 1,…,n です。frd モデル オブジェクトは SISO または MIMO 周波数応答データ モデルを連続時間または離散時間で表現できます。詳細については、周波数応答データ (FRD) モデルを参照してください。
frd を使用して、一般化周波数応答データ (genfrd) モデルを作成することもできます。
作成
frd モデルを次のいずれかの方法で取得できます。
frdコマンドを使用して周波数応答データからモデルを作成する。たとえば、特定の周波数で取得した周波数応答データを使用してfrdモデルを作成できます。例については、SISO 周波数応答データ モデルを参照してください。
特定の周波数でのモデルの周波数応答を計算することで、
ssモデルのような線形モデルを、frdモデルに変換する。例については、状態空間モデルを周波数応答データ モデルに変換を参照してください。
オフラインの周波数応答推定ワークフローを使用してモデルを推定する。これらのワークフローでは Simulink® Control Design™ ソフトウェアが必要です。
詳細については、コマンド ラインでの周波数応答の推定 (Simulink Control Design)およびモデル線形化器を使用した周波数応答の推定 (Simulink Control Design)を参照してください。
構文
説明
は、前述の任意の入力引数の組み合わせについて、名前と値の引数を 1 つ以上使用して、周波数応答データ モデルのプロパティを設定します。sys = frd(___,Name,Value)
入力引数
周波数応答データ。ベクトルまたは複素数の多次元配列として指定します。
SISO システムの場合、
frequencyで指定される周波数点での周波数応答値のベクトルを指定します。Nu入力とNy出力のある MIMO システムの場合、NyxNuxNfの配列を指定します。ここでNfは周波数点の数です。Nuの入力とNyの出力をもつモデルのS1x ... xSnの配列の場合、サイズが [NyNuNfS1…Sn] の多次元配列を指定します。たとえば、サイズが [
Ny,Nu,Nf,3,4] のresponseは、3 行 4 列のモデルの配列についての応答データを表します。各モデルにはNyの出力、Nuの入力、Nfの周波数点があります。
この入力は ResponseData プロパティを設定します。
response に対応する周波数点。Nf の点を含むベクトルとして指定します。frequency には正と負の両方の周波数を含めることができます。
この入力は Frequency プロパティを設定します。
スカラーとして指定されたサンプル時間。
この入力は Ts プロパティを設定します。
動的システム。SISO または MIMO 動的システム モデルか、動的システム モデルの配列として指定します。使用できる動的システムには次のようなものがあります。
genssやuss(Robust Control Toolbox) モデルなどの一般化された、あるいは不確かさをもつ LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox™ ソフトウェアが必要です。)結果の
frdモデルでは次のように仮定されます。調整可能な制御設計ブロックについては調整可能なコンポーネントの現在値
不確かさをもつ制御設計ブロックについてはモデルのノミナル値
idtf(System Identification Toolbox)、idss(System Identification Toolbox)、idproc(System Identification Toolbox)、idpoly(System Identification Toolbox)、idgrey(System Identification Toolbox) モデルなどの、同定された LTI モデル。(同定されたモデルを使用するには System Identification Toolbox™ ソフトウェアが必要です。)
プロパティ
周波数応答データ。複素数の多次元配列として指定します。
SISO システムの場合、
ResponseDataはFrequencyプロパティで指定されたNf周波数点における周波数応答値の1x1xNfの配列です。Nu入力とNy出力のある MIMO システムの場合、ResponseDataは、Ny×Nu×Nfの配列です。ここでNfは周波数点の数です。たとえば、
ResponseData(ky,ku,kf)は、周波数Frequency(kf)における入力kuから出力kyへの周波数応答です。Nuの入力とNyの出力をもつモデルのS1x ... xSnの配列の場合、ResponseDataはサイズが [NyNuNfS1…Sn] の多次元配列です。たとえば、サイズが [
Ny,Nu,Nf,3,4] のResponseDataは、3 行 4 列のモデルの配列についての応答データを表します。各モデルにはNyの出力、Nuの入力、Nfの周波数点があります。
ResponseData に対応する周波数点。FrequencyUnit で指定される単位の Nf 点を含むベクトルとして指定します。
Frequency プロパティの周波数ベクトルの単位。以下のいずれかの値として指定します。
'rad/TimeUnit''cycles/TimeUnit''rad/s''Hz''kHz''MHz''GHz''rpm'
単位 'rad/TimeUnit' と 'cycles/TimeUnit' は、TimeUnit プロパティで指定された時間単位に相対的です。
このプロパティを変更してもリサンプリングやデータの変換は行われません。プロパティを変更すると、既存のデータの解釈のみが変更されます。chgFreqUnit を使用して、データをさまざまな周波数単位に変換します。
伝達遅延。次のいずれかとして指定します。
スカラー — SISO システムに伝達遅延を、または MIMO システムのすべての入出力ペアに対して同じ伝達遅延を指定します。
Ny行Nu列の配列 — MIMO システムの入出力ペアごとに別々の伝達遅延を指定します。ここで、Nyは出力の数、Nuは入力の数です。
連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で伝達遅延を指定します。離散時間システムの場合、サンプル時間 Ts の整数倍で伝達遅延を指定します。
各入力チャネルの入力遅延。次のいずれかとして指定します。
スカラー — SISO システムに入力遅延を、または多入力システムのすべての入力に同じ遅延を指定します。
Nu行 1 列のベクトル — 多入力システムの入力に別々の入力遅延を指定します。Nuは入力の数です。
連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で入力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で入力遅延を指定します。
詳細については、線形システムでのむだ時間を参照してください。
各出力チャネルの出力遅延。次のいずれかとして指定します。
スカラー — SISO システムに出力遅延を、または多出力システムのすべての出力に同じ遅延を指定します。
Ny行 1 列のベクトル — 多出力システムの出力に別々の出力遅延を指定します。Nyは出力の数です。
連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で出力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で出力遅延を指定します。
詳細については、線形システムでのむだ時間を参照してください。
サンプル時間。以下として指定します。
0(連続時間システムの場合)。離散時間システムのサンプリング周期を表す正のスカラー。
TsはTimeUnitプロパティによって指定される時間単位で指定します。-1(サンプル時間が指定されていない離散時間システムの場合)。
メモ
Ts を変更してもモデルの離散化やリサンプリングは行われません。
時間変数の単位。次のいずれかとして指定します。
'nanoseconds''microseconds''milliseconds''seconds''minutes''hours''days''weeks''months''years'
TimeUnit の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。
入力チャネル名。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''(いずれの入力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys が 2 入力モデルである場合は、以下のように入力します。
sys.InputName = 'controls';入力名は自動的に {'controls(1)';'controls(2)'} へと拡張されます。
省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、sys.u は sys.InputName と同じです。
InputName の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
入力チャネル単位。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''(いずれの入力チャネルにも単位を指定しない場合)。
InputUnit を使用して入力信号の単位を指定します。InputUnit はシステムの動作に影響しません。
入力チャネル グループ。構造体として指定します。InputGroup プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 1 と 2、および 3 と 5 をそれぞれ含む、controls および noise という名前の入力グループを作成するには、次のように入力します。
sys.InputGroup.controls = [1 2]; sys.InputGroup.noise = [3 5];
その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。
sys(:,'controls')既定では、InputGroup はフィールドのない構造体です。
出力チャネル名。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''(いずれの出力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys が 2 出力モデルである場合は、以下のように入力します。
sys.OutputName = 'measurements';出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。
省略形表記 y を使用して OutputName プロパティを参照することもできます。たとえば、sys.y は sys.OutputName と同じです。
OutputName の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
出力チャネル単位。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''(いずれの出力チャネルにも単位を指定しない場合)。
OutputUnit を使用して出力信号の単位を指定します。OutputUnit はシステムの動作に影響しません。
出力チャネル グループ。構造体として指定します。OutputGroup を使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1、および 3 と 5 をそれぞれ含む、temperature および measurement という名前の出力グループを作成します。
sys.OutputGroup.temperature = [1]; sys.OutputGroup.measurement = [3 5];
その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。
sys('measurement',:)既定では、OutputGroup はフィールドのない構造体です。
システム名。文字ベクトルとして指定します。たとえば、'system_1' とします。
システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO' とします。
システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。
モデル配列のサンプリング グリッド。構造体配列として指定します。
SamplingGrid を使用して、モデル配列の各モデルに関連付けられている変数値を追跡します。これには同定された線形時不変 (IDLTI) モデル配列も含まれます。
構造体のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値スカラーでなければならず、サンプル値のすべての配列はモデル配列の次元と一致しなければなりません。
たとえば、t = 0:10 の各時点で線形時変システムのスナップショットを記録することにより、線形モデルの 11 行 1 列の配列 sysarr を作成することができます。次のコードは線形モデルでの時間サンプルを格納します。
sysarr.SamplingGrid = struct('time',0:10)同様に、2 つの変数 zeta と w を個別にサンプリングすることにより、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 を表示する際、配列の各エントリは対応する zeta と w の値を取り込みます。
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
...複数のパラメーター値または操作点で Simulink モデルを線形化することにより生成されたモデル配列の場合、SamplingGrid には配列の各エントリに対応する変数値が自動的に入力されます。たとえば、Simulink Control Design のコマンド linearize (Simulink Control Design) および slLinearizer (Simulink Control Design) により、SamplingGrid が自動的に入力されます。
既定では、SamplingGrid はフィールドのない構造体です。
オブジェクト関数
以下のリストには、frd モデルで使用できる関数の代表的なサブセットが含まれています。一般に、動的システム モデルに適用できる多くの関数も frd オブジェクトに適用できます。frd モデルは、すべての時間領域解析関数で機能しません。
chgFreqUnit | 周波数応答データ モデルの周波数単位の変更 |
chgTimeUnit | 動的システムの時間単位の変更 |
frdfun | frd モデル オブジェクトの各周波数での周波数応答値への関数の適用 |
fselect | FRD モデルの周波数点、または範囲の選択 |
interp | FRD モデルの内挿 |
fcat | 周波数領域に沿って FRD モデルを連結 |
fnorm | FRD モデルの点ごとのピーク ゲイン |
pidtune | 線形プラント モデルのための PID 調整アルゴリズム |
例
周波数応答データから frd オブジェクトを作成します。
この例では、水タンク モデル用に収集された周波数応答データを読み込みます。
load wtankData.matこのデータには、周波数範囲 rad/s から rad/s までについて収集された周波数応答データが含まれます。
モデルを作成します。
sys = frd(response,frequency)
sys =
Frequency(rad/s) Response
---------------- --------
0.0010 1.562e+01 - 1.9904i
0.0018 1.560e+01 - 2.0947i
0.0034 1.513e+01 - 3.3670i
0.0062 1.373e+01 - 5.4306i
0.0113 1.047e+01 - 7.5227i
0.0207 5.829e+00 - 7.6529i
0.0379 2.340e+00 - 5.6271i
0.0695 7.765e-01 - 3.4188i
0.1274 2.394e-01 - 1.9295i
0.2336 7.216e-02 - 1.0648i
0.4281 2.157e-02 - 0.5834i
0.7848 6.433e-03 - 0.3188i
1.4384 1.916e-03 - 0.1740i
2.6367 5.705e-04 - 0.0950i
4.8329 1.698e-04 - 0.0518i
8.8587 5.055e-05 - 0.0283i
16.2378 1.505e-05 - 0.0154i
29.7635 4.478e-06 - 0.0084i
54.5559 1.333e-06 - 0.0046i
100.0000 3.967e-07 - 0.0025i
Continuous-time frequency response.
Model Properties
sys をプロットします。
bode(sys)

この例では、ランダムに生成された応答データと周波数について考えます。
3 x 2 x 7 の複素数配列と、0.01 rad/s から 100 rad/s までの間の 7 つの点をもつ周波数ベクトルを生成します。サンプル時間 Ts を 5 秒に設定します。
rng(0) r = randn(3,2,7)+1i*randn(3,2,7); w = logspace(-2,2,7); Ts = 5;
モデルを作成します。
sys = frd(r,w,Ts)
sys =
From input 1 to:
Frequency(rad/s) output 1 output 2 output 3
---------------- -------- -------- --------
0.0100 0.5377 + 0.3192i 1.8339 + 0.3129i -2.2588 - 0.8649i
0.0464 -0.4336 + 1.0933i 0.3426 + 1.1093i 3.5784 - 0.8637i
0.2154 0.7254 - 0.0068i -0.0631 + 1.5326i 0.7147 - 0.7697i
1.0000 1.4090 - 1.0891i 1.4172 + 0.0326i 0.6715 + 0.5525i
4.6416 0.4889 - 1.4916i 1.0347 - 0.7423i 0.7269 - 1.0616i
21.5443 0.8884 - 0.1924i -1.1471 + 0.8886i -1.0689 - 0.7648i
100.0000 0.3252 - 0.1774i -0.7549 - 0.1961i 1.3703 + 1.4193i
From input 2 to:
Frequency(rad/s) output 1 output 2 output 3
---------------- -------- -------- --------
0.0100 0.8622 - 0.0301i 0.3188 - 0.1649i -1.3077 + 0.6277i
0.0464 2.7694 + 0.0774i -1.3499 - 1.2141i 3.0349 - 1.1135i
0.2154 -0.2050 + 0.3714i -0.1241 - 0.2256i 1.4897 + 1.1174i
1.0000 -1.2075 + 1.1006i 0.7172 + 1.5442i 1.6302 + 0.0859i
4.6416 -0.3034 + 2.3505i 0.2939 - 0.6156i -0.7873 + 0.7481i
21.5443 -0.8095 - 1.4023i -2.9443 - 1.4224i 1.4384 + 0.4882i
100.0000 -1.7115 + 0.2916i -0.1022 + 0.1978i -0.2414 + 1.5877i
Sample time: 5 seconds
Discrete-time frequency response.
Model Properties
指定されたデータは、結果として 2 入力、3 出力の frd モデルとなります。
この例では、伝達関数モデルから継承されたプロパティをもつ周波数応答データ モデルを作成します。
TimeUnit プロパティが 'minutes' に、InputDelay プロパティが 3 に設定された伝達関数 sys1 を作成します。
numerator1 = [2,0]; denominator1 = [1,8,0]; sys1 = tf(numerator1,denominator1,'TimeUnit','minutes','InputDelay',3)
sys1 =
2 s
exp(-3*s) * ---------
s^2 + 8 s
Continuous-time transfer function.
Model Properties
propValues1 = {sys1.TimeUnit,sys1.InputDelay}propValues1=1×2 cell array
{'minutes'} {[3]}
sys1 から継承されたプロパティをもつ frd モデルを作成します。
rng(0) response = randn(1,1,7)+1i*randn(1,1,7); w = logspace(-2,2,7); sys2 = frd(response,w,sys1)
sys2 =
Frequency(rad/minute) Response
--------------------- --------
0.0100 0.5377 + 0.3426i
0.0464 1.8339 + 3.5784i
0.2154 -2.2588 + 2.7694i
1.0000 0.8622 - 1.3499i
4.6416 0.3188 + 3.0349i
21.5443 -1.3077 + 0.7254i
100.0000 -0.4336 - 0.0631i
Input delays (minutes): 3
Continuous-time frequency response.
Model Properties
propValues2 = {sys2.TimeUnit,sys2.InputDelay}propValues2=1×2 cell array
{'minutes'} {[3]}
frd モデル sys2 が sys1 と同じプロパティをもっていることを確認します。
この例では、水タンク モデル用に収集された周波数応答データを読み込みます。
load wtankData.matこのモデルには 1 つの入力 Voltage と 1 つの出力 Water height があります。
入力名と出力名を指定して、frd モデルを作成します。
sys = frd(response,frequency,'InputName','Voltage','OutputName','Height');
周波数応答をプロットします。
bode(sys)

入力名と出力名がボード線図に表示されます。入力と出力に名前を付けるのは、MIMO システムで応答プロットを扱うときに有用である可能性があります。
この例では、次の状態空間モデルの frd モデルを計算します。
状態空間行列を使用して状態空間モデルを作成します。
A = [-2 -1;1 -2]; B = [1 1;2 -1]; C = [1 0]; D = [0 1]; ltiSys = ss(A,B,C,D);
状態空間モデル ltiSys を周波数 0.01 rad/s から 100 rad/s までの間について frd モデルに変換します。
w = logspace(-2,2,50); sys = frd(ltiSys,w);
周波数応答を比較します。
bode(ltiSys,'b',sys,'r--')

応答は一致します。
frd モデルの配列を作成するには、周波数応答データの多次元配列を指定できます。
たとえば、サイズ [NY NU NF S1 ... Sn] の数値配列として応答データを指定する場合、関数は frd モデルの S1 x ...-x Sn の配列を返します。これらの各モデルには NY の出力、NU の入力、および NF の周波数点があります。
0.1 rad/s から 10 rad/s までの間の 10 の周波数点において、1 出力、2 入力をもつモデルについて、2 行 3 列のランダムな応答データの配列を生成します。
w = logspace(-1,1,10); r = randn(1,2,10,2,3)+1i*randn(1,2,10,2,3); sys = frd(r,w);
モデルの配列からインデックス (2,1) でモデルを抽出します。
sys21 = sys(:,:,2,1)
sys21 =
From input 1 to:
Frequency(rad/s) output 1
---------------- --------
0.1000 0.6715 + 0.0229i
0.1668 0.7172 - 1.7502i
0.2783 0.4889 - 0.8314i
0.4642 0.7269 - 1.1564i
0.7743 0.2939 - 2.0026i
1.2915 0.8884 + 0.5201i
2.1544 -1.0689 - 0.0348i
3.5938 -2.9443 + 1.0187i
5.9948 0.3252 - 0.7145i
10.0000 1.3703 - 0.2248i
From input 2 to:
Frequency(rad/s) output 1
---------------- --------
0.1000 -1.2075 - 0.2620i
0.1668 1.6302 - 0.2857i
0.2783 1.0347 - 0.9792i
0.4642 -0.3034 - 0.5336i
0.7743 -0.7873 + 0.9642i
1.2915 -1.1471 - 0.0200i
2.1544 -0.8095 - 0.7982i
3.5938 1.4384 - 0.1332i
5.9948 -0.7549 + 1.3514i
10.0000 -1.7115 - 0.5890i
Continuous-time frequency response.
Model Properties
frd オブジェクトで負の周波数値を指定できます。この機能は、複素係数をもつモデルの周波数応答データを取得するときに有用です。
正の値と負の値の両方をもつ周波数ベクトルを作成します。
w0 = sort([-logspace(-2,2,50) 0 logspace(-2,2,50)]);
複素係数をもつ状態空間モデルを作成します。
A = [-3.50,-1.25-0.25i;2,0]; B = [1;0]; C = [-0.75-0.5i,0.625-0.125i]; D = 0.5; Gc = ss(A,B,C,D);
このモデルを、指定された周波数で frd モデルに変換します。
sys = frd(Gc,w0);
モデルの周波数応答をプロットします。
bode(Gc,'b',sys,'r--')

このプロット応答はほぼ一致します。プロットは、複素係数をもつモデルに対して、1 つは右向き矢印を使った正の周波数、もう 1 つは左向き矢印を使った負の周波数の 2 つの分岐を示します。両方の分岐で、矢印は周波数の増加の方向を示します。
バージョン履歴
R2006a より前に導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)