
前回に続き、Scilabの「信号処理関係のデモ」を調べてます。今回はIIRフィルタのデモです。日本語でタイトル表示されるデモを調べていて、前回老人の誤った想像(妄想?)を書いていたことに気づきました。Scilab、英語メッセージをロケール言語に翻訳して表示する機能が含まれていたのね。今の今まで知らんかったよ。お間抜け。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
Scilabのgettextの仕組み
前回、信号処理関係のデモのソースファイルは手元のScilabバージョンでは以下のフォルダに配置されていると書きました。
Scilabのインストールパス\modules\signal_processing\demos
ただし、ファイルの中を見てみるとグラフのタイトル文字列などは英文です。しかしデモから実行すると日本語表示されます。どこか別のところに真のソースがあるの?と前回想像してましたが、これは間違いでした。
Scilabはロケールに合わせたメッセージに自動で「差し替え」てくれる仕組みをもってました。gettext()という関数にメッセージ文字列を与えると、デフォルトのロケールの言語のメッセージ文に変換してくれるのであります。勿論、対応関係が事前に定義されている文字列についてだけですが。そして、gettext()という関数を簡単に書くための
_()
という記法も準備されてました。これを使うと以下のように英文の”Choose filter type and parameters”というメッセージが、日本語の”フィルタの型とパラメータを選択”という文字列に差し替えられます。
なお、getlanguage()関数を使うと、現在設定されている言語のお名前が返されます。
なお、手元の処理系では、日本語の場合は以下のバイナリファイルに文字列が格納されてました。
Scilabのインストールパス\locale\ja_JP\LC_MESSAGES\scilab.mo
IIRフィルタデモ
信号処理のデモメニューを開くと、IIRフィルタに関するデモが矢印のように2個あることが分かります。
-
- IIRフィルタ設計
- 離散IIRフィルタ
上記のデモファイル・フォルダのソースを見てみると以下のようでした。
-
- iir.dem.sce、GUI使ってパラメータを入力してもらって、IIRフィルタを作る
- iirfilt.dem.sce、決め打ちのパラメータでLPFとBPFを作る
どちらも結局 iir() 関数を使って、離散的なIIRフィルタを設計し、その周波数特性(正規化された)をプロットする「デモ」でした。なお、ScilabはIIRフィルタの設計関数を複数備えており、それらについて以下の過去回にてまとめてます。
手習ひデジタル信号処理(123) Scilab、IIRフィルタの設計関数、おさらい
「1.IIRフィルタ設計」デモ
第1のデモを実行すると以下のようなパラメータ設定ウインドウが現れます。
上記に入力済である値に変更を加えずにOKすると、以下のような特性のバンドパスフィルタが現れます。
なお、パラメータ設定ウインドウのデフォルト値として入力されている値は、helpファイルのiir関数のところに載っている例の値と同じです。コマケー話なんだが。
「2.離散IIRフィルタ」デモ
第2のデモを実行すると即座に以下のような正規化された周波数特性のグラフが登場します。見ての通りのLPFです。
コンソールを見ると以下のように、何かボタン押せ、と促されてます。
表示されているタイトルこそ違え、再びhelpファイルのiir関数のところに載っている例と同じじゃん。 なおこちらのデモの関数ソースを読んでいると、function demo_irrfilter()という御名前で、irr という綴りに釈然としないものを感じるのですが、まあコマケー話だよ。