主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

最適化された固定小数点冷杉フィルター

この例では,固定小数点冷杉フィルターを最適化する方法を示します。最適化には,阻止帯域の減衰や,特定仕様を満たすために必要なビット数など,フィルター応答の特性が含まれます。この機能は,特定の語長の設定可能な係数をいくつかもつハードウェアの作業を行うユーザーや,研究対象に大規模な設計スペースがあるASICやFPGAなどのケースで特に有益です。ハードウェア設計者は,通常係数とビットのトレードオフを検討して,各種のASICまたはFPGAを最適化することができます。

この例では,最適な固定小数点冷杉フィルター係数を得るための,ノイズシェーピングに基づく各種方法について説明します。以下の操作について説明します。

  • 係数の語長の最小化

  • 係数の語長の制約

  • 阻止帯域の減衰の最大化

理論的背景

ノイズシェーピングアルゴリズムは,本質的に固定小数点冷杉フィルターの他の帯域の量子化ノイズを増加させる一方で,臨界周波数帯域(通常阻止帯域)から量子化ノイズを排除します。以下のブロック線図には,ノイズシェーピングのプロセスを示しています。本質的にフィルター係数は,デジタルフィルターに似ているものの,中央に量子化器のあるシステムを通過します。システムは,各係数の量子化誤差を計算してから,b1, b2,およびb3の係数により定義されるシンプルなIIRハイパスフィルターに誤差を通過させます。“丸め”ブロックは入力を量子化された近似値に丸めます。この後,量子化された値が元の浮動小数点値から減算されます。各遅延ブロックの初期状態値は,LSBと+ LSBの間のランダムノイズに設定することができます。

システムの出力は,量子化とノイズシェーピングが行われた新しいフィルター係数です。遅延ブロックに異なるランダムな初期状態を使用してこの手順を何度か繰り返すことにより,異なるフィルターを作成できます。

係数の語長の最小化

最初に,単一ステージまたは多段の設計仕様を満たす最小語長の固定小数点冷杉フィルターを判定します。ここでは,正規化された遷移幅。08,阻止帯域の減衰59 dbのハーフバンドフィルターの例を使用します。カイザーウィンドウ設計を使用すると,仕様を満たす91の倍精度浮動小数点係数が得られます。

TW =。08;%过渡宽度Astop = 59;阻带衰减(dB)f = fdesign.halfband (“TW, Ast”、TW Astop);高清=设计(f,“kaiserwin”);

ベースラインを確立するために,“算术”プロパティを'固定'に設定し,仕様を満たす最小値が見つかるまで係数の語長を反復することにより,フィルターを量子化しま。あするいは,minimizecoeffwl()を使用してこのプロセスを高速化できます。ベースラインの固定小数点フィルターには,91の17ビット係数が含まれます。

Hqbase = minimizecoeffwl(高清...“MatchRefFilter”,真的,“NoiseShaping”假的,...“Astoptol”, 0);% 91 17位系数,停止= 59.1 dB

17ビット語長は,多くのハードウェアターゲットに不向きです。特定の状況では16ビットのみの係数を使用することで妥協することができます。しかし,フィルターの最大の阻止帯域の減衰が望まれる59 dbではなく,わずか58.8 dbであることから,元の仕様を厳格に満たしていないことに注意してください。

Hq1 = (Hqbase)复印件;Hq1。CoeffWordLength = 16;% 91 16位系数,停止= 58.8 dBm1 =测量(Hq1)% #好吧
m1 =采样率:N/A(归一化频率)通带边缘:0.46 3-dB点:0.49074 6-dB点:0.5阻带边缘:0.54通带纹波:0.017157 dB阻带Atten转换宽度:0.08

あるいは,阻止帯域の誤差を許容誤差に制御するための許容値を設定できます。たとえば,阻止帯域の許容誤差を.15dBとすると,3ビット短縮して,91の14ビット係数をもつフィルターを得ることができます。

Hq2 = minimizecoeffwl(高清...“MatchRefFilter”,真的,“NoiseShaping”假的,...“Astoptol”,酒精含量);% 91 14位系数,停止= 58.8 dB

