scilabで遊ぼう (4) [プログラム三昧]
今回は、いよいよフィルタを作ってみます。
scilabは、sの関数でフィルタを記述する
最初は、アナログのローパス・フィルタをつくってみます。 アナログ・フィルタは、sの関数で記述します。 まず、変数sを定義します。
-->s=poly(0,'s');
次は、カットオフ周波数を指定します。 本来は、「ω0」としたいところですが、「w0」で代用しています。
-->w0=2*%pi;
最後は、フィルタの定義です。 変数sを使った式を書くとフィルタが出来上がります。 'c'は、「連続時間」のフィルタであることを示しています。
-->sys=syslin('c',1/(1+s/w0)) sys = 1 ------------- 1 + 0.1591549s
このフィルタの周波数特性をグラフ化するには、"bode"関数を使います。
-->scf(1);clf;bode(sys,1e-2,1e2);
1e-2と1e2は、表示する周波数の下限と上限です。 このコマンドで、ボード線図が表示されます。
カットオフ周波数(Magnitudeが-3dBになり、Phaseが-45°になる周波数)は、確かに1Hzになっています。
scilabで、ステップ応答をみる
出来上がったフィルタを使って、ステップ応答をみます。 ステップ応答のシミュレーションには、"csim"を使うと簡単です。
-->t=[0:0.02:2]; -->y=csim('step',t,sys); -->scf(1);clf;plot(t,y);
scilabで、正弦波応答をみる
つぎは、正弦波に対する応答をみます。 ここでも、"csim"を使います。
-->x=sin(2*%pi*t); -->y=csim(x,t,sys); -->scf(1);clf;plot(t,x,t,y);
入力に1Hzの正弦波を入れると、振幅は約0.7倍になります。
続いて、2Hzの正弦波を入れると、振幅は約0.5倍になります。 まさにローパス・フィルタです。
グラフにグリッドを表示したい
デフォルトの状態のグラフには、グリッドが表示されません。 これは、表示されていないのではなく背景と同じ色に設定されているので見えないということのようです。 グリッドを表示するためには、グリッドの色を変更します。
-->ax1=gca();ax1.grid=[33,33];
"gca"関数で、現在の図面の軸のコンテキストを獲得します。 そして、コンテキストに対して、x軸とy軸のそれぞれのグリッドの色を指定します。 "33"は、ボード線図のグリッドでも使用されている灰色です。
これで、振幅を確認しやすくなりました。
付録 : 「scilab で遊ぼう」索引
- scilabで遊ぼう (1)
- scilabで遊ぼう (2)
- scilabで遊ぼう (3)
- scilabで遊ぼう (4)
- scilabで遊ぼう (5)
- scilabで遊ぼう (6)
- scilabで遊ぼう (7)
- scilabで遊ぼう (8)
- scilabで遊ぼう (9)
- scilabで遊ぼう (10)
- scilabで遊ぼう (11)
- scilabで遊ぼう (12)
- scilabで遊ぼう (13)
コメント 0