このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
この例では、多段ハーフバンド IIR 間引きの設計法を示します。
FIR マルチレート フィルターと同様に、IIR ハーフバンド間引き/内挿は、効率的なポリフェーズ構造を使用して実装できます。IIR ポリフェーズ フィルターには、非常に少数の乗数の実装のみを必要とする、本質的に安定性が高い、丸めのノイズの感度が低い、リミット サイクルがないなど、いくつかの興味深い特性があります。
バタワースおよび楕円の IIR フィルターは、ハーフバンド間引き/内挿の応答タイプを使用して設計できます。さらに、特殊な IIR 設計アルゴリズムを使用すると線形位相に非常に近い応答が得られます。
フィルターの計算コストを測定する 1 つの方法として、MPIS、つまり入力サンプルごとに計算される必要のある乗算の数 (平均) を判定する方法があります。MPIS カウントのケース スタディを検討してみます。以下のフィルター仕様での FIR と IIR です。
Fs = 9.6e3; % Sampling frequency: 9.6 kHz TW = 120; % Transition width Ast = 80; % Minimum stopband attenuation: 80 dB M = 8; % Decimation factor NyquistDecimDesign = fdesign.decimator(M,'Nyquist',M,TW,Ast,Fs);
効率的な FIR を設計するための方法として、マルチレート多段手法を使用する方法があります。この設計では、カスケード状の 3 つの FIR ハーフバンド間引きが得られます。ハーフバンド フィルターは、係数が 1 つおきに 0 となるため、非常に効率的なフィルターです。
MultistageFIRDecim = design(NyquistDecimDesign,'multistage',... 'HalfbandDesignMethod','equiripple','SystemObject',true); cost(MultistageFIRDecim)
ans = struct with fields: NumCoefficients: 69 NumStates: 126 MultiplicationsPerInputSample: 12.8750 AdditionsPerInputSample: 12
この方法は、平均で 12.875 MPIS の計算コストを達成します。
楕円フィルターは最適な等リップル フィルターの IIR に相当します。この設計では、カスケード状の 3 つの IIR ハーフバンド間引きが得られます。楕円の設計によって、最も効率的な IIR ハーフバンド設計が得られます。
MultistageIIRDecim = design(NyquistDecimDesign,'multistage',... 'HalfbandDesignMethod','ellip','SystemObject',true); cost(MultistageIIRDecim)
ans = struct with fields: NumCoefficients: 11 NumStates: 17 MultiplicationsPerInputSample: 2.5000 AdditionsPerInputSample: 5
この方法は、平均でたった 2.5 MPIS の計算コストを達成します。
いずれも仕様を満たしている、FIR および IIR マルチレート多段フィルターの振幅応答を重ねた場合、2 つのフィルターは非常によく似ていることがわかります。
fvFig = fvtool(MultistageFIRDecim,MultistageIIRDecim,'Color','white'); legend(fvFig, 'Multirate/Multistage FIR Polyphase', ... 'Multirate/Multistage IIR Polyphase')
詳細な検査では、IIR フィルターの通過帯域リップルが FIR フィルターの通過帯域リップルとの比較で非常に優れていることが示されます。したがって、計算コストでの節約によって、振幅応答の劣化が発生しないことがわかります。
fvtool(MultistageFIRDecim,MultistageIIRDecim,'Color','white'); title('Passband Magnitude Response (dB)') axis([0 0.325 -0.0016 0.0016])
各 IIR ハーフバンド フィルターの実装に使用される構造体を変更すると、IIR フィルターを使用して線形位相設計に非常に類似した設計を得ることができます。この設計では、カスケード状の 3 つのハーフバンド間引きも得られます。ただし、各ハーフバンドは、オールパス フィルターと並列に接続される純粋な遅延を含む特定の方法で実装されます。この実装上の制約により、準線形位相応答を提供しやすくなります。これは、楕円の設計と比較して、計算コストを多少増加することで得られます。
IIRLinearPhaseFilt = design(NyquistDecimDesign,'multistage',... 'HalfbandDesignMethod','iirlinphase','SystemObject',true); cost(IIRLinearPhaseFilt)
ans = struct with fields: NumCoefficients: 25 NumStates: 55 MultiplicationsPerInputSample: 4.3750 AdditionsPerInputSample: 8.7500
楕円の場合ほど効率的ではありませんが、この設計は FIR ハーフバンドを使用するよりも効率的です。
3 つの設計の群遅延を重ね合わせて、フィルターの通過帯域 (対象領域) に注目することで、後者の IIR 設計がその領域の準線形位相 (ほぼフラットな群遅延) を実現することを検証できます。対照的に、楕円フィルターは、より効率的である (および全体的により低い群遅延もつ) 一方で、非線形位相応答があるのは明らかです。
fvFig = fvtool(MultistageFIRDecim,MultistageIIRDecim,IIRLinearPhaseFilt,... 'Color','white','Analysis','grpdelay'); axis([0 0.6 0 225]) title('Passband Group delay') legend(fvFig, 'Linear-Phase FIR', 'Nonlinear Phase Elliptic IIR',... 'Quasi-Linear Phase IIR')
ポリフェーズ IIR フィルターは、さまざまな方法で実装できます。前の節で、シングルレートおよびマルチレートのカスケード オールパスについて触れました。ここでは、ヒルベルト変換を例として採り上げます。遷移幅が 96 Hz で最大通過帯域リップルが 0.1 dB である準線形位相 IIR ヒルベルト フィルターは、カスケード波形デジタル フィルターとして 10 MPIS のみを使用して実装できます。この 10 MPIS という数値は、同等の FIR で 133 MPIS が必要となることと比較すると非常に低い数値であることがわかります。
HilbertDesign = fdesign.hilbert('TW,Ap',96,.1,Fs); HilbertIIRFilt = design(HilbertDesign,'iirlinphase',... 'FilterStructure','cascadewdfallpass',... 'SystemObject',true); cost(HilbertIIRFilt)
ans = struct with fields: NumCoefficients: 10 NumStates: 33 MultiplicationsPerInputSample: 10 AdditionsPerInputSample: 25
波形デジタル フィルターは、極が単位円に近い時にも非常にロバスト性が高いことが証明されています。これらのフィルターは、本質的に安定性が高く、丸めのノイズ特性感度が低く、また、リミット サイクルがないという特長があります。当社の IIR ヒルベルト フィルターを固定小数点表現に変換するには、realizemdl コマンドおよび Fixed-Point Tool ツールを使用して、以下のように Simulink モデルの浮動小数点を固定小数点に変換します。
realizemdl(HilbertIIRFilt)
IIR フィルターは、通常、同等の FIR と比較した場合に、特定の仕様を満足するために必要となる係数が大幅に少ないために非常に効率がよいと見なされてきました。
マルチレート/ポリフェーズ手法を使用する最新の FIR フィルター設計ツールでは、効果を量子化する良好な感度があり、固定小数点が実装されるときの安定性およびリミット サイクルの問題のない線形位相応答を作成できます。これによって IIR と FIR の効率の差は埋められました。
ただし、IIR ポリフェーズ フィルターは、FIR フィルターにあるほとんどの利点を備えながら、非常に少数の乗数の実装しか必要としないという利点があります。