係数の語長を短縮すると,固定小数点設計が仕様を満たさなくなります。許容誤差はアプリケーションによって異なりますが,この方法は多くの状況で制限があります。“MatchRefFilter”の制約を緩和することで、別の自由度を使用することができます。'MatchRefFilter' プロパティを false に設定することで、フィルターの次数 (最小次数設計の場合) またはフィルターの遷移幅 (固定次数設計の場合) Hd を一致させようとしていません。中間浮動小数点フィルターの再設計を許可することにより、93 の 13 ビット係数の仕様を満たす固定小数点フィルターが得られます。参照固定小数点設計に比べ、4 ビット短縮しましたが、係数が 2 つ (1 つは非ゼロ) 追加されています。

Hq3 = minimizecoeffwl(高清...“MatchRefFilter”假的,“NoiseShaping”、假);% 93 13位系数

これよりも優れた解決策は,ノイズシェーピングを使用して量子化フィルターの阻止帯域の減衰を最大化することです。ノイズシェーピング手順は確率的です。[NTrials]オプションを試したり,兰德を初期化して以下の結果を再現することもできます。“MatchRefFilter”は既定で false に設定され、'NoiseShaping' は true であるため、両者を省略できます。最適化された固定小数点フィルターは、91 の 13 ビット係数の仕様を満たします。これにより、同じ数の係数をもつ参照固定小数点設計よりも、4 ビット短縮したことになります。

Hq4 = minimizecoeffwl(高清“Ntrials”10);% 91 13位系数hfvt = fvtool (Hqbase Hq4,“ShowReference”“关闭”“颜色”“白色”);传奇(hfvt“17-bit参考滤波器”“可Noise-Shaped过滤器的);

ノイズシェーピングにより阻止帯域からノイズを排除するトレードオフとして,ノイズシェーピングされたフィルターの通過帯域リップルが多少増加しますが,これは通常問題になりません。また,ノイズシェーピングを適用した後の通過帯域リップルと周波数の間は単純な関係にないことに注意してください。

轴([0 0.5060 -0.0109 0.0109])

係数の語長の制約

前のデモではminimizecoeffwl()メソッドの‘MatchRefFilterパラメーターを假に設定することにより,多くの係数(固定フィルター次数の設計では大きな遷移幅)を短い係数の語長とトレードオフする方法を確認しました。ここでは,最小次数設計の場合に,多段(3ステージ)の8:1間引きを例にとり,このトレードオフをさらに制御する方法を示します。

调频= fdesign.decimator (8,低通滤波器的“Fp,置,美联社,Ast”, 0.1, 0.12, 70);嗯=设计(fm,“多级”“nstages”3);

メモ:次のコマンドは計算能力を必要とし,実行に数分かかる可能性があります。

最初に浮動小数点設計の次数を一致させ,次の仕様を満たすノイズシェーピングされた固定小数点フィルターを取得します。

  • 最初のステージで7つの15ビット係数

  • 第2ステージで10の13ビット係数

  • 第3ステージで65の17ビット係数

Hmref = minimizecoeffwl(嗯,“MatchRefFilter”,真正的);

フィルターの次数を増加させることにより,次のように係数の語長を短縮できます。

  • 最初のステージで9つの9ビット係数

  • 第2ステージで10の12ビット係数

  • 第3ステージで65の15ビット係数

Hq5 = minimizecoeffwl(嗯,“MatchRefFilter”、假);

最終的な語長の制御を向上させるためには,constraincoeffwl()メソッドを使用できます。多段設計では,各ステージの語長を個別に制約できます。たとえば,それぞれ10ビット,12ビット,および14ビットを使用するように各ステージを制約します。制約された設計は,次の仕様を満たします。

  • 最初のステージで8つの10ビット係数

  • 第2ステージで12の12ビット係数

  • 第3ステージで68の14ビット係数

Wl = [10 12 14];认证机构= constraincoeffwl(嗯,王);

阻止帯域の減衰の最大化

特定語長の設計可能な係数をいくつかもつシェルフフィルタリングエンジン(ASSP)を設計する場合,指定の次数と抑制された語長のフィルターの阻止帯域の減衰を最大化することが望まれます。次の例では,係数の表現に14ビットを使用しながら,70次のハーフバンド間引きで阻止帯域の減衰69分贝を取得します。

