Main Content

bode

周波数応答、または振幅と位相データのボード線図

説明

bode(sys) は、動的システム モデル sys の周波数応答のボード線図を作成します。プロットは、システム応答の振幅 (dB 単位) と位相 (度単位) を周波数の関数として表示します。bode は、システム ダイナミクスに基づいてプロットする周波数を自動的に決定します。

sys が多入力多出力 (MIMO) モデルである場合、bode はボード線図の配列を生成し、各線図は 1 組の I/O の周波数応答を示します。

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

  • 対数周波数スケールで、プロットは、1 つは正の周波数、もう 1 つは負の周波数の 2 つの分岐を示します。プロットは、各分岐に対する周波数値の増加の方向を示す矢印も表示します。複素係数をもつモデルのボード線図を参照してください。

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

bode(sys1,sys2,...,sysN) は、複数の動的システムの周波数応答を同じ線図にプロットします。すべてのシステムは入力数と出力数が同じでなければなりません。

bode(sys1,LineSpec1,...,sysN,LineSpecN) は、プロット内の各システムの色、ライン スタイルおよびマーカーを指定します。

bode(___,w) は、w で指定された周波数のシステム応答をプロットします。

  • w が形式 {wmin,wmax} の cell 配列の場合、bode は応答を wmin から wmax の範囲の周波数でプロットします。

  • w が周波数のベクトルの場合、bode はそれぞれの指定された周波数で応答をプロットします。ベクトル w には負と正の両方の周波数を含めることができます。

w は、前述の構文のすべての入力引数の組み合わせで使用できます。

[mag,phase,wout] = bode(sys) は、ベクトル wout の各周波数での応答の振幅と位相を返します。関数はシステム ダイナミクスに基づいて wout の周波数を自動的に決定します。この構文はプロットを描画しません。

[mag,phase,wout] = bode(sys,w) は、w で指定された周波数での応答データを返します。

  • w が形式 {wmin,wmax} の cell 配列の場合、woutwmin から wmax の範囲の周波数を含みます。

  • w が周波数のベクトルである場合、wout = w です。

[mag,phase,wout,sdmag,sdphase] = bode(sys,w) は、同定されたモデル sys について、振幅値と位相値の推定標準偏差も返します。w を省略すると、関数はシステム ダイナミクスに基づいて wout の周波数を自動的に決定します。

すべて折りたたむ

次の連続時間 SISO 動的システムのボード線図を作成します。

H(s)=s2+0.1s+7.5s4+0.12s3+9s2.

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

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

指定の周波数範囲でボード線図を作成します。周波数の特定の範囲でダイナミクスに焦点を合わせるときにこの方法を使用します。

H = tf([-0.1,-2.4,-181,-1950],[1,3.3,990,2600]);
bode(H,{1,100})
grid on

cell 配列 {1,100} は、ボード線図に最小および最大の周波数値を指定します。このように周波数の範囲を指定すると、関数は周波数応答データの中間点を選択します。

あるいは、周波数応答の評価とプロットに使用する周波数点のベクトルを指定します。

w = [1 5 10 15 20 23 31 40 44 50 85 100];
bode(H,w,'.-')
grid on

bode は、指定された周波数のみで周波数応答をプロットします。

連続時間システムの周波数応答を、同一のボード線図にある等価な離散化システムと比較します。

連続時間動的システムと離散時間動的システムを作成します。

H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
Hd = c2d(H,0.5,'zoh');

両方のシステムを表示するボード線図を作成します。

bode(H,Hd)

離散時間システムのボード線図には、システムのナイキスト周波数をマークする垂直線が含まれます。

入力引数 LineSpec を使って、ボード線図に各システムのライン スタイル、色、またはマーカーを指定します。

H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
Hd = c2d(H,0.5,'zoh');
bode(H,'r',Hd,'b--')

最初の LineSpec である 'r' は、H の応答に赤の実線を指定します。2 番目の LineSpec である 'b--' は、Hd の応答に青の破線を指定します。

SISO システムの周波数応答の振幅と位相を計算します。

