dsPIC33FJ64GP802 (14) --- 無償で使えるフィルタ設計アプリケーション (1)

 libdsp の IIR フィルタ関数では、フィルタ係数の生成には「dsPIC FD」(dsPIC Filter Designer) を使用することが前提になっています。
 dsPIC FD にはフル機能版と機能限定の廉価版 (dsPIC FD Lite) がありますが、両者ともに「有償」で「無償版」はありません。
 それ以上に問題なのは、現在 dsPIC FD は Microchip では取り扱われていないようで、他の代替手段を考えなければなりません。
 現在、「無償」で使えるディジタル・フィルタ設計アプリケーションとして、おもに次のようなものがあります。

(1) Web 版 DF-Design — (石川高専 山田洋士 研究室ホームページ)

(2) PSoC Creator の「Filter」コンポーネント

(3) GNU Octave / Scilab のフィルタ設計関数各種

(4) DSPLinks Web Edition のフィルタ設計関数各種 — (DIGITALFILTER.COM)

(5) ディジタルフィルタ設計ツール「Filter」— (TECHNO CREATE)

(6) ディジタル・フィルタ設計プログラム (IIR_Design、FIR_Remez、FIR_Kaiser) — (三上直樹著・CQ 出版「はじめて学ぶディジタル・フィルタと高速フーリエ変換」のサポート・プログラム)

 このなかで、(1) 以外はホスト PC 上のアプリケーション・プログラムであり、(1) だけは web サービスとして実現されています。 (4) は「Web Edition」と名前が付いていますが、「無償版」の意味で、アプリケーション自体はローカルのホストPC 上で実行します。
 (1) は FIR (窓関数法/等リブル近似、通常フィルタ/微分器/ヒルベルト変換器)、IIR (バタワース/チェビシェフ/楕円特性、LPF/HPF/BPF/BEF) に対応しています。
 (2) は FIR (窓関数法、通常フィルタ/ヒルベルト変換器/逆 sinc^4 特性フィルタ)、IIR (バタワース/チェビシェフ特性、LPF/HPF/BPF/BEF) に対応しています。
 (3) は FIR (窓関数法、等リブル近似)、IIR (バタワース/チェビシェフ/逆チェビシェフ/楕円特性、LPF/HPF/BPF/BEF) に対応しています。
 (4) は FIR (窓関数法、等リブル近似)、IIR (バタワース/チェビシェフ/逆チェビシェフ特性、LPF/HPF/BPF/BRF) に対応しています。
 (5) は FIR のみですが、普通の直線位相特性以外に、最小位相推移型のフィルタの設計もできます。 
 (6) は次の 3 つのプログラムから構成されていて、

  • FIR_Kaiser — (Kaiser 窓関数法による FIR フィルタ設計)
  • FIR_Remez — (Parks-McClellan 法による等リプル近似 FIR フィルタ設計、通常フィルタ/微分器/ヒルベルト変換器)
  • IIR_Design — (バタワース/チェビシェフ/逆チェビシェフ/楕円特性、LPF/HPF/BPF/BEF)

に対応しています。
 アナログ・フィルタ、ディジタル・フィルタの「フィルタ設計」プロセスは、次の 2 段階で構成されています。

  • 近似
  • 合成/実現

 まず、最初の段階の「近似」では、与えられたフィルタの要求仕様を、より少ない次数でより良く近似する伝達関数を求めることを目的としています。
 この段階では、その伝達関数がどのように実現されるのかということには左右されません。
 ラフに表現すれば、近似プロセスの「目的」は、有理関数である伝達関数の各係数値を求めることと言えます。
 「合成/実現」プロセスでは、近似プロセスで求まった (高次の) 伝達関数を、アナログ・フィルタでは実在の RLC 回路あるいは OP アンプを使用した回路で、ディジタル・フィルタでは遅延要素 / 乗算器 / 加減算器の組み合わせで実現することになります。
 IIR フィルタでは、係数感度などの点から、高次の伝達関数を直接に実現するのではなく、2 次 (および 1 次) セクションの縦続接続で実現するのが普通です。
 特に、固定小数点演算の DSP では、扱える数値のダイナミック・レンジがせまく、波形がクリッピングしたり、ノイズまみれになったりせずに実現するためには、2 次セクションの分子 / 分母のペアリング / オーダリング / スケーリングが重要になってきます。
 前述のフィルタ設計アプリケーションの中で、固定小数点 DSP での IIR フィルタ計算に適した実現をしてくれるのは、(2) の PSoC Creator の Filter コンポーネント (転置型向き)、(6) の IIR_Design (標準型向き) しかありません。
 (6) の IIR_Design では標準型構成での Lノルム、つまりゲインのピーク値を 0 dB に抑えるスケーリングを施すことができますが、あまりにぴったりと 0 dB に合わせすぎていて、余裕がなく、フルスケールのスイープ・サイン波を入力すると、過渡的に一部クリッピングを生じて高調波が発生してしまいます。
 次回は、IIR_Design を使用し、得られた係数に補正を施してクリッピングを防ぐ方法を示します。