「周波数応答」の版間の差分

 
(同じ利用者による、間の8版が非表示)
3行目: 3行目:
=== ゲインと位相 ===
=== ゲインと位相 ===


線形なシステムに正弦波入力を加えると,定常状態では出力も正弦波となる.出力の正弦波の周波数は入力と同じになるが,振幅の変化や位相差が発生する.
安定な線形なシステムに正弦波入力を加えると,定常状態では出力も正弦波となる.出力の正弦波の周波数は入力と同じになるが,振幅の変化や位相差が発生する.
入力の正弦波を<math>u(t)</math>,定常状態での出力を<math>y(t)</math>とし,それぞれ次式で表されるとする.
入力の正弦波を<math>u(t)</math>,定常状態での出力を<math>y(t)</math>とし,それぞれ次式で表されるとする.


64行目: 64行目:
=== 周波数応答関数 ===
=== 周波数応答関数 ===


システムのゲインと位相は,上記のように実際に正弦波信号を入力して調べなくても,システムの周波数応答関数(周波数伝達関数)から求めることができる.周波数応答関数とは,伝達関数のラプラス演算子<math>s</math>を<math>j \omega</math>に置き換えたものである.周波数応答関数は各周波数<math>\omega</math>を含んだ複素関数であり,その絶対値と偏角がそれぞれゲインと位相に対応する.
システムのゲインと位相は,上記のように実際に正弦波信号を入力して調べなくても,システムの周波数応答関数(周波数伝達関数)から求めることができる.周波数応答関数とは,伝達関数のラプラス演算子<math>s</math>を<math>j \omega</math>に置き換えたものである.周波数応答関数は角周波数<math>\omega</math>を含んだ複素関数であり,その絶対値と偏角がそれぞれゲインと位相に対応する.


<math>
<math>
201行目: 201行目:


MATLABのControl System Toolboxに含まれる<tt>bode</tt>関数を利用すると,簡単にボード線図を描画できる.リストsample2_4にスクリプト例を,図3に実行結果のグラフを示す.なお,この例では変数<tt>omega</tt>で周波数ベクトルを指定しているが,省略することもできる.その場合は<tt>bode</tt>関数が自動的に周波数範囲を設定して描画する.
MATLABのControl System Toolboxに含まれる<tt>bode</tt>関数を利用すると,簡単にボード線図を描画できる.リストsample2_4にスクリプト例を,図3に実行結果のグラフを示す.なお,この例では変数<tt>omega</tt>で周波数ベクトルを指定しているが,省略することもできる.その場合は<tt>bode</tt>関数が自動的に周波数範囲を設定して描画する.
[[ファイル:Bode_2_4.png|thumb|図3 <math>\displaystyle \frac{1}{s^2 + 0.5s+ 1}</math>のBode線図(<tt>bode</tt>関数利用)]]


sample2_4 <tt>bode</tt>関数を利用したボード線図の描画スクリプト
sample2_4 <tt>bode</tt>関数を利用したボード線図の描画スクリプト
214行目: 216行目:
  bode(sys, omega);
  bode(sys, omega);


[[ファイル:Bode_2_4.png|thumb|図3 <math>\displaystyle \frac{1}{s^2 + 0.5s+ 1}</math>のBode線図(<tt>bode</tt>関数利用)]]


リストsample2_4の例のように<tt>bode</tt>関数単体でグラフまで描画するが,ゲイン線図だけを描画したい時や,実験結果と重ねてグラフ化したい時などは,次のように,<tt>bode</tt>関数の左辺に変数をおくと,グラフ表示は行わず周波数応答の計算結果だけが得られる(ゲインは絶対値,位相は度の単位).
リストsample2_4の例のように<tt>bode</tt>関数単体でグラフまで描画するが,ゲイン線図だけを描画したい時や,実験結果と重ねてグラフ化したい時などは,次のように,<tt>bode</tt>関数の左辺に変数をおくと,グラフ表示は行わず周波数応答の計算結果だけが得られる(ゲインは絶対値,位相は度の単位).
224行目: 225行目:


なお,<tt>bode</tt>関数が多入出力に対応しているため,MATLABの場合左辺の変数<tt>gain</tt>と<tt>phase</tt>は3次元の行列として出力される(対象システム1入力1出力であっても).よって,<tt>plot</tt>関数で使用する前にこのスクリプト例のように<tt>squeeze</tt>関数で1次元ベクトルに変換する必要があるので注意する.
なお,<tt>bode</tt>関数が多入出力に対応しているため,MATLABの場合左辺の変数<tt>gain</tt>と<tt>phase</tt>は3次元の行列として出力される(対象システム1入力1出力であっても).よって,<tt>plot</tt>関数で使用する前にこのスクリプト例のように<tt>squeeze</tt>関数で1次元ベクトルに変換する必要があるので注意する.
[[ファイル:Bode_2_5.png|thumb|図4 <math>\displaystyle \frac{1}{s^2 + 0.5s+ 1}</math>のBode線図(<tt>bode</tt>関数利用,ゲイン線図のみ)]]


sample2_5 <tt>bode</tt>関数を利用したゲイン線図のスクリプト
sample2_5 <tt>bode</tt>関数を利用したゲイン線図のスクリプト
243行目: 246行目:
  ylabel('Gain (dB)');
  ylabel('Gain (dB)');
  grid( 'on');
  grid( 'on');
