前回までで、Scilab上で使用できるFIR、IIRフィルタの設計関数を一通り「なでた」感じがします。そこで今回からは求めた係数を使って実際に時間波形にフィルタを適用するfilter関数をと考えました。しかし、フィルタ関数のブロックダイアグラムを考えたら引っかかりました。今回は「ブロックダイアグラム祭り」だあ。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上で、Scilab6.1.1およびScilab上のツールボックス Scilab Communication Toolbox 0.3.1(以下comm_tbx)を使用させていただいとります。
filter関数
filter関数は、フィルタの設計関数で求めた係数ベクトルを実際に入力データ列に適用し、出力データ列を得るための関数です。ヘルプページが以下に。
上記ページの「説明」を引用させていただきます。
この関数は”直接型 II 転置”実装によるデジタルフィルタを用いて データ系列をフィルタ処理します.
ううむ、「直接形Ⅱ転置」てどんなもんだったけ? 忘却力の年寄は式を見ても、読んだ端から忘れてしまうので絵になっている方が分かった気になるな(気分だけだけれども。)
デジタルフィルタのブロックダイアグラム
そういえば過去回にて、散々、ブロックダイアグラムを描いた気がしないでもないです。以下はすべて三上直樹先生の教科書を勉強させていただいていたころのものであります。
1はFIRフィルタの直接形、2はFIRフィルタの転置形、3はIIRフィルタの直接形Ⅱ、4はIIRフィルタの直接形Ⅱをカスケード接続した継続形であります。こうしてみると「直接形Ⅱ」の「転置」ってないな~。
そこで今回は忘却力に抗うべく、過去回で描いたブロックダイアグラム(ほぼほぼ元図は三上先生)をおさらいした上で、信号処理素人がIIRフィルタの「直接形Ⅱ」の「転置」のブロックダイアグラムまで描いてみたいと思います。大丈夫か?
なお以下のブロックダイアグラムでは入力信号をx[n]、出力信号をy[n]、伝達係数の分母の方の係数ベクトルがa1、a2、… で分子の方が b0、b1、…という表記です。場合によっては a b がひっくり返った表記を採用されていることもあるかと思います。
FIRフィルタ、直接形と転置形
転置形では「係数倍の三角」と「遅延の四角」の「前後と順序」が入れ替わったことが分かります。でもこれだけだと御利益の実感がわかないよな?
IIRフィルタ直接形Ⅰ
IIRフィルタ直接形Ⅱ
上記の前後をひっくり返した「ついでに」、遅延素子の四角を「シェア」してしまった形っす。
遅延(記憶)素子の数が半分になっとるがな。これは御利益あらたかか。
IIRフィルタ直接形Ⅱの転置
さて、上記の構成をさらに転置したブロックダイアグラムが以下に。信号処理素人の老人が描いたもの(あてにならんです。)
さらに三角と四角の適用順序を逆転したことで丸に+の字の加算器の数もほぼほぼ半減できた(ただし3入力になっとるけど。)
そういえば、上の図で分母の方の係数ベクタ aを皆0にしてしまえば、FIRフィルタの転置形と同じじゃな。ということはIIRでもFIRでもこの同じ形で処理できると。ホントか?
IIRフィルタ直接形Ⅱの継続
いやあ、こうして並べてみれば、分かったような、分からぬような。図を見ただけでなく、しみじみ自分で計算してみないと納得いかんな。