ドキュメンテーション

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

間引き/内挿の多段設計

この例では、多段間引きおよび多段内挿の設計法を示します。「遷移帯域が狭い FIR フィルターの効率的な設計」の例では、ローパス フィルターのシングルレート設計に IFIR と多段のアプローチを適用する方法を示しました。この手法は、多段間引きや多段内挿の設計にも応用できます。IFIR アプローチを使用すると、2 ステージの間引き/内挿になります。多段アプローチでは、ステージ数を自動的に最適化するか、手動で制御することができます。

信号のサンプルレートの減少

間引きを使用すると、信号のサンプルレートを減少すると同時に、それに比例してバンド幅を減少することができます。たとえば、レートを 8 分の 1 に減少した場合に、バンド幅を同様に減少させるローパス フィルターの一般的な仕様を以下に示します。

Fpass = 0.11;
Fstop = 0.12;
Apass = 0.02;  % 0.02 dB peak-to-peak ripple
Astop = 60;    % 60 dB minimum attenuation
M     = 8;     % Decimation factor of 8
Hfd   = fdesign.decimator(M,'lowpass',Fpass,Fstop,Apass,Astop);

これらの仕様の単一ステージ等リップル設計には、平均 649/8 = 81.125 MPIS (入力サンプルあたりの乗数) が必要になります。

Hm = design(Hfd,'equiripple','SystemObject',true);
cost(Hm)
ans = 

                  NumCoefficients: 650
                        NumStates: 648
    MultiplicationsPerInputSample: 81.2500
          AdditionsPerInputSample: 81.1250

前述のように、IFIR 設計では 2 ステージの実装になります。この場合には、27/4+172/8 = 28.25 MPIS のみが必要になることに注意してください。

Hm_ifir = design(Hfd,'ifir','SystemObject',true);
cost(Hm_ifir)
ans = 

                  NumCoefficients: 199
                        NumStates: 194
    MultiplicationsPerInputSample: 28.2500
          AdditionsPerInputSample: 27.8750

多段設計では、3 ステージの設計を実装するときに、コストがほぼ等しくなります。この設計に必要になる MPIS 数は 9/2+14/4+172/8 = 29.5 です。

Hm_multi = design(Hfd,'multistage','SystemObject',true);
cost(Hm_multi)
ans = 

                  NumCoefficients: 195
                        NumStates: 190
    MultiplicationsPerInputSample: 29.5000
          AdditionsPerInputSample: 28.6250

効率を改善するための設計の調整

IFIR 設計には、設計効率をさらに改善するための同時最適化オプションがあります (一部のケースでは、収束しない可能性があります)。この設計は時間がかかる可能性があることに注意してください。MPIS 数は 13/4+163/8 = 23.625 に低減されます。

Hm_ifir_jo = design(Hfd,'ifir','JointOptimization',true,...
                   'SystemObject',true);
cost(Hm_ifir_jo)
ans = 

                  NumCoefficients: 176
                        NumStates: 174
    MultiplicationsPerInputSample: 23.6250
          AdditionsPerInputSample: 23.2500

使用する間引きに間引き係数 2 が含まれることを考えると、多段設計を改善しやすくなります。3 ステージ中の 2 つは、ハーフバンド フィルターと置き換えることができ、ハーフバンド フィルターの場合は係数の約半分のみが非ゼロです。MPIS 数は 27.25 に低減されます。

Hm_multi_hb = design(Hfd,'multistage','UseHalfbands',true,...
                    'SystemObject',true);
cost(Hm_multi_hb)
ans = 

                  NumCoefficients: 188
                        NumStates: 194
    MultiplicationsPerInputSample: 27.2500
          AdditionsPerInputSample: 26.3750

効率を改善するためのナイキスト フィルターの使用

ファクター M で間引きを行う場合、計算上ナイキスト設計 (この場合帯域も M になります) を使用することが有益です。この例では、M = 8 を使用します。

