Main Content

frd

周波数応答データ モデル

説明

frd を使用して実数値の、または複素数値の周波数応答データ モデルを作成したり、動的システム モデルを周波数応答データ モデル形式に変換したりします。

周波数応答データ モデルは、複素数の周波数応答データを、対応する周波数点と共に保存します。たとえば、周波数応答データ モデル H(jwi) は、各入力周波数 wi における周波数応答を保存します。ここで i = 1,…,n です。frd モデル オブジェクトは SISO または MIMO 周波数応答データ モデルを連続時間または離散時間で表現できます。詳細については、周波数応答データ (FRD) モデルを参照してください。

frd を使用して、一般化周波数応答データ (genfrd) モデルを作成することもできます。

作成

frd モデルを次のいずれかの方法で取得できます。

説明

sys = frd(response,frequency) は、ResponseData プロパティと Frequency プロパティを設定して連続時間の周波数応答データ (frd) モデルを作成します。frequency には、負の周波数も正の周波数も含めることができます。

sys = frd(response,frequency,ts) は、サンプル時間 ts で離散時間 frd モデルを作成します。サンプル時間を未指定のままにするには、ts を –1 に設定します。

sys = frd(response,frequency,ltiSys) は、サンプル時間も含め、動的システム モデル ltiSys から継承したプロパティをもつ周波数応答データ モデルを作成します。

sys = frd(___,Name,Value) は、前述の任意の入力引数の組み合わせについて、名前と値の引数を 1 つ以上使用して、周波数応答データ モデルのプロパティを設定します。

sys = frd(ltiSys,frequency) は、動的システム モデル ltiSys を周波数応答データ モデルに変換します。frd は、frequency によって指定される周波数における周波数応答を計算します。sys は、ltiSys.TimeUnit から周波数単位ラジアン/TimeUnit を継承します。

sys = frd(ltiSys,frequency,FrequencyUnits) は、FrequencyUnit で指定される単位で周波数を解釈します。

入力引数

すべて展開する

周波数応答データ。ベクトルまたは複素数の多次元配列として指定します。

  • SISO システムの場合、frequency で指定される周波数点での周波数応答値のベクトルを指定します。

  • Nu 入力と Ny 出力のある MIMO システムの場合、Ny x Nu x Nf の配列を指定します。ここで Nf は周波数点の数です。

  • Nu の入力と Ny の出力をもつモデルの S1 x ... x Sn の配列の場合、サイズが [Ny Nu Nf S1Sn] の多次元配列を指定します。

    たとえば、サイズが [Ny,Nu,Nf,3,4] の response は、3 行 4 列のモデルの配列についての応答データを表します。各モデルには Ny の出力、Nu の入力、Nf の周波数点があります。

この入力は ResponseData プロパティを設定します。

response に対応する周波数点。Nf の点を含むベクトルとして指定します。frequency には正と負の両方の周波数を含めることができます。

この入力は Frequency プロパティを設定します。

スカラーとして指定されたサンプル時間。

