ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

IIR ポリフェーズ フィルターの設計

この例では、IIR ポリフェーズ フィルターの設計法を示します。

IIR ポリフェーズ フィルターには、非常に少数の乗数の実装のみを必要とする、本質的に安定性が高い、丸めのノイズの感度が低い、リミット サイクルがないなど、いくつかの興味深い特性があります。さらに、線形位相に非常に近い設計が得られます。

バタワース、チェビシェフ I 型および II 型、楕円の IIR フィルターは、ローパス、ハイパス、バンドパス、およびバンドストップの各応答タイプ用の基本ブロックとしてオールパス サブフィルターを使用して設計できます。バタワースおよび楕円の IIR フィルターは、ハーフバンド、ヒルベルト変換、マルチレート ハーフバンド、およびマルチレート 2 進ハーフバンド応答タイプを使用して設計することもできます。

コスト効率

フィルターの計算コストを測定する 1 つの方法として、MPIS、つまり入力サンプルごとに計算される必要のある乗算の数 (平均) を判定する方法があります。MPIS カウントのケース スタディとして以下のフィルター仕様での FIR と IIR を検討してみます。

Fs = 9.6e3;   % Sampling frequency: 9.6kHz
Fc = 300;     % Cutoff frequency: 300Hz
TW = 9.6;     % Transition width: 9.6Hz
Ap = 3e-3;    % Maximum passband ripple: 0.003 dB
Ast= 80;      % Minimum stopband attenuation: 80 dB
Fp = Fc-TW/2;
Fst= Fc+TW/2;
LowpassDesign = fdesign.lowpass(Fp,Fst,Ap,Ast,Fs);

楕円フィルターは、この仕様を満たす最小次数のすべての IIR フィルターのうちで最低の次数の IIR フィルターを実現します (最適ミニマックス解)。典型的な楕円設計は、2 次セクションをもつ直接 II 型双二次構造体を以下のように実装できます。

IIRFilt = design(LowpassDesign,'ellip','SystemObject',true)
IIRFilt = 

  dsp.BiquadFilter with properties:

                   Structure: 'Direct form II'
             SOSMatrixSource: 'Property'
                   SOSMatrix: [8x6 double]
                 ScaleValues: [9x1 double]
           InitialConditions: 0
    OptimizeUnityScaleValues: 1

  Use get to show all properties

このフィルターは、32 MPIS を必要とします。

cost(IIRFilt)
ans = 

                  NumCoefficients: 32
                        NumStates: 16
    MultiplicationsPerInputSample: 32
          AdditionsPerInputSample: 32

信号のバンド幅を低減している場合は、ほとんどすべての場合、計算コストを低減するためにサンプルレートも減少しなければなりません。このフィルターは、阻止帯域周波数を 1/M (M は間引き係数を示す) に設定しなければならない従来的な手法ではなく、ナイキスト フィルターが間引きセットに対して使用された場合、1/M でカットオフ周波数を設定する手法を使用します。これによって、エイリアシングが導入できるようになります。ただし、このエイリアシングは、通常でも信号が歪曲されている領域である、フィルターの遷移領域のみで発生します。

M = (Fs/2)/Fc;
NyquistDecimDesign = fdesign.decimator(M,'Nyquist');
setspecs(NyquistDecimDesign,M,TW,Ast,Fs);
MultistageFIRDecim = design(NyquistDecimDesign,'multistage',...
                  'HalfbandDesignMethod','equiripple','SystemObject',true)
MultistageFIRDecim = 

  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRDecimator]
    Stage2: [1x1 dsp.FIRDecimator]
    Stage3: [1x1 dsp.FIRDecimator]
    Stage4: [1x1 dsp.FIRDecimator]

効率的な FIR を設計するための方法として、マルチレート多段手法を使用する方法があります。この設計では、カスケード状の 4 つの FIR ハーフバンド フィルターが得られます。ハーフバンド フィルターは、係数が 1 つおきに 0 となるため、非常に効率的なフィルターです。

cost(MultistageFIRDecim)
ans = 

                  NumCoefficients: 314
                        NumStates: 612
    MultiplicationsPerInputSample: 23.8125
          AdditionsPerInputSample: 22.8750

この方法の計算コストは、直接型 II、2 次セクション型の IIR 楕円フィルターの計算コストよりも低くなります。これは、典型的な楕円 IIR 設計では平均 32 MPIS が必要となるのに対し、この方法では平均 23.8125 MPIS のみが必要となるためです。

"最新の" IIR 設計では、FIR フィルターで使用できる同様の手法を使用して、非常に効率の高い設計を得られます。

CoupledAPFilt = design(LowpassDesign,'ellip',...
                'FilterStructure','cascadeallpass','SystemObject',true)
CoupledAPFilt = 

  dsp.CoupledAllpassFilter with properties:

               Structure: 'Minimum multiplier'
         PureDelayBranch: 0
    AllpassCoefficients1: {4x1 cell}
    AllpassCoefficients2: {5x1 cell}
                   Gain1: '1'
                   Gain2: '1'

ポリフェーズ楕円実装は、2 つのオールパス IIR サブフィルターで構成されています。この設計は、マルチレート手法を利用していることに注意してください。

cost(CoupledAPFilt)
ans = 

                  NumCoefficients: 18
                        NumStates: 34
    MultiplicationsPerInputSample: 18
          AdditionsPerInputSample: 35

この構造体のコストは、18 MPIS のみです。この構造体はシングルレートですが、コストは、多段マルチレートの FIR フィルターより低くなります。

2 進ハーフバンド設計

