next up previous
Next: Code Composer Studioを用いた実行可能プログラムの作成 Up: 実験手順 Previous: 雑音周波数の測定

FIRフィルタの設計

フィルタの設計にはScilabを用いる。

Scilabを起動するには,

スタート→プログラム(P)
→Scilab 2.6 → Scilab2.6
を選択する(図8)。
図 8: Scilabの起動
\includegraphics[scale=.7]{eps/Scilab010.eps}

フィルタの設計にあたって, 諸君のフロッピーディスクのフォルダ fir にあるサンプルスクリプト design.sci を利用する。実験ではこのファイルを修正する必要があるのだが, 実際に修正作業をおこなう前に, まずこのスクリプトを実行してみることにする。

このためには, Scilabのウィンドウ内で

exec('a:\fir\design.sci');
と入力する(図9)。
図 9: design.sciの実行
\includegraphics[scale=.7]{eps/Scilab020.eps}
すると, フィルタの設計が実行され。 画面に設計されたフィルタの周波数応答が表示された後に, 設計されたフィルタのタップ係数が フロッピーディスクのフォルダ fir に tap.txtという名前で書き出される。

なお, フロッピーディスク上にすでに同名のファイルがある場合には, そのファイルは強制的に削除される。 古い tap.txt を保存しておく必要があるときにはあらかじめ 名前を変更しておくこと。

ファイル design.sci の簡単な説明を 図10に示す。

図 10: FIRフィルタ設計プログラム(design.sci)の説明
\includegraphics[width=.5\textwidth]{eps/scilab-design.eps}

続いて, design.sciを修正して, 各自に配布されたテープに含まれる 雑音が消えるようにする。design.sciを開くには,

A:\fir\design.sci
をダブルクリックすればよい(図11)。
図 11: design.sciをエディタで開く
\includegraphics[scale=.7]{eps/Scilab050.eps}
ファイルをどのように修正すれば良いかについては, 後で述べる。

ファイルの修正が終わったら必ずウインドウ上部のメニューから

ファイル→上書き保存(S)
を実行して変更後の内容を保存しておくこと。

ファイルの保存に成功したら, 再びdesign.sciを実行する。 画面に表示されたフィルタの性能が満足すべきものだったら 次に進む。性能に問題があると思われる場合は前に戻る。

ここで, ファイル design.sci のどこを変更する必要があるかについて説明しておく。

変更を要するのは最初の行のみである。 この行では関数 eqfir を使って帯域阻止フィルタを設計しているのだが, この関数の第1引数, 第2引数, 第4引数を設計したいフィルタの特性に 対応したものに書き換えなければならない。

関数 eqfir の引数の意味と注意事項について以下で説明する。

第1引数
フィルタの次数を指定する部分である。 この数値は整数でなければならない。 一般に, フィルタの次数が高いほど理論的にはフィルタは高性能になる。 しかし, 実際には, 次数を高くしすぎると, 計算の遅延時間が長くなる, メモリを大量に消費する, 桁溢れや桁落ちの影響を受けやすくなる, といった問題が生じる。一方, 次数が低すぎる場合には, フィルタの設計上の性能がかなり低くなってしまう。 一般的に言えば, フィルタの性能が同等であるならば, 次数は低ければ低いほどよい。各自でどの程度の次数が 適切であるか試してみること。なお, フィルタの次数が 偶数と奇数の場合で挙動が大幅に異なることを注意しておく。
第2引数
フィルタの形状を指定する部分である。 この部分では, Scilabの行列の記法を使って, どの周波数帯でフィルタの性能を指定するかを決める。

周波数帯を指定する際には, 周波数軸をいくつかの たがいに重ならない領域に区切り, 各行の成分がこれらの領域の左端および右端の周波数 になっている2列の行列を作成する。この実験で作成 したいフィルタは帯域阻止フィルタで, 性能を指定 したい領域は

の3個である。よって, 第2引数は3行2列の行列になる。

実験課題を達成するためには, 第2引数の行列の内容を 諸君が取り扱わなければならない帯域阻止フィルタに 対応したものに書き換える必要がある。

なお, 周波数軸は正規化されていて, 設計上の周波数1が実際のフィルタにおける サンプリング周波数(この実験では8kHz)に対応する。 また, ディジタルフィルタの周波数特性は ナイキスト周波数(サンプリング周波数の半分)を境にして 対称になるので, フィルタを設計する際に周波数として 0.5より大きい値を指定しても意味がない。

また, FIRフィルタは急峻な特性を持つフィルタを設計 するには不向きであるので, 指定する領域や 特性を指定している領域にはさまれた「遷移領域」の幅 が狭すぎると設計がうまくいかないことがある。

第3引数
第2引数において指定した領域において 信号を通過させるか遮断するかを指定する。値1を指定すると 信号通過, 値0を指定すると信号遮断を指定したことになる。 この部分は変更しなくてよい。

第4引数
この部分は「重み」と呼ばれるもので, 第2引数で指定した各領域がどのくらい重要であるかを 指定する部分である。この部分に指定される数値は整数である。 大きい重みが与えられたは理想的な値に近い特性を持つように なるが, その場合, 小さい重みが与えられた領域の性能が犠牲になる。

10の第1行目で どのようなフィルタの特性が指定されているか を図12に示す.

図 12: 関数 eqfir におけるフィルタの特性の指定
\includegraphics[width=.7\textwidth]{eps/eqfir.eps}

希望する特性を持つフィルタが得られるまで, 何度でも design.sci を変更してScilabで実行すること。 なお, design.sci を実行すると以前作成した tap.txt は 消えてしまうので, 必要な場合は各自で名前を変えて保存しておくこと。

なお, ファイルの編集には, Mule, メモ帳など,どのようなエディタを使ってもよい。

なお, Scilab のグラフィックスウィンドウに描画されたグラフを印刷するには, グラフィックスウィンドウ上部の File メニューから Print を選択すること。 ここには Print(Scilab) と Print(Windows) の2種類の印刷用メニューがある。 どちらを使ってもよい。また, グラフをファイルに保存しておくには, File メニューから Export を選択する。


next up previous
Next: Code Composer Studioを用いた実行可能プログラムの作成 Up: 実験手順 Previous: 雑音周波数の測定
Shigeru HANBA
平成15年11月16日