
Scilabの「信号処理のデモ」調査中。前回はIIRフィルタのデモ、今回はFIRフィルタです。何気にデモのソースコードを表示する機能があることに気づきました。前回のデモには含まれていなかったような気がするんだが。いつからあったの?先に言ってよ。それにつけてもお惚け老人はソースを読まないとデモの意図が分からんデス。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
今回動かしてみるデモ
以下のScilabデモ選択ウインドウから、今回は、黄色のマーカ引いてある「ミニマックスFIRフィルタ設計」と、選択の青反転になっている「ウインドウFIRフィルタ」の2つを試用してみます。
そうはいわれても、タイトルだけでは、信号処理素人老人にはナンジャラホイです。起動して瞬間的にグラフが表示される前に、これから何をデモするつもりなのかその意図を知りたいっす。かなわぬ希望か。
そこでいつもお世話になっておりますGoogle様の
Gemini 2.0 Flash Thinking(experimental)
にお伺いをたて、該当しそうな部分にマーカを引いてみましたぞ。
メニューの青反転の方が「黄色のマーカ」、メニューの黄色のマーカの方が「緑のマーカ」です。色が拗れていて分かりずらいな、自分。
窓関数法のデモから
まずはチョロい(わかりやすい)窓関数法の方からデモをジックしてみます。起動直後に現れるのは以下のようなLPF(ローパス・フィルタです。)
上記のグラフのメニューバーに黄のマーカつけた「– コードを表示 –」という普段にないメニューが追加されていることに気づきます。ここをクリックするとほれこのように。
Scilab内蔵のテキストエディタ、SciNotesを使ってデモのソースを読むことができます。その実体は、demo_viewCode()という関数です。
今回のデモの場合、グラフを表示するとそこにメニューを出してくれるので便利ですが、前回のようなデモではdemo_viewCode()関数が含まれていなかったりもするので、当たるも八卦? 違うか?
なお、今回のデモは、フィルタ設計関数的にいうと
wfir 線形位相FIRフィルタ設計関数
を使っています。
例によって、Enterキーを入力すると次のグラフに進みます。
信号処理素人老人の目からみても、全然ローパスフィルタに見えない特性をローパスフィルタと言い張ったグラフが出現。実際にはバンドストップフィルタです。ソースみると、元の英文のタイトルがコピペ?した後直されてないみたいでした。ときどきあるのよね。。。
もうイッチョ、お次のグラフ。今度はバンドパスです。タイトルも正しいみたい。よかった。
という感じで、ソース
winfilt.dem.sce
を読めば、wfir関数の使い方がわかると。
ミニマックス近似のデモ
さて、もう一つのデモ
remezfilt.dem.sce
は、remezアルゴリズム使ったミニマックス近似フィルタのデモらしいです。素人老人がグダグダ説明するのも何なので、Gemini様にミニマックス近似の意義について語っていただきます。
ここで登場するのが、Remezアルゴリズムっす。
なお設計関数的には、
-
- eqfir関数(ミニマックス近似使う)を使って、ローパスフィルタを設計
- remezb関数(その名のとおりRemezアルゴリズムらしい)を使って、「三角」特性のフィルタを設計
- 2の結果の誤差をグラフ化
という3段階のデモです。
お次は、remezb関数使った「三角特性」の例。なんで三角なのかの意図は不明。ことさらに人為的な特性でも作れる、というところのアピールなのか?素人老人には分からんよ。
分かったような、分からぬような。