Comments
Description
Transcript
アプリケーション ノートAN2099
アプリケーション ノート AN2099 無限大の単極 IIR フィルタ 作成者:デービッド バン エス 関連プロジェクト:あり 関連パーツ ファミリ:CY8C25xxx、CY8C26xxx 概要 多くのアプリケーションでは、サンプリングによってデジタル形式にした後のデータをフィルタリングする必要があ る。単極無限インパルス応答(IIR)フィルタのトポロジを示し、式を作り、フィルタ ルーチンをアセンブリまたは C で利用できるようにこのトポロジを実装したソフトウェアを紹介する。 はじめに デジタル信号処理を利用すれば広範なフィルタリング機 能を実現可能であるが、それには高速の演算ハードウェ アが必要である。単極フィルタなら、8 ビット PSoC デ バイスでもそのリソースに負荷をかけないものを開発す ることができる。このアプリケーション ノートでは、 IIR フィルタを構成する方法とロールオフ周波数(f0) の計算に必要な式を示す。 IIR フィルタは巡回型フィルタである。つまり、その出 力が次の値の計算に使用される。理論上では、入力に加 えられたインパルスは信号ループ内を流れ続け、たとえ その振幅が急激に減少してもその影響が完全にゼロにな ることはない。その動作は式 (1) および (2) によって 定義される。 無限インパルス応答フィルタ 目標は、図 1 に示すパッシブ フィルタをエミュレート することである。 式 (1) と式 (2) を結合すると、式 (3) および (4) の伝 達関数が得られる。 上式は、ハイパス フィルタおよびローパス フィルタの 標準的な伝達関数である。ロールオフ周波数 f0 は、式 (5) に示すとおりである。 図 1:単極パッシブ フィルタ 左側はローパス フィルタ、右側はハイパス フィルタで ある。図 2 に、図 1 のフィルタに相当する IIR フィルタ のトポロジを示す。 サンプル値システムの場合はトポロジが若干異なる。図 3 を見ると、積分器が累算器に置き換えられ、RC が換 算係数に置き換えられていることがわかる。 図 2:単極フィルタの IIR トポロジ 1/2/2003 Revision A -1- [+] Feedback AN2099 ロールオフ周波数はサンプリング周波数 fs に依存する が、それ以上に重要なのは減衰値「a」である。フィル タのロールオフ周波数は、減衰値を変更するだけで簡単 に変化する。 図 3:単極パッシブ サンプル値フィルタの IIR トポロジ そのフィルタがわずか 4 ステップで作成 可能 その動作は式 (6) および (7) によって定義される。 では、そのフィルタを実際に作成してみよう。前述の フィルタを実装するための 4 つのステップは、以下のと おりである。 1 式 (6) と式 (7) を結合すると、式 (8) および (9) の伝 達関数が得られる。 2 3 4 z 変換の定義は、式 (10) に示すとおりである。 式 (10) に示した z 変換の近似式を式 (8) および (9) に 代入すると、伝達方程式 (11) および (12) が得られ る。 サンプリング周波数 fs と目的のロールオフ周波 数 f0 から、必要な除数「a」を決定する。 Vin から元の Vlp を減算する。これを新しい Vhp とする。 Vhp を「a」で除算する。 ステップ 3 で得られた値を元の Vlp に加算して 新しい Vlp を生成する。ただし、次の値の計算 のために保存する必要があるのは Vlp のみであ る。 このタイプのフィルタの 2 つの例を示す。これらの関数 は、このアプリケーション ノートに関連するプロジェ クト ファイルの中にある IIRFilters.asm に含まれてい る。また、これらの関数を C プログラムで利用できるよ うに IIRFilters.h も含まれている。 ごくシンプルなハイパス フィルタ このフィルタでは、減衰値を 256 に設定する。ロールオ フ周波数は、式 (14) によって定義される。減衰値を 256 としたのは、バイト シフトによって容易に実装で きるからである。 上式もハイパス フィルタおよびローパス フィルタの伝 達関数である。ロールオフ周波数 f0 は、式 (13) に示す とおりである。 1/2/2003 サンプリング レートが 5 ksps の場合、ロールオフ周波 数は 3.1 Hz となる。 サンプル コード 1 は、16 ビット符号付き入力を受け取 り、元の Vlp を使用して次の値を計算し、新しい 16 ビッ トの Vhp を返す関数である。この関数は、16 ビット データが X(MSByte)および A(LSByte)レジスタを 介して入力されることを前提とする。出力は、X および A レジスタを介して返される 16 ビットのハイパス値で ある。 Revision A -2- [+] Feedback AN2099 256/161 で除算することは、161 を乗算し、そのデータ を右に 1 バイト桁移動するのと等しい。式 (16) は減衰 率計算式を展開したものであるが、これを見ると一連の 桁移動と累算であることがわかる。 サンプル コード 3 は、16 ビット符号付き入力を受け取 り、元の Vlp を使用して次の値を計算し、新しい 16 ビッ トの Vlp を返す関数である。 コード 1 Vlp の初期値を設定する初期化関数が必要である。その 関数をサンプル コード 2 に示す。 コード 2 この例では、多くのハイパス フィルタ アプリケーショ ンにおいて非常に便利であることから、除数として 256 を使用した。この関数は、他の除数の値に合わせて容易 に変更することができる。次のサンプルでその方法を示 す。 ごくシンプルなローパス フィルタ この例では、5 ksps のサンプリング レートのデータを 使用して 500 Hz フィルタを形成するローパス フィルタ を設計する。必要な減衰率を式 (15) に示す。 1/2/2003 コード 3 Revision A -3- [+] Feedback AN2099 もちろん、この関数にも初期化関数が必要である。その 関数を以下のサンプル コードに示す。 nop で設定したブレークポイントにより、デバッガで 2 つのフィルタの出力を表示することが可能である。X は 最上位バイトを受け取り、A は最下位バイトを受け取 る。 サンプル コード 6 は、C で記述した同じプログラムで ある。 コード 4 ローパス/ハイパスフィルタを 1 つにま とめた例 サンプル コード 5 は、4000 カウントのステップ入力を ハイパス フィルタ、次いでローパス フィルタに送るプ ログラムである。 コード 6 iData は、デバッギングの際にウォッチ変数として設定 できるグローバル変数である。この場合もやはり、ブ レークポイントによりデバッグ モードでフィルタの応 答を表示することが可能である。 まとめ 単極 IIR フィルタは信号処理に非常に役立つ。ここで は、様々なフィルタリング要件に容易に適合させること のできる 2 つの例を示した。 コード 5 Cypress MicroSystems, Inc. 22027 17th Avenue S.E. Suite 201 Bothell, WA 98021 電話:877.751.6100 FAX:425.939.0999 http://www.cypressmicro.com/ / http://www.cypress.com/aboutus/sales_locations.cfm / [email protected] Copyright ©2002 Cypress MicroSystems, Inc. All rights reserved. PSoCTM(Programmable System on Chip)は、Cypress MicroSystems, Inc.の商標です。 本書に記載されているその他の商標または登録商標はすべて、それぞれの会社の財産です。 本書に含まれる情報は、予告なしに変更されることがあります。 1/2/2003 Revision A -4- [+] Feedback