周波数を指定しない場合、bode はシステム ダイナミクスに基づいて周波数を選択し、これを 3 番目の出力引数に返します。

H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
[mag,phase,wout] = bode(H);

H は SISO モデルなので、最初の 2 つの次元 magphase はどちらも 1 です。3 番目の次元は wout の周波数点の数です。

size(mag)
ans = 1×3

     1     1    41

length(wout)
ans = 41

したがって、mag の 3 番目の次元の各エントリは、wout の対応する周波数における応答の振幅を提供します。

この例では 2 出力、3 入力のシステムを作成します。

rng(0,'twister'); % For reproducibility
H = rss(4,2,3);

このシステムでは、bode が各 I/O チャネルの周波数応答を個別のプロットとして単一の Figure 内にプロットします。

bode(H)

1 ~ 10 ラジアンの 20 の周波数でこれらの応答の振幅と位相を計算します。

w = logspace(0,1,20);
[mag,phase] = bode(H,w);

magphase は 3 次元配列で、最初の 2 つの次元は H の出力次元と入力次元に対応し、3 番目の次元は周波数の数です。たとえば、mag の次元を確認します。

size(mag)
ans = 1×3

     2     3    20

したがって、たとえば mag(1,3,10) は、w 内の 10 番目の周波数で計算された、3 番目の入力から最初の出力への応答の振幅です。同様に、phase(1,3,10) には同じ応答の位相が含まれています。

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

データに基づいて、パラメトリック モデルとノンパラメトリック モデルを同定します。

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

spa コマンドと tfest コマンドを使用するには、System Identification Toolbox™ ソフトウェアが必要です。

sys_np はノンパラメトリックと同定されたモデルです。sys_p はパラメトリックと同定されたモデルです。

両方のシステムを含むボード線図を作成します。

bode(sys_np,sys_p,w);
legend('sys-np','sys-p')

プロットを右クリックして [特性]、[信頼領域] を選択すると、ボード線図に信頼領域を表示できます。

同定されたモデルの振幅と位相の標準偏差を計算します。このデータを使用して、応答の不確かさの 3σ プロットを作成します。

データに基づいて、伝達関数モデルを同定します。周波数応答の振幅と位相の標準偏差データを取得します。

load iddata2 z2;
sys_p = tfest(z2,2);
w = linspace(0,10*pi,128);
[mag,ph,w,sdmag,sdphase] = bode(sys_p,w);

tfest コマンドを使用するには System Identification Toolbox™ ソフトウェアが必要です。

sys_p は同定された伝達関数モデルです。sdmagsdphase には、周波数応答の振幅と位相の標準偏差データがそれぞれ含まれています。

この標準偏差データを使用して、信頼領域に対応する 3σ プロットを作成します。

mag = squeeze(mag);
sdmag = squeeze(sdmag);
semilogx(w,mag,'b',w,mag+3*sdmag,'k:',w,mag-3*sdmag,'k:');

複素係数をもつモデルと実数係数をもつモデルのボード線図を同じプロット上に作成します。

rng(0)
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);
Gr = rss(5);
bode(Gc,Gr)
legend('Complex-coefficient model','Real-coefficient model','Location','southwest')

対数周波数スケールで、プロットは、複素係数のモデルに対して、1 つは右向き矢印を使った正の周波数、もう 1 つは左向き矢印を使った負の周波数の 2 つの分岐を示します。両方の分岐で、矢印は周波数の増加の方向を示します。実数係数のモデルのプロットには常に、矢印をもたない 1 つの分岐のみが含まれます。

プロットを右クリックして [プロパティ] を選択すると、ボード線図の周波数スケールを変更できます。[プロパティ エディター] ダイアログの [単位] タブで、周波数スケールを linear scale に設定します。また、関数 bodeplotbodeoptions オブジェクトとともに使用して、カスタマイズされたプロットを作成することもできます。

opt = bodeoptions;
opt.FreqScale = 'Linear';

カスタマイズされたオプションを使用してプロットを作成します。

bodeplot(Gc,Gr,opt)
legend('Complex-coefficient model','Real-coefficient model','Location','southwest')

