手習ひデジタル信号処理(178) Scilab、{Scilabデモ}、FIRフィルタ

Joseph Halfmoon

Scilabの「信号処理のデモ」調査中。前回はIIRフィルタのデモ、今回はFIRフィルタです。何気にデモのソースコードを表示する機能があることに気づきました。前回のデモには含まれていなかったような気がするんだが。いつからあったの?先に言ってよ。それにつけてもお惚け老人はソースを読まないとデモの意図が分からんデス。

※「手習ひデジタル信号処理」投稿順 Indexはこちら

※Windows11上の    Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)

今回動かしてみるデモ

以下のScilabデモ選択ウインドウから、今回は、黄色のマーカ引いてある「ミニマックスFIRフィルタ設計」と、選択の青反転になっている「ウインドウFIRフィルタ」の2つを試用してみます。selectFIR

そうはいわれても、タイトルだけでは、信号処理素人老人にはナンジャラホイです。起動して瞬間的にグラフが表示される前に、これから何をデモするつもりなのかその意図を知りたいっす。かなわぬ希望か。

そこでいつもお世話になっておりますGoogle様の

Gemini 2.0 Flash Thinking(experimental)

にお伺いをたて、該当しそうな部分にマーカを引いてみましたぞ。geminiFIR

 

メニューの青反転の方が「黄色のマーカ」、メニューの黄色のマーカの方が「緑のマーカ」です。色が拗れていて分かりずらいな、自分。

窓関数法のデモから

まずはチョロい(わかりやすい)窓関数法の方からデモをジックしてみます。起動直後に現れるのは以下のようなLPF(ローパス・フィルタです。)winLPF

上記のグラフのメニューバーに黄のマーカつけた「– コードを表示 –」という普段にないメニューが追加されていることに気づきます。ここをクリックするとほれこのように。viewCode

Scilab内蔵のテキストエディタ、SciNotesを使ってデモのソースを読むことができます。その実体は、demo_viewCode()という関数です。

今回のデモの場合、グラフを表示するとそこにメニューを出してくれるので便利ですが、前回のようなデモではdemo_viewCode()関数が含まれていなかったりもするので、当たるも八卦? 違うか?

なお、今回のデモは、フィルタ設計関数的にいうと

wfir 線形位相FIRフィルタ設計関数

を使っています。

例によって、Enterキーを入力すると次のグラフに進みます。winBSF

信号処理素人老人の目からみても、全然ローパスフィルタに見えない特性をローパスフィルタと言い張ったグラフが出現。実際にはバンドストップフィルタです。ソースみると、元の英文のタイトルがコピペ?した後直されてないみたいでした。ときどきあるのよね。。。

もうイッチョ、お次のグラフ。今度はバンドパスです。タイトルも正しいみたい。よかった。winBPF

という感じで、ソース

winfilt.dem.sce

を読めば、wfir関数の使い方がわかると。

ミニマックス近似のデモ

さて、もう一つのデモ

remezfilt.dem.sce

は、remezアルゴリズム使ったミニマックス近似フィルタのデモらしいです。素人老人がグダグダ説明するのも何なので、Gemini様にミニマックス近似の意義について語っていただきます。geminiMINMAX

ここで登場するのが、Remezアルゴリズムっす。

なお設計関数的には、

    1. eqfir関数(ミニマックス近似使う)を使って、ローパスフィルタを設計
    2. remezb関数(その名のとおりRemezアルゴリズムらしい)を使って、「三角」特性のフィルタを設計
    3. 2の結果の誤差をグラフ化

という3段階のデモです。

まず、eqfir関数使ったLPFの例minmaxFIR

お次は、remezb関数使った「三角特性」の例。なんで三角なのかの意図は不明。ことさらに人為的な特性でも作れる、というところのアピールなのか?素人老人には分からんよ。remezTriangle

そして上記の「三角フィルタ」の誤差のグラフが以下に。remezTriangle2

分かったような、分からぬような。

手習ひデジタル信号処理(177) Scilab、{Scilabデモ}、IIRフィルタ へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です