跳频= fdesign.decimator (2“halfband”“N, Ast”、70、69);Hb1 =设计(跳频,“equiripple”);
警告:此设计将生成一个MFILT对象,该对象将在未来的版本中被删除。要生成一个等效的System对象,请将“SystemObject”参数设置为true。Hs = design(D,…,'SystemObject',true)

14ビット係数で単純にフィルターを量子化する場合に得られる減衰は,わずか62.7 dbです。

Hb1。算术=“固定”;Hb1。CoeffWordLength = 14;mb1 =测量(Hb1)% #好吧
mb1 =采样率:N/A(归一化频率)通带边缘:0.44518 3-dB点:0.48816 6-dB点:0.5阻带边缘:0.55482通带纹波:0.010552 dB阻带Atten过渡宽度:0.10963

ノイズシェーピングにより阻止帯域からノイズを排除することで,減衰を1.5 db近く向上して64.18 dbにすることができますが,まだ仕様を満たすことはできません。

Hbq1 = maximizestopband (Hb1 14);mq1 =测量(Hbq1)% #好吧
mq1 =采样率:N/A(归一化频率)通带边缘:0.44373 3-dB点:0.48811 6-dB点:0.5阻带边缘:0.55529通带纹波:0.01064 dB阻带Atten转换宽度:0.11156

次の手順は,減衰80分贝の浮動小数点フィルターを設計することです。減衰を増加すると,遷移幅が増加するという代償があります。ノイズシェーピングを行っていない14ビットのフィルターの減衰は62.7 dbから66.2 dbに向上しますが,それでも仕様を満たすことができません。

跳频。Astop = 80;Hb2 =设计(跳频,“equiripple”);Hb2。算术=“固定”;Hb2。CoeffWordLength = 14;mb2 =测量(Hb2)% #好吧
警告:此设计将生成一个MFILT对象,该对象将在未来的版本中被删除。要生成一个等效的System对象,请将“SystemObject”参数设置为true。Hs = design(D,…,'SystemObject',true) mb2 = Sample Rate: N/A(归一化频率)通频带边:0.43464 3-dB点:0.48704 6-dB点:0.5 Stopband Edge: 0.56536通频带纹波:0.0076847 dB Stopband Atten过渡宽度:0.13073

ノイズシェーピング方法を使用すると,阻止帯域の減衰を66.2 dbから3 db以上向上し,69.4 dbにすることで,ようやく仕様を満たすことができます。

Hbq2 = maximizestopband (Hb2 14);mq2 =测量(Hbq2)% #好吧
mq2 =采样率:N/A(归一化频率)通带边缘:0.43584 3-dB点:0.4871 6-dB点:0.5阻带边缘:0.56287通带纹波:0.0053253 dB阻带Atten过渡宽度:0.12703

浮動小数点設計に比べて,固定小数点フィルターの遷移幅が増加します。浮動小数点設計の遷移幅と阻止帯域の減衰を一致させるには,24ビット係数が必要になるため,14ビットのみの係数をもつ69分贝の減衰を取得するには,これが代償になります。

关闭(hfvt);hfvt = fvtool (reffilter (Hb1) Hbq2,“ShowReference”“关闭”“颜色”“白色”);传奇(hfvt“浮点过滤”“14-bit Noise-Shaped过滤器的);

关上(hfvt)

まとめ

ここでは,ノイズシェーピング方法を使用して,単一ステージまたは多段の固定小数点冷杉フィルターの係数語長を最小化したり,阻止帯域の減衰を増加させる方法を確認しました。さらに,最小次数設計でビットを多くの係数とトレードオフしたり,固定次数設計でビットを大きな遷移幅とトレードオフする方法を確認しました。

参考文献

Jens Jorgen Nielsen,使用误差谱整形技术设计量化系数的线性相位直接形式FIR数字滤波器,IEEE声学学报,语音和信号处理,Vol. 37, No. 7, 1989年7月,pp. 1020- 1026。

Alan V. Oppenheim和Ronald W. Schafer,离散时间信号处理,第二版,Prentice Hall, 1999, ISBN 0-13-754920-2。