線形周波数スケールで、プロットは、周波数値 0 を中心とする対称な周波数範囲をもつ 1 つの分岐を示します。複素係数モデルとともに応答をプロットする場合、プロットは実数係数モデルの負の周波数応答も示します。

入力引数

すべて折りたたむ

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

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

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

    • 調整可能な制御設計ブロックの場合、関数は周波数応答データをプロットする処理と返す処理の両方においてモデルをその現在の値で評価します。

    • 不確かさをもつ制御設計ブロックの場合、関数はモデルのノミナル値とランダム サンプルをプロットします。出力引数を使用する場合、関数はノミナル モデルのみの周波数応答データを返します。

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

  • idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox) モデルなどの同定された LTI モデル。このようなモデルの場合、関数は信頼区間をプロットし、周波数応答の標準偏差を返すこともできます。同定されたモデルのボード線図を参照してください。(同定されたモデルを使用するには System Identification Toolbox™ ソフトウェアが必要です。)

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

ライン スタイル、マーカー、色。1、2、または 3 文字の string または文字ベクトルとして指定します。文字が表示される順序は任意です。3 つの特性 (ライン スタイル、マーカーおよび色) をすべて指定する必要はありません。たとえば、ライン スタイルを省略してマーカーを指定した場合、プロットはラインなしでマーカーのみを表示します。この引数の設定の詳細については、関数 plot の入力引数 LineSpec を参照してください。

例: 'r--' は赤い破線を指定します。

例: '*b' は青いアスタリスク マーカーを指定します。

例: 'y' は黄色いラインを指定します。

周波数応答を計算およびプロットする周波数。cell 配列 {wmin,wmax} または周波数値のベクトルとして指定します。

  • w が形式 {wmin,wmax} の cell 配列の場合、関数は wmin から wmax の範囲の周波数で応答を計算します。

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

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

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

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

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

出力引数

すべて折りたたむ

システム応答の振幅 (絶対単位)。3 次元配列として返されます。この配列の次元は (システム出力数) × (システム入力数) × (周波数点数) です。

  • SISO システムの場合、mag(1,1,k)w または woutk 番目の周波数における応答の振幅を提供します。例については、振幅と位相のデータの取得を参照してください。

  • MIMO システムの場合、mag(i,j,k)j 番目の入力から i 番目の出力への k 番目の周波数における応答の振幅を提供します。例については、MIMO システムの振幅と位相を参照してください。

振幅を絶対単位からデシベルに変換するには、次を使用します。

magdb = 20*log10(mag)

システム応答の位相 (度単位)。3 次元配列として返されます。この配列の次元は (出力数) × (入力数) × (周波数点数) です。

  • SISO システムの場合、phase(1,1,k)w または woutk 番目の周波数で応答の位相を提供します。例については、振幅と位相のデータの取得を参照してください。

  • MIMO システムの場合、phase(i,j,k)j 番目の入力から i 番目の出力への k 番目の周波数における応答の位相を提供します。例については、MIMO システムの振幅と位相を参照してください。

関数がシステム応答を返す周波数。列ベクトルとして返されます。入力引数 w を使用して周波数を指定する場合を除き、関数はモデル ダイナミクスに基づいて周波数値を選択します。

wout には複素係数をもつモデルの負の周波数値も含まれます。

周波数値はラジアン/TimeUnit です。ここで、TimeUnitsysTimeUnit プロパティ値です。

各周波数点における応答の振幅の推定標準偏差。3 次元配列として返されます。sdmag の次元は mag と同じです。

sys同定された LTI モデルではない場合、sdmag[] になります。

各周波数点における応答の位相の推定標準偏差。3 次元配列として返されます。sdphase の次元は phase と同じです。

sys同定された LTI モデルではない場合、sdphase[] になります。

ヒント

  • 追加のプロット カスタマイズ オプションが必要な場合は、代わりに bodeplot を使用します。

アルゴリズム

bode は周波数応答を次のように計算します。

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

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

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

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

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

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

バージョン履歴

R2006a より前に導入