TechForum DigiKey Employee
特長
IIR(無限インパルス応答)フィルタは、オーディオからデータ処理まで、プロセッサのオーバーヘッドを低く抑えながら、多くのアプリケーションで使用することができます。1つの双2次(バイクワッド)セクションは、FPGAにおいてわずか5個(18ビット)の乗算器で構成でき、32ビットのワード長が必要な場合は最大20個の乗算器で構成することができます。本稿では次のデザイントピックスを取り上げます。
• IIRフィルタによる双2次セクション設計の基礎
• フィルタの安定性とz伝達関数
• Excelベースの双1次(バイリニア)z変換のIIR設計ツール
• より効率的な実装のためのフィルタスケーリング
• フィルタの特性と検証
• 18ビットのCODECコントローラと、18ビットおよび36ビットのIIR双2次セクションを含むカスタムVHDLコンポーネントの設計とインスタンス化
はじめに
このリファレンスデザインは、Xilinxの Spartan 6 開発ボードとNational(Texas Instruments)の LM4550 オーディオCODECを使用しています。デザインは、Xilinx ISE ver13.1で開発しました。このデザインはオーディオCODECを採用していますが、センサデータもまたフィルタリングできるため、CODECは必要ありません。IIRフィルタは、センサ データのフィルタ処理にも適しています。このフィルタは、より小さなワード長に縮小することができ、このやり方で、より高速な実装のためにカスタムIIRフィルタを再設計する出発点として使用することができます。XilinxのSpartan 6 FPGAは、DSP48A1ブロックが統合されているため、DSPロジック回路の設計に適した選択肢です。集積されたDSPブロックにより並列演算回路が可能になり、超高速データ処理が可能なフィルタを実現します。IIRは、32x32ビットおよび32x18ビットの乗算器と、フィードフォワード経路およびフィードバック経路の両方で複数の加算器を利用しています。IIRフィルタは、フィルタのワード長を考慮して、十分なハードウェア乗算器があれば、どんなFPGAでも使用できます。
背景
このモジュールのユーザーがIIRフィルタ設計を完全に理解している必要はありませんが、基本的な設計原理を理解していれば、フィルタのトラブルシューティングに役立ちます。この背景のセクションでは、双1次z変換とVHDLモジュール設計そのものを含むIIRフィルタ設計の基礎について説明します。IIRフィルタは、アナログ伝達関数のプロトタイプから設計された再帰フィルタです。双1次z変換は、s領域の伝達関数を離散z領域に写像する線形近似です。この際、jω(j-オメガ)軸は、ナイキストサンプリングレートFs/2の結果として、周波数ワーピングを介して単位円に写像されます。ワーピングの関係は以下の式1のようになります。次に、s領域(式2)はz領域に変換することができます。ここで
「z-1」は遅延演算子です。双2次関数は、単なる2本の遅延線であり、1本はフィードフォワード経路、もう1本はフィードバック経路で使用されます。z伝達関数は、以下の式3に示されています。双2次のブロック図は、以下の図1に示されています。
式1
式2
式3
図1 – 双2次信号フローのブロック図写像
フィードバック経路によりフィルタが不安定になる可能性があります。s領域では、極が左半平面内にある場合、フィルタは安定とみなされます。これらの極は、z領域では単位円内の領域に写像されます。以下の図2は、jω軸の単位円上へのマッピングを示しています。
図2 – s平面からz平面への写像
s平面からz平面への写像により、周波数はワープされます。z平面とs平面は本質的に、上記の式1に示す関数で結ばれています。jω軸の両端は、z平面のπラジアンで重なります。これは、サンプリング周波数の半分でもあります。フィルタが本質的に安定しているかどうかは、分母と分子の2次方程式を解き(極と根を求め)、それをz平面内にプロットすればわかります。 複素ベクトルの大きさが1より小さければ、それは単位円内にあり、安定したフィルタが期待できることを意味します。これは、s平面の左半分がz平面の単位円内に直接写像されるという事実によるものです。
双1次z変換を使って適切な双2次係数を導き出す最初のステップは、アナログのプロトタイプから始めることです。ローパスとハイパスのフィルタ係数を求めるためにExcelツールで使用した2次ローパスバターワースのプロトタイプは、以下の式4に示されています。バンドパスとバンドストップのプロトタイプには式5を使用しました。
式4
式5
次に、アナログプロトタイプの伝達関数を、以下の式6、7、8、9のいずれかの変換でデノーマライズ(de-normalize)する必要があります。これは、アナログプロトタイプの「s」を以下の変換のいずれかに置き換えることで行われます。ローパスからローパスへの変換およびローパスからハイパスへの変換は、2次プロトタイプで使用されます。また、ローパスからバンドパス、ローパスからバンドストップへの変換は、1次プロトタイプで使用されます。ω ’ の項は、上記の式1の周波数ワーピング関数から来ていることに注意してください。
式6
式7
式8
式9
バンドパス関数とバンドストップ関数には2つの新しい項があります。これらは、以下の式10 および11に示されています。これらは、作成したいフィルタの周波数ワープされた帯域幅から得られます。すべての代入が終わったら、式12にsを代入することで、最終的なz変換を適用することができます。z伝達関数の上下にzの負の最大次数を乗算する代数操作を使って、上記の式3で見られたものと同様の双2次伝達関数を得ることができます。
式10
式11
式12
これらの値は、添付のExcel ツールを使用したり、好みの科学技術計算プログラムを使用したりして求めることもできます。係数が求まったら、その値を2進符号付き固定小数点「2.30」フォーマットに変換するだけです。これは、最上位2桁が -2 ~1の値を保持し、残り30ビットが正の小数部分であることを意味します。いくつかの例を次のセクションで示します。
アプリケーション
回路の構築
IIRフィルタモジュールは次の回路機能を使用します。
• イネーブルフラグの同期用3ビットカウンタ
• 5個の32ビットIIR係数レジスタ
• 2個の2段遅延線(フィードフォワードおよびフィードバック)
• 数値計算同期用2状態ステートマシン
• 20/10 並列掛算器(32 x 32ビット/32 x 18ビット)
• 64から32ビットおよび50から18ビットへのトランケーションブロック(32 x 32ビット/32 x 18ビット)
• 1クロックサイクルにおいて2回の加算および2回の減算を実行する加算ステージ
• DACへの出力用で32ビットから18ビットへのトランケーションブロック
IIR_Biquad.vhdフィルタモジュールのインスタンス化
IIRフィルタは、IIR_Biqhad_xx.vhdファイルをプロジェクトに含めて、Xilinx ISEでトップレベルのポートをポートマッピングするか、回路図ファイルを使用してポートに接続することにより、簡単にインスタンス化できます。プロセスタブで回路図シンボルを作成した後、回路図エディタ内で配線を追加することにより、ポートを接続することができます。トップレベルの回路図は次の図3のようになります。
図3 – Xilinx ISEのトップレベルの回路図
このアプリケーションは100MHzで動作させましたが、より高速で動作させる場合にも十分な余裕があります。係数は、科学計算プログラムや、極零点配置法、整合z変換法、最も一般的な双1次z変換近似法(上記の背景のセクションにあります)を用いた手動計算など、さまざまな方法で選択することができます。ローパス、ハイパス、バンドパス、バンドストップIIRフィルタの双2次係数を生成するために双1次z変換を使用するExcelファイルが含まれています。係数が計算されたら、2進符号付き固定小数点フォーマット「2.30」に変換する必要があります。これにより、-2から1.999999999068677…の間の数値が生成されます。
これを計算するには、小数に230を掛け、大きな2進数を変換できる計算ツールにその数値の整数部分を入力して変換するだけです。変換された部分は係数の小数部分となります。次に、-2と1の間の整数部分を単純に計算します。係数が負の場合は、2と係数の差を求めます。これにより、正の部分(小数部)が得られ、これを最上位ビット(-2)に加算すると、必要な元の負の係数が得られます。この変換の例を次の図4と図5に示します。
図4 – 2進符号付き固定小数点 2.30 変換例 1
多くの場合、係数は負になります。負の係数が必要な場合は、以下の図5の変換例を参照してください。
図5 – 2進符号付き固定小数点 2.30 変換例 2
係数が変換されたら、IIR_Biquad VHDL モジュール内の既存の係数の代わりに係数を入力し、モジュールを合成してテストします。
ハードウェアのテストと検証
このモジュールは、Xilinxのシミュレーションソフトウェア ISim を使用して徹底的にテストされました。基本的なタイマで駆動される2状態のステートマシンは、算術演算の同期、中間演算の切り捨て、各サンプル期間の出力のラッチを行うためのイネーブルフラグを制御します。各サンプル期間には遅延ラインを進め、フラグステートマシンをスタートさせます。それぞれをISimでテストしました。ISimシミュレーションのスクリーンショットを図6に示します。
図6 – ISimシミュレーションのスクリーンショット
ハードウェアは LM4550 オーディオCODECを使ってテストを行いました。多くのフィルタを作成し、連続的な0~24kHzの18ビット信号を入力して、またフィルタのインパルス応答を得るために単一のインパルスを入力してテストを行いました。次にインパルス応答を高速フーリエ変換し、フィルタの周波数応答を求めました。最初に作成されたフィルタは、60Hzの2次IIRバタワースノッチフィルタです。デジタル実装と比較対照するために、60HzツインTノッチのアナログフィルタを作りました。デジタルIIRフィルタの実装では、制約が厳しいため、当然ながら大きな群遅延が発生します。アナログフィルタとIIRデジタルフィルタの周波数スペクトル出力を、以下の図7と図8に示します。どちらのフィルタも、ノイズフロアに十分入る阻止帯域の減衰がありました。より大きな入力テスト信号を使用すれば、より大きな減衰が測定される可能性があります。
図7 – 60Hz アナログ回路のツインTノッチフィルタ
図8 – 60Hz デジタルIIRのバタワースノッチフィルタ
アナログフィルタでは、設計に必要とされるディスクリート部品により、熱ドリフトや周波数の不確実性に悩まされます。デジタルIIRフィルタでは、DCで少量のロールオフがあるものの、中心周波数は正しいように見えます。各フィルタのs領域とz領域の伝達関数が、それぞれ次の式13と式14に示されています。
式13
式14
分子と分母の2次方程式を解くことで、零点と極の配置を求めることができます。この場合、両方とも複素数であり、以下の式15と式16のようになります。
式15
式16
アナログとIIRノッチフィルタの極/零点プロットを図9に示します。どちらの実装でも、フィルタが安定限界にあることに注意してください。
図9 – アナログおよびIIRノッチフィルタ実装の極/零点プロット
オシロスコープの画面ショットの例をいくつか以下に示します。これらのテストでは、フィルタにインパルスを入力しています。インパルス応答は青で表示され、次にスコープのFFT機能を使うと、フィルタの周波数応答が赤で再現されます。Qがかなり大きい7KHzのバンドパスフィルタを図10に示します。
図10 – 7kHz、バンドパスフィルタの実装
図11に、2次のバタワース型バンドストップフィルタを示します。
図11 – 2.7kHz、バンドストップフィルタの実装
別のIIR実装を図12に示します。このフィルタは、カスケード接続された3つの双2次チェビシェフ セクションを使用して、阻止帯域の減衰を大きくし、遷移帯域を小さくしています。
図12 – 8kHz、ローパスフィルタ、チェビシェフ、IIRの実装
性能、制約および変更
このリファレンスデザインは、Xilinx Spartan 6 開発ボードとNational(Texas Instruments)LM4550 オーディオCODEC を使用しています。設計はXilinx ISE ver13.1で進めました。この設計のオーディオCODECは必要ありません。この設計は、48KHzのサンプリングレートに限らず、多くの非オーディオアプリケーションに拡張できます。
まとめ
このリファレンスデザインは、ドロップインIIRフィルタと双2次係数計算ツールを使用して、FPGAでデータストリームを素早くフィルタリングする方法を示しています。このデザインはオーディオアプリケーションを対象としてテストされていますが、解像度を下げて、より高速なフィルタを実現するために設計をスケールダウンすることもできます。 また、IIRフィルタ設計の基礎についても説明しました
追加情報
DSPの詳細なトピックスとフィルタ設計の情報については、オンラインブックを参照してください。
「The Scientist and Engineer’s Guide to Digital Signal Processing」(Steven W. Smith, Ph.D 著) http://www.dspguide.com
このeeWiki 記事に関する質問は、著者に直接お問い合わせください。
付録:ダウンロード
VHDLによるIIRフィルタ設計(18ビット、48 kHzオーディオ信号用)、VHDLファイルとExcelのIIR設計ツールはこちらからダウンロードできます。
IIR_Filter_Coef_Generator.xls(33 KB)
IIR_Biquad.zip(2.1 MB)