TW      = 0.01; % Transition width is the same as in previous design
Astop   = 60;   % 60 dB minimum attenuation
M       = 8;    % Decimation factor of 8
Hfd_nyq = fdesign.decimator(M,'nyquist',M,TW,Astop);

カイザー ウィンドウを使用する単一ステージ設計は、フィルター長 727 になります。しかし、これがナイキスト フィルターであることを考えると、M 係数中の 1 つはゼロであるため、実際の乗数の数は 637 で、MPIS 数は 79.625 で、幅と阻止帯域の減衰が同じ単一ステージ等リップル設計よりも少なくなります。さらに、通過帯域リップルが小さくなります。

Hm_nyq = design(Hfd_nyq,'kaiserwin','SystemObject',true);
measure(Hm)
measure(Hm_nyq)
ans = 

Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.11                      
3-dB Point       : 0.11379                   
6-dB Point       : 0.11496                   
Stopband Edge    : 0.12                      
Passband Ripple  : 0.019632 dB               
Stopband Atten.  : 60.0576 dB                
Transition Width : 0.01                      
 

ans = 

Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.12                      
3-dB Point       : 0.12384                   
6-dB Point       : 0.125                     
Stopband Edge    : 0.13                      
Passband Ripple  : 0.01648 dB                
Stopband Atten.  : 60.1578 dB                
Transition Width : 0.01                      
 
cost(Hm_nyq)
ans = 

                  NumCoefficients: 637
                        NumStates: 720
    MultiplicationsPerInputSample: 79.6250
          AdditionsPerInputSample: 79.5000

ハーフバンド フィルターは、帯域が 2 と等価の場合のナイキスト フィルターの特殊なケースです。8 で間引きする 8 番目の帯域のナイキスト フィルターを取得する 1 つの方法は、それぞれ 2 で間引きする 3 つのハーフバンドをカスケード接続することです。多段設計は、コストが最低である場合にこれを自動的に実行します。係数の約半数のみが非ゼロであることを考えると、このケースに必要な MPIS 数はわずか 15.375 で、ここで試したすべての設計の中でも大幅に低くなります。

Hm_multi_nyq = design(Hfd_nyq,'multistage','SystemObject',true);
cost(Hm_multi_nyq)
ans = 

                  NumCoefficients: 99
                        NumStates: 186
    MultiplicationsPerInputSample: 15.3750
          AdditionsPerInputSample: 14.5000

hfvt = fvtool(Hm_nyq,Hm_multi_nyq, 'Color', 'white');
legend(hfvt,'Single-stage Nyquist design','Multistage Nyquist design',...
    'Location','NorthEast')

内挿

上述のケースは、内挿設計にも同じように応用することができます。以下に例を示します。

Fpass = 0.11;
Fstop = 0.12;
Apass = 0.02;  % 0.02 dB peak-to-peak ripple
Astop = 60;    % 60 dB minimum attenuation
L     = 8;     % Interpolation factor of 8
Hfi   = fdesign.interpolator(L,'lowpass',Fpass,Fstop,Apass,Astop);

ハーフバンドを使用する多段設計は、前述の構文で計算できます。

Hmi = design(Hfi,'multistage','UseHalfbands',true,'SystemObject',true);
measure(Hmi)
hfvt = fvtool(Hmi);
hfvt.Legend = 'off';
ans = 

Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.11                      
3-dB Point       : 0.114                     
6-dB Point       : 0.11515                   
Stopband Edge    : 0.12                      
Passband Ripple  : 0.012937 dB               
Stopband Atten.  : 60.053 dB                 
Transition Width : 0.01                      
 

すべての内挿と同様に、通過帯域のゲイン (線形単位) は内挿係数と等価です。通過帯域と阻止帯域の最小距離 (dB 単位) は Astop に指定されているように約 60dB です。

まとめ

間引き/内挿の実装時に、多段手法を使用することで、計算上のコストを大幅に削減することができます。特に多段ナイキスト フィルターを使用すると、極めて効率がよくなります。

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