メインコンテンツ

bodeplot

動的システムのボード周波数応答をプロット

    説明

    bodeplot 関数は、動的システム モデルのボードの振幅と位相をプロットします。プロットをカスタマイズするには、BodePlot オブジェクトを返し、ドット表記を使用して変更します。詳細については、コマンド ラインでの線形解析プロットのカスタマイズ (Control System Toolbox)を参照してください。

    周波数応答データを取得するには、bode 関数を使用します。

    bodeplot(sys) は、動的システム モデル sys のボードの振幅と位相をプロットします。

    sys が多入力多出力 (MIMO) モデルである場合、bodeplot 関数は、各プロットが 1 つの入出力ペアの周波数応答を示すボード線図のグリッドを作成します。

    sys が複素係数をもつモデルである場合、次のようになります。

    • 対数周波数スケールで、プロットは、1 つは正の周波数、もう 1 つは負の周波数の 2 つの分岐を示します。プロットは、各分岐に対する周波数値の増加の方向を示す矢印も表示します。

    • 線形周波数スケールで、プロットは、周波数値 0 を中心とする対称な周波数範囲をもつ 1 つの分岐を示します。

    bodeplot(sys1,sys2,...,sysN) は、複数の動的システム sys1,sys2,…,sysN の周波数応答を同じ線図上にプロットします。

    bodeplot(sys1,LineSpec1,...,sysN,LineSpecN) は、指定された各システムのボード応答のライン スタイル、マーカー タイプ、および色を設定します。

    bodeplot(___,w) は、w で指定された周波数の応答をプロットします。周波数範囲または周波数のベクトルを指定できます。w を前述の任意の構文で使用できます。

    bodeplot(___,plotoptions) は、plotoptions で指定されたプロット オプションを使用してボード周波数応答をプロットします。plotoptions に指定する設定は、現在の MATLAB® セッションのプロット基本設定をオーバーライドします。ローカルの基本設定にかかわらず、同じ外観の複数のプロットを生成するスクリプトを記述する場合、この構文が有用です。

    bodeplot(___,Name=Value) は、1 つ以上の名前と値の引数を使用して応答プロパティを指定します。たとえば、bodeplot(sys,LineWidth=1) はプロット ラインの幅を 1 に設定します。 (R2026a 以降)

    • 複数のシステムの応答をプロットする場合、指定した名前と値の引数はすべての応答に適用されます。

    • 次の名前と値の引数は、他の入力引数で指定された値をオーバーライドします。

      • FrequencySpecw を使用して指定された周波数値をオーバーライドします。

      • ColorLineSpec を使用して指定された色をオーバーライドします。

      • MarkerStyleLineSpec を使用して指定されたマーカー スタイルをオーバーライドします。

      • LineStyleLineSpec を使用して指定されたライン スタイルをオーバーライドします。

    bodeplot(parent,___) は、FigureTiledChartLayout などの指定された親グラフィックス コンテナーにボード応答をプロットし、Parent プロパティを設定します。指定された開いている Figure にプロットを作成する場合、または App Designer でアプリを作成する場合に、この構文を使用します。

    bp = bodeplot(___) は、ボード応答をプロットし、対応するチャート オブジェクトを返します。応答プロットの外観と動作をカスタマイズするには、ドット表記を使用してチャート オブジェクトのプロパティを変更します。

    すべて折りたたむ

    この例では、プロット ハンドルを使用して周波数単位を Hz に変更し、位相プロットをオフにします。

    5 つの状態をもつランダムな状態空間モデルを生成し、チャート オブジェクト bp を使用してボード線図を作成します。

    rng("default")
    sys = rss(5);
    bp = bodeplot(sys);

    MATLAB figure

    チャート オブジェクトを変更することにより、単位を Hz に変更し、位相プロットを非表示にします。

    bp.FrequencyUnit = "Hz";
    bp.PhaseVisible = "off";

    MATLAB figure

    チャート オブジェクトを変更すると、ボード線図は自動的に更新されます。

    この例では、タイトルに 15 ポイントの赤いテキストを使用し、カスタム タイトルを設定するボード線図を作成します。bodeoptions を使用してプロットのプロパティを指定すると、指定したプロパティにより MATLAB セッションの基本設定がオーバーライドされます。このため、プロットが生成される MATLAB セッションの基本設定にかかわらず、プロットの外観が同じになります。

    まず、bodeoptions を使用して、既定のオプション セットを作成します。

    opts = bodeoptions;

    次に、オプション セット opts の必要なプロパティを変更します。opt.Title は構造体であるため、その構造体のフィールドと値を指定することにより、プロットのタイトルのプロパティを指定します。

    opts.Title.FontSize = 15;
    opts.Title.Color = [1 0 0];
    opts.Title.String = 'System Frequency Response';
    opts.FreqUnits = 'Hz';

    次に、オプション セット opts を使用してボード線図を作成します。

    bodeplot(tf(1,[1,1]),opts);

    MATLAB figure

    opts は固定のオプション セットで始まるため、プロットの結果は MATLAB セッションのツールボックスの基本設定に依存しません。

    この例では、次の連続時間 SISO 動的システムのボード線図を作成します。次に、グリッドをオンにし、プロットの名前を変更して、周波数スケールを変更します。

    sys(s)=s2+0.1s+7.5s4+0.12s3+9s2.Continuous-time SISO dynamic system

    伝達関数 sys を作成します。

    sys = tf([1 0.1 7.5],[1 0.12 9 0 0]);

    ボード線図を作成します。返されたチャート オブジェクトを変更することにより、プロットのプロパティを指定します。

    bp = bodeplot(sys);
    bp.FrequencyScale = "linear";
    title("Bode Plot of Transfer Function");
    grid on

    MATLAB figure

    bodeplot はシステム ダイナミクスに基づいてプロット範囲を自動的に選択します。

    この例では、3 つの入力、3 つの出力および 3 つの状態をもつ MIMO 状態空間モデルについて考えます。周波数スケールが線形のボード線図を作成し、周波数の単位を Hz に指定して、グリッドをオンにします。

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

    J = [8 -3 -3; -3 8 -3; -3 -3 8];
    F = 0.2*eye(3);
    A = -J\F;
    B = inv(J);
    C = eye(3);
    D = 0;
    sys_mimo = ss(A,B,C,D);
    size(sys_mimo)
    State-space model with 3 outputs, 3 inputs, and 3 states.
    

    ボード線図を作成し、対応するチャート オブジェクトを返します。

    bp = bodeplot(sys_mimo);

    チャート オブジェクトのプロパティを更新することにより、プロットをカスタマイズします。

    bp.FrequencyScale = "linear";
    bp.FrequencyUnit = "Hz";
    grid on

    MATLAB figure

    チャート オブジェクトのプロパティを変更すると、ボード線図が自動的に更新されます。MIMO モデルの場合、bodeplot はボード線図の配列を生成し、各プロットは 1 組の I/O の周波数応答を表示します。

    この例では、1 ラジアン/秒における位相が 150 度になるように、システム応答の位相を一致させます。

    まず、チャート オブジェクト bp を使用して、伝達関数のボード線図を作成します。

    sys = tf(1,[1 1]); 
    bp = bodeplot(sys);

    MATLAB figure

    位相マッチングを有効にし、位相マッチングの周波数と値を設定します。

    bp.PhaseMatchingEnabled = "on"; 
    bp.PhaseMatchingFrequency = 1; 
    bp.PhaseMatchingValue = 150;

    MATLAB figure

    最初のボード線図では、周波数 1 rad/s における位相が -45 度です。1 rad/s における位相がほぼ 150 度になるように位相マッチング オプションを設定すると、2 番目のボード線図が生成されます。ただし、位相は -45 + N*360 のみになります (ここで N は整数)。したがって、プロットは許容される最も近い位相、具体的には 315 度 (すなわち 1*360-45=315oEquation of how the allowable phase is calculated) に設定されます。

    この例では、同定された 2 つの状態空間モデル (2 つおよび 6 つの状態と、2 σ の信頼領域をもつ) の周波数応答を比較します。

    同定された状態空間モデルのデータを読み込み、n4sid を使用して 2 つのモデルを推定します。n4sid を使用するには、System Identification Toolbox™ のライセンスが必要です。

    load iddata1
    sys1 = n4sid(z1,2); 
    sys2 = n4sid(z1,6);

    2 つのシステムのボード線図を作成します。

    bodeplot(sys1,'r',sys2,'b');
    legend('sys1','sys2');

    MATLAB figure

    プロットから、両方のモデルがデータに約 70% 適合していることを確認します。ただし、sys2 は周波数応答でより高い不確かさを示しており、特にナイキスト周波数の近傍で見られます。ここで、linspace を使用して周波数のベクトルを作成し、周波数ベクトル w を使用してボード応答をプロットします。

    w = linspace(8,10*pi,256);
    bp = bodeplot(sys1,sys2,w);
    legend('sys1','sys2');

    位相マッチングを有効にし、信頼領域の標準偏差を指定して、信頼領域を表示します。

    bp.PhaseMatchingEnabled = "on";
    bp.Characteristics.ConfidenceRegion.NumberOfStandardDeviations = 2;
    bp.Characteristics.ConfidenceRegion.Visible = "on";

    MATLAB figure

    また、showconfidence コマンドを使用して、ボード線図に信頼領域を表示することもできます。

    showConfidence(bp)
    

    この例では、入力/出力データから同定されたパラメトリック モデルの周波数応答を、同じデータを使用して同定されたノンパラメトリック モデルと比較します。データに基づいて、パラメトリック モデルとノンパラメトリック モデルを同定します。

    データを読み込み、tfestspa を使用して、パラメトリック モデルとノンパラメトリック モデルをそれぞれ作成します。

    load iddata2 z2;
    w = linspace(0,10*pi,128);
    sys_np = spa(z2,[],w);
    sys_p = tfest(z2,2);

    spatfest には System Identification Toolbox™ ソフトウェアが必要です。モデル sys_np はノンパラメトリックと同定されたモデルであり、sys_p はパラメトリックと同定されたモデルです。

    両方のシステムを含むボード線図を作成します。このプロットの位相マッチングを有効にします。

    bp = bodeplot(sys_p,sys_np,w);
    bp.PhaseMatchingEnabled = "on";
    grid on
    legend('Parametric Model','Non-Parametric model');

    MATLAB figure

    入力引数

    すべて折りたたむ

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

    • tf (Control System Toolbox)zpk (Control System Toolbox)ss (Control System Toolbox) モデルなどの連続時間または離散時間の数値 LTI モデル。

    • sparss (Control System Toolbox) モデルまたは mechss (Control System Toolbox) モデルなどのスパース状態空間モデル。スパース モデルに対して、周波数グリッド w を指定しなければなりません。

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

      • 調整可能な制御設計ブロックの場合、関数は応答をプロットするモデルをその現在の値で評価します。

      • 不確かさをもつ制御設計ブロックの場合、関数はモデルのノミナル値とランダム サンプルをプロットします。

    • frd モデルなどの周波数応答データ モデル。このようなモデルの場合、関数はモデルで定義されている周波数での応答をプロットします。

    • idtfidssidproc モデルなどの同定された LTI モデル。

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

    ライン スタイル、マーカー、色。記号を含む string または文字ベクトルとして指定します。記号は任意の順序で表記できます。3 つの特性をすべて指定する必要はありません。たとえば、マーカーを指定してライン スタイルを省略した場合、プロットはラインなしでマーカーのみを表示します。

    例: '--or' は、円マーカーをもつ赤い破線です。

    ライン スタイル説明
    "-"実線
    "--"破線
    ":"点線
    "-."一点鎖線
    マーカー説明
    "o"
    "+"プラス記号
    "*"アスタリスク
    "."
    "x"x 印
    "_"水平線
    "|"垂直線
    "s"正方形
    "d"菱形
    "^"上向き三角形
    "v"下向き三角形
    ">"右向き三角形
    "<"左向き三角形
    "p"星形五角形
    "h"星形六角形
    説明
    "r"
    "g"
    "b"
    "c"シアン
    "m"マゼンタ
    "y"黄色
    "k"
    "w"

    応答を計算する周波数。次のいずれかの値として指定します。

    • 形式 {wmin,wmax} の cell 配列 — wmin から wmax の範囲の周波数で応答を計算します。wmaxsys のナイキスト周波数より大きい場合、応答はナイキスト周波数までしか計算されません。

    • 周波数のベクトル — 指定された各周波数で応答を計算します。たとえば、logspace を使用すると、対数的に等間隔な周波数値の行ベクトルを生成できます。ベクトル w には正と負の両方の周波数を含めることができます。

    • [] — システム ダイナミクスに基づいて自動的に周波数を選択します。

    複素係数をもつモデルでは、プロットに対して周波数範囲 [wmin,wmax] を指定する場合、次のようになります。

    • 対数周波数スケールで、プロット周波数範囲は [wmin,wmax] に設定され、プロットは、1 つは正の周波数 [wmin,wmax]、もう 1 つは負の周波数 [–wmax,–wmin] の 2 つの分岐を示します。

    • 線形周波数スケールで、プロット周波数範囲は [–wmax,wmax] に設定され、プロットは、周波数値 0 を中心とする対称な周波数範囲をもつ 1 つの分岐を示します。

    周波数はラジアン/TimeUnit 単位で指定します。ここで TimeUnit はモデルの TimeUnit プロパティです。

    ボード線図オプション。bodeoptions オブジェクトとして指定します。これらのオプションを使用してボード線図の外観をカスタマイズできます。plotoptions に指定する設定は、現在の MATLAB セッションの基本設定をオーバーライドします。

    親グラフィックス コンテナー。次のいずれかのオブジェクトとして指定します。

    • Figure

    • TiledChartLayout

    • UIFigure

    • UIGridLayout

    • UIPanel

    • UITab

    名前と値の引数

    すべて折りたたむ

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

    例: bodeplot(sys,LegendDisplay="off") は、プロット凡例から sys の応答を非表示にします。

    応答を計算する周波数。次のいずれかの値として指定します。

    • 形式 {wmin,wmax} の cell 配列 — wmin から wmax の範囲の周波数で応答を計算します。wmaxsys のナイキスト周波数より大きい場合、応答はナイキスト周波数までしか計算されません。

    • 周波数のベクトル — 指定された各周波数で応答を計算します。たとえば、logspace を使用すると、対数的に等間隔な周波数値の行ベクトルを生成できます。ベクトル FrequencySpec には正と負の両方の周波数を含めることができます。

    • [] — システム ダイナミクスに基づいて自動的に周波数を選択します。

    複素係数をもつモデルでは、プロットに対して周波数範囲 [wmin,wmax] を指定する場合、次のようになります。

    • 対数周波数スケールで、プロット周波数範囲は [wmin,wmax] に設定され、プロットは、1 つは正の周波数 [wmin,wmax]、もう 1 つは負の周波数 [–wmax,–wmin] の 2 つの分岐を示します。

    • 線形周波数スケールで、プロット周波数範囲は [–wmax,wmax] に設定され、プロットは、周波数値 0 を中心とする対称な周波数範囲をもつ 1 つの分岐を示します。

    周波数はラジアン/TimeUnit 単位で指定します。ここで TimeUnit はモデルの TimeUnit プロパティです。

    応答名。string または文字ベクトルとして指定します。string として保存されます。

    応答の可視性。次の logical オン/オフ値のいずれかとして指定します。

    • "on"1、または true — 応答をプロットに表示します。

    • "off"0、または false — 応答をプロットに表示しません。

    値は、matlab.lang.OnOffSwitchState 型の on/off の logical 値として保存されます。

    凡例に応答をリストするオプション。次の logical オン/オフ値のいずれかとして指定します。

    • "on"1、または true — 凡例に応答をリストします。

    • "off"0、または false — 凡例に応答をリストしません。

    値は、matlab.lang.OnOffSwitchState 型の on/off の logical 値として保存されます。

    マーカー スタイル。次のいずれかの値として指定します。名前と値の引数を使用してマーカー スタイルを指定すると、LineSpec を使用して指定したマーカー スタイルがオーバーライドされます。

    マーカー説明
    "none"マーカーなし
    "o"
    "+"プラス記号
    "*"アスタリスク
    "."
    "x"x 印
    "_"水平線
    "|"垂直線
    "s"正方形
    "d"菱形
    "^"上向き三角形
    "v"下向き三角形
    ">"右向き三角形
    "<"左向き三角形
    "p"星形五角形
    "h"星形六角形

    プロットの色。RGB 3 成分または 16 進数のカラー コードとして指定します。RGB 3 成分として保存されます。名前と値の引数を使用して色を指定すると、LineSpec を使用して指定した色がオーバーライドされます。

    一般的な色を名前で指定することもできます。次の表に、そうした色とそれに対応する RGB 3 成分および 16 進数のカラー コードをリストします。

    色の名前RGB 3 成分16 進数のカラー コード

    "red" または "r"

    [1 0 0]#FF0000

    "green" または "g"

    [0 1 0]#00FF00

    "blue" または "b"

    [0 0 1]#0000FF

    "cyan" または "c"

    [0 1 1]#00FFFF

    "magenta" または "m"

    [1 0 1]#FF00FF

    "yellow" または "y"

    [1 1 0]#FFFF00

    "black" または "k"

    [0 0 0]#000000

    "white" または "w"

    [1 1 1]#FFFFFF

    ライン スタイル。次のいずれかの値として指定します。名前と値の引数を使用してライン スタイルを指定すると、LineSpec を使用して指定したライン スタイルがオーバーライドされます。

    ライン スタイル説明
    "-"実線
    "--"破線
    ":"点線
    "-."一点鎖線
    "none"ラインなし

    マーカー サイズ。正のスカラーとして指定します。

    ラインの幅。正のスカラーとして指定します。

    系列インデックス。正の整数または "none" として指定します。

    既定では、SeriesIndex プロパティは、応答がチャートに追加された順序に対応する数値です (1 から始まります)。MATLAB はこの数値を使用して、応答に色、ライン スタイル、またはマーカーを自動的に割り当てるためのインデックスを計算します。チャート内の応答で SeriesIndex の数値が同じであるものは、色、ライン スタイル、およびマーカーも同じになります。

    SeriesIndex"none" は、応答がインデックス方式を利用しないことを示します。

    出力引数

    すべて折りたたむ

    チャート オブジェクト。BodePlot オブジェクトとして返されます。プロットの外観と動作をカスタマイズするには、ドット表記を使用してこのオブジェクトのプロパティを変更します。詳細については、BodePlot Properties (Control System Toolbox) を参照してください。

    アルゴリズム

    ソフトウェアは周波数応答を次のように計算します。

    1. 動的システムの零点-極-ゲイン (zpk (Control System Toolbox)) 表現を計算します。

    2. システムの各入出力チャネルに対する零点-極-ゲイン データに基づいて周波数応答のゲインと位相を評価します。

      • 連続時間システムの場合、bodeplot 関数は、虚軸 s = 上の周波数応答を評価します。その際、正の周波数だけを考慮します。

      • 離散時間システムの場合、bodeplot 関数は、単位円上の周波数応答を評価します。解釈の効率を上げるため、コマンドは単位円の上半分を次のようにパラメーター化します。

        z=ejωTs,0ωωN=πTs,

        ここで、Ts はサンプル時間、ωN はナイキスト周波数です。ソフトウェアは、相当する連続時間周波数 ωx 軸変数として使用します。H(ejωTs) が周期的で周期 2ωN なので、bodeplot 関数は応答をナイキスト周波数 ωN までしかプロットしません。sys が、サンプル時間が指定されていない離散時間モデルである場合、bodeplot 関数は Ts = 1 を使用します。

    バージョン履歴

    R2006a より前に導入

    すべて展開する