前回はFIRフィルタ「直接形」ということでその結果にちょっと感動。今回は同じことを「転置形」でやれ、との思し召しです。いくら感動の結果でも同じ筈。「カッタリ~」などと不埒な事を言っていては修行になりませんぞ(手習ひか。)前回のプログラムを書きなおし、F446に書き込んで実験いたしました。まあ、結果は変わらんケド。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
冒頭に毎度のお知らせですが、勝手に手習ひさせていただいとります「教科書」へのリンクを掲げます。
三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理』
ネタバレにならぬようソース等の引用等は行いませんが、それらはArm社のMbed環境上で公開されています。
今回は転置形
今回は、前回とまったく同じ目標特性のフィルタを転置型で実装する回であります。フィルタの係数テーブルなどは前回とまったく同じものです。ただ、計算の順番が違うっと。転置型のブロックダイアグラムを冒頭のアイキャッチ画像に掲げました。前回のものと比べると「順番が逆転、交換」されとることが良くわかります。まあ、私の頭では前回の直接形の順番は腑に落ちた気がするのですが、「転置」されるとたちまち感覚的な不安を覚えます。認知症か?
プログラムをビルド
今回はArm社のMbedのWeb環境上で、前回の直接形のプログラムのプロジェクトをコピーして、ソースを修正する形で「手習ひ」いたしました。
三上先生の御ソースとは表記の仕方が微妙に違う(例えば、if文の後に1文であれば、{}で括らずに書くことができます。三上先生はこの簡潔なスタイル。しかし筆者は、昔居た会社で1文でもかならず{}で括れ(そうしないと「レビュー」が通らないしくみだった)というトラウマがあり、未だに{}で括らないとドキドキします。なんだかな~。ちなみに再帰的に書くのも禁止されていたのです。理由は確か「分かり難いから」だったような。RAM容量の限られたマイコン用に再帰しようとは思わないですが、パソコン上の「やっつけ」プログラムなど再帰しないで書くのはとても面倒な時があるっす。再帰の方が簡潔で明快な(速いとは限らないですが)ところは普通に頭山的に飛び込みまして今日にいたります。
なお、ビルドの結果みると、こんな小さなサンプルプログラムであれば、直接形でも転置型でも差は見えませぬなあ。
実行結果
例によってまずは時間領域での波形ですが、今回は以下の3周波数で波形をとりましてございまする。
- 800Hz、通過域
- 1kHz、通過域の上限900Hzと阻止域の下限1.1kHzの中間
- 1.2kHz、阻止域
800Hz
通過しとります。
振幅ほぼ半分に減衰。
1.2kHz
阻止されました!
期待どおりの時間波形が得られたところで、
振幅特性
前回と同じですな。同じと分かっていても、順序を変えて計算して、同じ結果だと確かめることに意義がある。きっと。ホントか?