IIRフィルターの実現を選択する際に考慮すべき要素は何ですか?


16

IIRフィルターは、直接形式1または2として実装できます。しかし、どのフォームを使用するかをどのように決定しますか?それぞれの長所と短所は何ですか?


さらに、それらをGPUに実装する最良の方法は何ですか。
ロイ

2
@ Drazick、GPUはまったく異なるゲームです。別の質問が必要です。
トレバーボイドスミス

回答:


9

まず、ウィキペディアのDirect Form IおよびIIの実装について少し説明します。

直接型Iはより多くのメモリを必要としますが、やや単純な戦略であり、丸めや共振の問題が発生する可能性は低くなります。

ダイレクトフォームIIではメモリの消費量は少なくなりますが、異常な相互作用、より大きな数、より多くの丸め誤差が発生する可能性があります。これの多くは、小さなフィルター、特に2次フィルターをカスケード接続することで削減できます。


2
どちらの場合でも、2次セクションをカスケードする必要があります。
オリバーチャールズワース

1
要するに、メモリと丸め誤差のトレードオフですか?
アナシムティアズ

2
非常に弱い答えのIMO。技術的には質問に答えますが、「技術的に」のみです。言語のソースコードをいくつか見たいです。簡単なFIRフィルターを実装する方法を知っています。IIRソースコードを見てみましょう。
トレバーボイドスミス

2
また、サンプルごとに実行される数学演算の観点から、より良い実装IまたはIIはどれですか?
アナシムティアズ

1
FIRフィルタリングの方法を知っています。私はまた、I / II / III / IVの直接形式とは何かを知っています。私が経験したことがないのはIIRです。設計または実装です。私の元のコメントはあまり建設的ではありませんでした。「直接型I-IVとは何かを理解しています。IIRフィルターを設計/実装する方法について詳しく話していただけますか?」
トレバーボイドスミス

9

少し時代遅れですが、特にDirect Form IIを使用すると多くの問題が発生する可能性があるため、より包括的な回答に値する可能性があります。まず第一に、「すべてに適合するサイズ」はなく、最適な選択は特定のアプリケーションと制約に依存します。検討できるのは

  1. メモリ: Direct Form IIとTransposed Form IIは、Direct Form IとTransposed Form Iよりも状態メモリが少し少なくなりますが、カスケードされた2次セクションの実装では違いはわずかです
  2. MIPS:乗算と加算の数に関して、4つの実装はすべて同じです。ただし、特定のプロセッサの命令セットによっては、実装効率に大きな違いが生じる可能性があります。だから「依存する」。
  3. 固定小数点プロパティ:これは大きな違いをもたらします。主に、状態変数がオーバーフローしないことを確認する必要があるため、入力/出力と状態変数の間の伝達関数を分析する必要があります。ここでは、直接フォームIと転置フォームIIが明確な勝者です。状態変数は、+ 106dB程度または入力と出力に対して制限されます。たとえば、直接型IIでは、入力から状態への伝達関数は極のみによって与えられます。これが実際に100 dBのゲインを超える実際の例を見てきました。これは、固定小数点実装のための絶対的な非ノンです。
  4. ノイズ:切り捨てと丸め誤差の点では、すべての実装はほぼ同じです。3)で述べた状態変数伝達関数の問題もこれにある程度影響し、32ビット浮動小数点を使用している場合でもDirect Form IIフィルターで可聴ノイズの問題が発生しました。

したがって、要約すると、転置フォームIIが最良の選択となることがよくあります。いくつかの固定小数点シナリオでは、特に重大なノイズの問題がある場合、直接スペクトルIは、エラースペクトルシェーピングなどのようなものでより簡単に拡張できるため、より優れています。


これは、はるかに包括的な、より良い答えです!
ローレムイプサム

2
今日は、はるかに難しい方法で、なぜDirect Form Iがアプリケーションに適しているのかを考え出しました。本当に良い答えをありがとう!
アナシンティアズ

1

リソースが非常に乏しいシステムで作業する場合、または極端な要件がある場合を除き、直接フォームIまたはIIを選択するかどうかは実際には問題ではありません。たとえば、PCやスマートフォンで何かをしているのであれば、それは本当に重要ではありません。個人的には、フォームIを好みます。

実際の問題は通常MIPSであり、固定小数点の実装を計画している場合、事態はさらに複雑になります。たとえば、ARMでは、係数とフィルター状態の両方が32ビットの場合、IIRフィルターははるかに多くのMIPSを消費します。たとえば、カットオフ周波数が非常に低いローパスフィルターを実装する必要がある場合、32ビットの状態と係数が必要です。そのような場合、たとえば状態変数フィルターなど、異なるタイプのフィルターを使用できます。


1

数値の精度などの技術的な違いとは別に、安定性の問題もあります。デジタルフィルターの極/零点のペアが互いに近い場合、周波数応答はさまざまな場所で不安定になる可能性があります(通常、ナイキストに近づくかゼロに近づく)。

IIRフィルターを音楽アプリケーションに使用する場合、フィルターパラメーターをリアルタイムで変調すると、実現の選択がフィルターの安定性に大きな影響を与える可能性があります(たとえば、ローパスフィルターのカットオフ周波数を変更する)。

私は、次の各実現のカットオフ周波数やピークゲインなどの時変パラメーターを違いを聞くことができるオープンソースアプリケーションを持っています。

  • 直接フォームI
  • 直接フォームII
  • 転置直接形I
  • 転置直接型II
  • 格子形
  • 状態変数

プロジェクトはこちらです:

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

スクリーンショット


1
これを何度か投稿しましたが、実際に質問に合わせて回答が調整されない限り、スパムポリシーを実施するつもりです。これらの投稿はどれも質問に直接答えたり、製品を宣伝したりすることはありません。それらを編集して質問に直接回答するか、削除されます。
フォノン

0

上記のメモリ、MIPS、ノイズ、および安定性に関するコメントに加えて、一般的に見落とされている別の要因があります。この要素はリセット機能です。これは私の状況のほとんどで非常に重要です。

Direct Form IIの実装では、遅延出力の状態はありません。そのため、Direct Form IIフィルターを「リセット」して「5」とすると、初期出力は5になりません。 -Simulinkの使用時にいくつかの深刻なフラストレーションを引き起こした直感的。このため、ほとんどの場合、直接フォームI実装を使用します。残念ながら、SimulinkはDSPツールボックスがある場合にのみDirect Form Iをサポートしますが、それでも入力信号から初期条件を設定することはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.