SSブログ

scilabで遊ぼう (4) [プログラム三昧]このエントリーを含むはてなブックマーク#

WS000199.png

今回は、いよいよフィルタを作ってみます。

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は、表示する周波数の下限と上限です。 このコマンドで、ボード線図が表示されます。

WS000207.png

カットオフ周波数(Magnitudeが-3dBになり、Phaseが-45°になる周波数)は、確かに1Hzになっています。

scilabで、ステップ応答をみる

出来上がったフィルタを使って、ステップ応答をみます。 ステップ応答のシミュレーションには、"csim"を使うと簡単です。

-->t=[0:0.02:2];
 
-->y=csim('step',t,sys);
 
-->scf(1);clf;plot(t,y);
WS000208.png

scilabで、正弦波応答をみる

つぎは、正弦波に対する応答をみます。 ここでも、"csim"を使います。

-->x=sin(2*%pi*t);
 
-->y=csim(x,t,sys);
 
-->scf(1);clf;plot(t,x,t,y);

入力に1Hzの正弦波を入れると、振幅は約0.7倍になります。

WS000209.png

続いて、2Hzの正弦波を入れると、振幅は約0.5倍になります。 まさにローパス・フィルタです。

WS000210.png

グラフにグリッドを表示したい

デフォルトの状態のグラフには、グリッドが表示されません。 これは、表示されていないのではなく背景と同じ色に設定されているので見えないということのようです。 グリッドを表示するためには、グリッドの色を変更します。

-->ax1=gca();ax1.grid=[33,33];

"gca"関数で、現在の図面の軸のコンテキストを獲得します。 そして、コンテキストに対して、x軸とy軸のそれぞれのグリッドの色を指定します。 "33"は、ボード線図のグリッドでも使用されている灰色です。

WS000211.png

これで、振幅を確認しやすくなりました。

付録 : 「scilab で遊ぼう」索引


nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。