この入力は Ts プロパティを設定します。

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

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

  • genssuss (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 システムの場合、ResponseDataFrequency プロパティで指定された Nf 周波数点における周波数応答値の 1 x 1 x Nf の配列です。

  • Nu 入力と Ny 出力のある MIMO システムの場合、ResponseData は、Ny x Nu x Nf の配列です。ここで Nf は周波数点の数です。

    たとえば、ResponseData(ky,ku,kf) は、周波数 Frequency(kf) における入力 ku から出力 ky への周波数応答です。

  • Nu の入力と Ny の出力をもつモデルの S1 x ... x Sn の配列の場合、ResponseData はサイズが [Ny Nu Nf S1Sn] の多次元配列です。

    たとえば、サイズが [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 システムのすべての入出力ペアに対して同じ伝達遅延を指定します。

  • NyNu 列の配列 — MIMO システムの入出力ペアごとに別々の伝達遅延を指定します。ここで、Ny は出力の数、Nu は入力の数です。

連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で伝達遅延を指定します。離散時間システムの場合、サンプル時間 Ts の整数倍で伝達遅延を指定します。

各入力チャネルの入力遅延。次のいずれかとして指定します。

  • スカラー — SISO システムに入力遅延を、または多入力システムのすべての入力に同じ遅延を指定します。

  • Nu 行 1 列のベクトル — 多入力システムの入力に別々の入力遅延を指定します。Nu は入力の数です。

連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で入力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で入力遅延を指定します。

詳細については、線形システムでのむだ時間を参照してください。

各出力チャネルの出力遅延。次のいずれかとして指定します。

  • スカラー — SISO システムに出力遅延を、または多出力システムのすべての出力に同じ遅延を指定します。

  • Ny 行 1 列のベクトル — 多出力システムの出力に別々の出力遅延を指定します。Ny は出力の数です。

連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で出力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で出力遅延を指定します。

詳細については、線形システムでのむだ時間を参照してください。

サンプル時間。以下として指定します。

  • 0 (連続時間システムの場合)。

  • 離散時間システムのサンプリング周期を表す正のスカラー。TsTimeUnit プロパティによって指定される時間単位で指定します。

  • -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.usys.InputName と同じです。

InputName の使用目的は次のとおりです。

  • モデル表示とプロット上のチャネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

入力チャネル単位。以下のいずれかとして指定します。

  • 文字ベクトル (単入力モデルの場合)。

  • 文字ベクトルの cell 配列 (多入力モデルの場合)。

  • '' (いずれの入力チャネルにも単位を指定しない場合)。

InputUnit を使用して入力信号の単位を指定します。InputUnit はシステムの動作に影響しません。

入力チャネル グループ。構造体として指定します。InputGroup プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 12、および 35 をそれぞれ含む、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.ysys.OutputName と同じです。

OutputName の使用目的は次のとおりです。

  • モデル表示とプロット上のチャネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

出力チャネル単位。次のいずれかとして指定されます。

  • 文字ベクトル (単出力モデルの場合)。

  • 文字ベクトルの cell 配列 (多出力モデルの場合)。

  • '' (いずれの出力チャネルにも単位を指定しない場合)。

OutputUnit を使用して出力信号の単位を指定します。OutputUnit はシステムの動作に影響しません。

出力チャネル グループ。構造体として指定します。OutputGroup プロパティを使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1、および 35 をそれぞれ含む、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 つの変数 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
 
...

複数のパラメーター値または操作点で Simulink モデルを線形化することにより生成されたモデル配列の場合、SamplingGrid には配列の各エントリに対応する変数値が自動的に入力されます。たとえば、Simulink Control Design のコマンド linearize (Simulink Control Design) および slLinearizer (Simulink Control Design) により、SamplingGrid が自動的に入力されます。

既定では、SamplingGrid はフィールドのない構造体です。

オブジェクト関数

以下のリストには、frd モデルで使用できる関数の代表的なサブセットが含まれています。一般に、動的システム モデルに適用できる多くの関数も frd オブジェクトに適用できます。frd モデルは、すべての時間領域解析関数で機能しません。

すべて展開する

bode周波数応答、または振幅と位相データのボード線図
sigma動的システムの特異値プロット
nyquist周波数応答のナイキスト線図
nichols周波数応答のニコルス線図
bandwidth周波数応答帯域幅
freqresp周波数のグリッドでのシステム応答の評価
marginゲイン余裕、位相余裕、および交差周波数
chgFreqUnit周波数応答データ モデルの周波数単位の変更
chgTimeUnit動的システムの時間単位の変更
frdfunfrd モデル オブジェクトの各周波数での周波数応答値への関数の適用
fselectFRD モデルの周波数点、または範囲の選択
interpFRD モデルの内挿
fcat周波数領域に沿って FRD モデルを連結
fnormFRD モデルの点ごとのピーク ゲイン
feedback複数のモデルのフィードバック接続
connect動的システムのブロック線図相互接続
series2 つのモデルの直列接続
parallel2 つのモデルの並列接続
pidtune線形プラント モデルのための PID 調整アルゴリズム

すべて折りたたむ

周波数応答データから frd オブジェクトを作成します。

この例では、水タンク モデル用に収集された周波数応答データを読み込みます。

load wtankData.mat

このデータには、周波数範囲 10-3 rad/s から 102 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.

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.

指定されたデータは、結果として 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.
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.
propValues2 = {sys2.TimeUnit,sys2.InputDelay}
propValues2=1×2 cell array
    {'minutes'}    {[3]}

frd モデル sys2sys1 と同じプロパティをもっていることを確認します。

この例では、水タンク モデル用に収集された周波数応答データを読み込みます。

load wtankData.mat

このモデルには 1 つの入力 Voltage と 1 つの出力 Water height があります。

入力名と出力名を指定して、frd モデルを作成します。

sys = frd(response,frequency,'InputName','Voltage','OutputName','Height');

周波数応答をプロットします。

bode(sys)

入力名と出力名がボード線図に表示されます。入力と出力に名前を付けるのは、MIMO システムで応答プロットを扱うときに有用である可能性があります。

この例では、次の状態空間モデルの frd モデルを計算します。

A=[-2-11-2],B=[112-1],C=[10],D=[01]

状態空間行列を使用して状態空間モデルを作成します。

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.

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 より前に導入