Cでのリアルタイムの固定小数点IIRフィルターの実装


7

Cで4次の固定小数点ローパスIIRフィルターを実装したいと思います(Q15演算を使用)。このフィルターは、2段のカスケードダイレクトフォームIIバイカッドフィルターを使用して準備します。

デジタル信号処理の本で無数のC実装とサンプル係数を見つけましたが、検証中にそれらのどれも信頼できないことがわかりました(それらはオーバーフローを作成し、期待される周波数成分を減衰しませんなど)。

どのC実装がこの問題に適していますか?また、この実装を検証するためのサンプル係数はありますか?


1
自分に合った実装が見つからなかった場合、何が原因で独自に実装できないのですか?あなたは見つけたものが足りないところを理解しているようですので、あなたの要件に合うようにそれらを補強してください。2次セクションに基づく4次IIRは、それほど複雑ではありません。
Jason R

あなたの問題は本当にフィルターの設計に関するものですか、それともすでに係数を取得していてそれを実装したいですか?
Dipan Mehta 2012

すでにフィルターを用意しており、係数も持っています。
アルビン、2012年

回答:


8

これは非常に単純な質問のように見えますが、非常に複雑な答えが必要です。

「ワンサイズ」がすべてのソリューションに適合するとは思いません。アルゴリズムの最適な選択は、許容できるノイズとローパスのタイプ(急勾配と周波数)によって異なります。たとえば、44.1 KHzのサンプルレートでは、10 kHzの4次バターワースはかなり単純ですが、100 Hzのローパスは王室の痛みです。本質的には、極が単位円にどれだけ近いかによって異なります。

IIRフィルターの量子化および丸め誤差は、通常、極のみの伝達関数によって重み付けされた出力に伝達されます。4次のバターワース10 kHzローパスフィルターのワーストケースのノイズ増幅はわずか5 dBであるため、それほど問題にはなりません。

ただし、100 Hzのローパス(これも4次BW)では、ノイズはなんと75 dB増幅されます。Q15の計算を使用する場合、基本的なノイズフロアはおそらく-100dB程度です。フィルターをかけた後、信号対雑音比は25 dBになります。

これが、固定小数点IIRフィルターがかなり複雑である理由の1つです。低いカットオフ周波数と中程度の信号対雑音比が必要な場合、基本的なアルゴリズムは機能しません。倍精度の数学および/またはエラースペクトルシェーピングまたは関連する方法を調べる必要があります。

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