一次系のフィルタなら前回、前々回のようにサンプリング周波数とカットオフ周波数の比率を計算しておけば簡単にできるということでしたが、その前提として双一次変換を使いました。
今回は一般的手法と云うことで双一次変換を通常の伝達関数に適用して、s 領域から z 領域に変換してみます。といっても単に計算するだけです。
これは変数 s の多項式を変数 z に変換するだけなので、手計算では大変ですが scilab では簡単にやってくれます。
計算の流れとしては、変数 z の多項式を宣言し、次にサンプリング周波数の逆数のサンプリング周期を設定しておきます。
次に、伝達関数とそれに必要なパラメータを設定して、双一次変換すると云うことになります。
スクリプトは以下のようになります。
// デジタルフィルタの設計サポート
// 多項式の準備
z=poly(0,'z')
// サンプリング周期の設定
t=10d-6
// 双一次変換
s=2/t*(1-1/z)/(1+1/z)
// ラプラス領域での伝達関数 s*s/(s*s+a*s+b)
a=15000*1.2
b=158000000*1.2*1.2
G=s*s/(s*s+a*s+b)
disp(G)
sys=syslin(t,G);
scf(2);clf;bode(sys,1e-2,49000);
上記の伝達関数の場合は、結果は次のようになります。

今回は二次系のフィルタでしたが、多分 scilab の性能が許す限り次数が高くても、複雑でも大丈夫です。ただし変数は s と z のみなのでそれ以外の係数はあらかじめ数値を入れておく必要があると思います。
念押しですが、双一次変換はナイキスト周波数の近いところに極、零がある場合は精度が悪いようですのでその辺りも配慮しながら使って下さい。
再掲ですが、こちらも良く読んでおくことをお薦めます。
双一次変換
http://ja.wikipedia.org/wiki/%E5%8F%8C%E4%B8%80%E6%AC%A1%E5%A4%89%E6%8F%9B
今回は一般的手法と云うことで双一次変換を通常の伝達関数に適用して、s 領域から z 領域に変換してみます。といっても単に計算するだけです。
これは変数 s の多項式を変数 z に変換するだけなので、手計算では大変ですが scilab では簡単にやってくれます。
計算の流れとしては、変数 z の多項式を宣言し、次にサンプリング周波数の逆数のサンプリング周期を設定しておきます。
次に、伝達関数とそれに必要なパラメータを設定して、双一次変換すると云うことになります。
スクリプトは以下のようになります。
// デジタルフィルタの設計サポート
// 多項式の準備
z=poly(0,'z')
// サンプリング周期の設定
t=10d-6
// 双一次変換
s=2/t*(1-1/z)/(1+1/z)
// ラプラス領域での伝達関数 s*s/(s*s+a*s+b)
a=15000*1.2
b=158000000*1.2*1.2
G=s*s/(s*s+a*s+b)
disp(G)
sys=syslin(t,G);
scf(2);clf;bode(sys,1e-2,49000);
上記の伝達関数の場合は、結果は次のようになります。

今回は二次系のフィルタでしたが、多分 scilab の性能が許す限り次数が高くても、複雑でも大丈夫です。ただし変数は s と z のみなのでそれ以外の係数はあらかじめ数値を入れておく必要があると思います。
念押しですが、双一次変換はナイキスト周波数の近いところに極、零がある場合は精度が悪いようですのでその辺りも配慮しながら使って下さい。
再掲ですが、こちらも良く読んでおくことをお薦めます。
双一次変換
http://ja.wikipedia.org/wiki/%E5%8F%8C%E4%B8%80%E6%AC%A1%E5%A4%89%E6%8F%9B