bode関数では、複素周波数応答から位相の値を計算する際に数値的に計算されているため、得られた位相が期待値と360°の整数倍ずれて表示される場合があります。
位相の値を0°近傍からプロットするには、以下の2通りの方法があります。
1. ltiviewerのプロパティエディタから設定する方法
2. コマンドから設定する方法
1. ltiviewerのプロパティエディタから設定する方法
(R14SP2以降のバージョンにて)bode関数やltiview関数を用いてボード線図を描いた後に設定できます。
bode関数によって描かれたボード線図のAxes上でダブルクリックし、立ち上がったプロパティエディタのオプションタブにある'位相のオフセットの調整'にチェックを入れ、'近くに位相を保持'を0に設定します(下図参照)。
位相オフセットの調整
上記にて設定を変更すると、下図の通り、位相の値が0°近傍でプロットされたボード線図が得られます。
変更後のボード線図
2. コマンドから設定する方法
下記コマンドを実行することで、1と同等の設定に変更できます。
ここでは、ボード線図を描くコマンドとして、bodeplot関数を用います。
sys = tf([-1 10],[0.1 1]);
p = bodeoptions;
p.PhaseMatching = 'on';
p.PhaseMatchingValue = 0;
bodeplot(sys,p)
【補足】
上記で得られたグラフのデータを取得するには、下記コマンドのように、bode関数で位相・振幅を出力した後に、位相値が0°になるよう、360°の整数倍を引きます。
また、R14SP1以前バージョンでは、本FAQで紹介した位相のオフセットオプションがないため、データを出力して位相値について360°の整数倍を引いた値をプロットする必要があります。
sys = tf([-1 10],[0.1 1]);
[mag,phase,w] = bode(sys);
mag = squeeze(mag);
phase = squeeze(phase);
w = squeeze(w);
magdb = 20 .*log10(mag);
phase = phase - 360;
subplot(2,1,1)
semilogx(w, magdb)
subplot(2,1,2)
semilogx(w, phase)