[[ファイル:Bode_2_5.png|thumb|図4 <math>\displaystyle \frac{1}{s^2 + 0.5s+ 1}</math>のBode線図(<tt>bode</tt>関数利用,ゲイン線図のみ)]]


=== 周波数応答(ベクトル軌跡)のプロット ===
=== 周波数応答(ベクトル軌跡)のプロット ===


ベクトル軌跡は周波数応答関数を<math>\omega = 0 \sim \infty</math>の範囲で複素平面上にそのままプロットしたものである.MATLAB(Octave)では複素数ベクトルを<tt>plot</tt>関数でプロットすると複素平面上で表されるので,それをそのまま利用できる.リストsample2_6がスクリプトの例であり,実行結果は図vector_loci_2_6である.なお,MATLAB(Octave)には<tt>nyquist</tt>関数が用意されており,それを利用してもベクトル軌跡を描くことができる.
ベクトル軌跡は周波数応答関数を<math>\omega = 0 \sim \infty</math>の範囲で複素平面上にそのままプロットしたものである.MATLAB(Octave)では複素数ベクトルを<tt>plot</tt>関数でプロットすると複素平面上で表されるので,それをそのまま利用できる.リストsample2_6がスクリプトの例であり,実行結果は図vector_loci_2_6である.なお,MATLAB(Octave)には<tt>nyquist</tt>関数が用意されており,それを利用してもベクトル軌跡を描くことができる.
[[ファイル:vector_loci_2_6.png|thumb|図5 <math>\displaystyle \frac{1}{s^2 + 0.5s+ 1}</math>のベクトル軌跡]]


sample2_6 二次遅れ系のベクトル軌跡を描くスクリプト
sample2_6 二次遅れ系のベクトル軌跡を描くスクリプト
264行目: 267行目:
  axis equal; %グラフの縦横比を1:1に指定
  axis equal; %グラフの縦横比を1:1に指定
  grid('on');
  grid('on');
[[ファイル:vector_loci_2_6.png|thumb|図5 <math>\displaystyle \frac{1}{s^2 + 0.5s+ 1}</math>のベクトル軌跡]]


== 応用編 ==
== 応用編 ==
283行目: 283行目:
</math>
</math>


よって,むだ時間要素のボード線図を描くスクリプト例はリストsample2_7となる.実行結果は図Bode_2_7である.
よって,むだ時間要素のボード線図を描くスクリプト例はリストsample2_7となる.実行結果は図6である.
ここで,関数<tt>ones</tt>は指定したサイズで要素がすべて1の行列を生成する関数であり,関数<tt>size</tt>で周波数ベクトルの大きさを取り出して利用している.
ここで,関数<tt>ones</tt>は指定したサイズで要素がすべて1の行列を生成する関数であり,関数<tt>size</tt>で周波数ベクトルの大きさを取り出して利用している.
[[ファイル:Bode_2_7.png|thumb|図6 むだ時間要素のボード線図(<math>L=1</math>)]]


sample2_7 むだ時間要素のボード線図を描くスクリプト
sample2_7 むだ時間要素のボード線図を描くスクリプト
310行目: 314行目:
  ylabel('Phase (deg)');
  ylabel('Phase (deg)');
  grid('on');
  grid('on');
Bode_2_7.pdf
むだ時間要素のボード線図(<math>L=1</math>)


=== 実験結果との重ね合わせの例 ===
=== 実験結果との重ね合わせの例 ===
321行目: 319行目:
実験科目や卒業研究などで,実験装置での実測結果と理論式から求めた理論曲線を比較する場面がよく出てくる.リストsample2_8は実験で求めた周波数応答と理論曲線を重ねて描くスクリプトの例である.
実験科目や卒業研究などで,実験装置での実測結果と理論式から求めた理論曲線を比較する場面がよく出てくる.リストsample2_8は実験で求めた周波数応答と理論曲線を重ねて描くスクリプトの例である.


実験による測定結果の周波数,ゲイン,位相をそれぞれ<tt>omega_e</tt>, <tt>gaindB_e</tt>, <tt>phase_e</tt>という変数に代入しておき,理論曲線と重ねている.この際,実験データの方はマーカーで示すべきであるので,<tt>semilog</tt>関数内で線類を指定している.また,関数<tt>legend</tt>でグラフに凡例を付け加えることができる.実行結果を図Bode_2_8に示す.
実験による測定結果の周波数,ゲイン,位相をそれぞれ<tt>omega_e</tt>, <tt>gaindB_e</tt>, <tt>phase_e</tt>という変数に代入しておき,理論曲線と重ねている.この際,実験データの方はマーカーで示すべきであるので,<tt>semilog</tt>関数内で線類を指定している.また,関数<tt>legend</tt>でグラフに凡例を付け加えることができる.実行結果を図7に示す.
 
[[ファイル:Bode_2_8.png|thumb|図7 実験結果と理論曲線を重ねる例]]




356行目: 356行目:
  grid('on');
  grid('on');
  legend('Theoretical', 'Experimental');
  legend('Theoretical', 'Experimental');
Bode_2_8.pdf
実験結果と理論曲線を重ねる例