フィルターの指定済みカットオフ周波数が 2 のべき乗の逆数であるため、前述の FIR の場合のように IIR ハーフバンド フィルターに基づいたマルチレート多段手法を使用できます。

MultistageIIRDecim = design(NyquistDecimDesign,'multistage',...
                            'HalfbandDesignMethod','ellip')
 
MultistageIIRDecim =
 
     FilterStructure: Cascade
            Stage(1): IIR Polyphase Decimator
            Stage(2): IIR Polyphase Decimator
            Stage(3): IIR Polyphase Decimator
            Stage(4): IIR Polyphase Decimator
    PersistentMemory: false
                           

この最新の設計では、カスケード状の 4 つの IIR ハーフバンド フィルターが得られます。

cost(MultistageIIRDecim)
ans = 

Number of Multipliers            : 17 
Number of Adders                 : 34 
Number of States                 : 25 
Multiplications per Input Sample : 2.5
Additions per Input Sample       : 5  

マルチレート多段設計では、2.5 MPIS という信じられないほど低いコストが得られます。32 MPIS を必要とする典型的な最適楕円設計を基にして、まず、カスケード オールパス サブフィルターのシングルレートの組み合わせを使用することで計算コストを 18 MPIS まで低減できました。さらに、マルチレート ハーフバンド IIR フィルターの利点を全面的に活用することで 2.5 MPIS まで低減することに成功しました。

いずれも仕様を満たしている、FIR および IIR マルチレート多段フィルターの振幅応答を重ねた場合、2 つのフィルターは非常によく似ていることがわかります。

fvFig = fvtool(MultistageFIRDecim,MultistageIIRDecim,'Color','white');
legend(fvFig, 'Multirate/Multistage FIR Polyphase', ...
    'Multirate/Multistage IIR Polyphase')
fvtool(MultistageFIRDecim,MultistageIIRDecim,'Color','white');
title('Passband Magnitude Response (dB)')
axis([0 0.325 -0.0016 0.0016])

詳細な検査では、IIR フィルターの通過帯域リップルが FIR フィルターの通過帯域リップルとの比較で非常に優れていることが示されます。したがって、計算コストでの節約によって、振幅応答の劣化が発生しないことがわかります。

準線形位相ハーフバンドおよび 2 進ハーフバンドの設計

各 IIR ハーフバンド フィルターの実装に使用される構造体を変更すると、IIR フィルターを使用して線形位相設計に非常に類似した設計を得ることができます。これは、位相上での制約 (設計内での自由度の減少) のために計算コストを多少増加することで得られます。

NyquistDecimDesign = fdesign.decimator(8,'Nyquist',8,300,80,9.6e3);
FIRLinearPhaseFilt = design(NyquistDecimDesign,'multistage',...
                  'HalfbandDesignMethod','equiripple','SystemObject',true);
IIRLinearPhaseFilt = design(NyquistDecimDesign,'multistage',...
                  'HalfbandDesignMethod','iirlinphase');

fvFig = fvtool(FIRLinearPhaseFilt,IIRLinearPhaseFilt,'Color','white',...
             'Analysis','grpdelay');
axis([0 0.6 85 125])
title('Passband Group delay')
legend(fvFig, 'Linear-Phase FIR', 'Quasi-Linear Phase IIR')

これらの設計では、非常に良好な位相特性を得られるとともに、同等の真の線形位相 FIR ハーフバンド設計より効果的です。

cost(FIRLinearPhaseFilt)
ans = 

                  NumCoefficients: 43
                        NumStates: 74
    MultiplicationsPerInputSample: 9.8750
          AdditionsPerInputSample: 9

cost(IIRLinearPhaseFilt)
ans = 

Number of Multipliers            : 16  
Number of Adders                 : 32  
Number of States                 : 38  
Multiplications per Input Sample : 3.75
Additions per Input Sample       : 7.5 

固定小数点のロバスト性

ポリフェーズ 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)
HilbertIIRFilt = 

  dsp.CoupledAllpassFilter with properties:

           Structure: 'Wave Digital Filter'
     PureDelayBranch: 1
    WDFCoefficients2: {6x1 cell}
               Delay: 16
               Gain1: '1'
               Gain2: '0+1i'


ans = 

                  NumCoefficients: 10
                        NumStates: 33
    MultiplicationsPerInputSample: 10
          AdditionsPerInputSample: 25

波形デジタル フィルターは、極が単位円に近い時にも非常にロバスト性が高いことが証明されています。これらのフィルターは、本質的に安定性が高く、丸めのノイズ特性感度が低く、また、リミット サイクルがないという特長があります。当社の IIR ヒルベルト フィルターを固定小数点表現に変換するには、realizemdl コマンドおよび Fixed-Point Tool ツールを使用して、以下のように Simulink モデルの浮動小数点を固定小数点に変換します。

realizemdl(HilbertIIRFilt)

まとめ

IIR フィルターは、通常、同等の FIR と比較した場合に、特定の仕様を満足するために必要となる係数が大幅に少ないために非常に効率がよいと見なされてきました。

マルチレート/ポリフェーズ手法を使用する最新の FIR フィルター設計ツールでは、効果を量子化する良好な感度があり、固定小数点が実装されるときの安定性およびリミット サイクルの問題のない線形位相応答を作成できます。これによって IIR と FIR の効率の差は埋められました。

ただし、IIR ポリフェーズ フィルターは、FIR フィルターにあるほとんどの利点を備えながら、非常に少数の乗数の実装しか必要としないという利点があります。

この情報は役に立ちましたか?