ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

最小 p ノルム最適 IIR フィルターの設計

この例では、制約なし最小 P 次最適化アルゴリズムを使用する、任意の振幅応答をもつ最適 IIR フィルターの設計方法を示します。

IIRLPNORM の基本

IIRLPNORM アルゴリズムは、以下のように、いくつかの側面で従来的な IIR 設計アルゴリズムとは異なります。

  . The designs are done directly in the Z-domain. No need for bilinear
    transformation.
  . The numerator and denominator order can be different.
  . One can design IIR filters with arbitrary magnitude response in
    addition to the basic lowpass, highpass, bandpass, and bandstop.

ローパス設計

簡単な設計 (ローパス、ハイパスなど) では、通過帯域周波数および阻止帯域周波数を指定しなければなりません。遷移帯域は、アルゴリズムによって don't-care 領域と見なされます。

d = fdesign.lowpass('N,Fp,Fst',8,.4,.5)
 
d =
 
               Response: 'Lowpass' 
          Specification: 'N,Fp,Fst'
            Description: {3x1 cell}
    NormalizedFrequency: true      
            FilterOrder: 8         
                  Fpass: 0.4       
                  Fstop: 0.5       
                                   
hiirlpnorm = design(d,'iirlpnorm','SystemObject',true);

比較のために、以下の楕円フィルター設計を検証します。

d = fdesign.lowpass('N,Fp,Ap,Ast',8,.4,0.0084,66.25);
hellip = design(d, 'ellip','SystemObject',true);
hfvt = fvtool(hiirlpnorm,hellip,'Color','White');
legend(hfvt,'IIRLPNORM design','ELLIP design');

2 つのフィルターの応答は非常によく似ています。通過帯域にズームすると、その点が強調されます。ただし、IIRLPNORM を使用して設計されたフィルターの振幅は、0 dB 未満となるようには制約されません。

axis([0 .44 -.0092 .0052])

異なる分子次数と分母次数

IIRLPNORM では、楕円フィルターと非常によく似た設計を得られるだけでなく、高度な柔軟性を得られます。たとえば、分母の次数を以下のように変更した場合を見てみます。

d = fdesign.lowpass('Nb,Na,Fp,Fst',8,6,.4,.5)
 
d =
 
               Response: 'Lowpass'     
          Specification: 'Nb,Na,Fp,Fst'
            Description: {4x1 cell}    
    NormalizedFrequency: true          
               NumOrder: 8             
               DenOrder: 6             
                  Fpass: 0.4           
                  Fstop: 0.5           
                                       
hiirlpnorm = design(d,'iirlpnorm','SystemObject',true);

楕円フィルター (およびその他の従来的な IIR 設計) を使用する場合、分子と分母の次数を両方変更しなければなりません。

d = fdesign.lowpass('N,Fp,Ap,Ast',6,.4,0.0084,58.36);
hellip = design(d, 'ellip','SystemObject',true);
hfvt = fvtool(hiirlpnorm,hellip,'Color','White');
legend(hfvt,'IIRLPNORM design','ELLIP design');

楕円設計 (緑色で表示) の遷移幅が明らかに広がったことがわかります。

設計の重み付け

等リップル設計または最小二乗設計と同様に、最適化基準に重み付けして設計を近似するように変更できます。ただし、等リップル設計と異なる点は、その高度な柔軟性のため、各周波数帯域ではなく各周波数点に対して異なる重みを付けられる点です。

以下の 2 つのハイパス フィルターを検討してください。

d = fdesign.highpass('Nb,Na,Fst,Fp',6,4,.6,.7)
 
d =
 
               Response: 'Highpass'    
          Specification: 'Nb,Na,Fst,Fp'
            Description: {4x1 cell}    
    NormalizedFrequency: true          
               NumOrder: 6             
               DenOrder: 4             
                  Fstop: 0.6           
                  Fpass: 0.7           
                                       
h1 = design(d,'iirlpnorm','Wpass',1,'Wstop',10,'SystemObject',true);
h2 = design(d,'iirlpnorm','Wpass',1,'Wstop',[100 10],'SystemObject',true);
hfvt = fvtool(h1,h2,'Color','White');
legend(hfvt,'Same weight for entire band',...
    'Different weights in stopband');

最初の設計は、帯域ごとに同じ重み (阻止帯域で 10、通過帯域で 1) を使用しています。2 番目の設計では、周波数点ごとに異なる重みが使用されています。これによって、一部のアプリケーションで必要となる傾斜阻止帯域を簡単に得られます。阻止帯域の部分での追加の減衰は、通過帯域リップルと遷移幅が大きくなることによって発生します。

p ノルム

簡潔に説明すると、最適な設計は、実際に設計されたフィルターと理想的なフィルターの間の p ノルムでの誤差を最小化することによって得られます。ノルムに異なる値がある場合、結果として異なる設計が得られます。P のノルムを指定する場合、実際には、アルゴリズムが使用するノルムの開始値である 'InitNorm' と設計を最適化する目標値となる最終 (実際) 値である 'Norm' という 2 つの値を指定します。低い開始値を使用して最適化を開始すると、アルゴリズムが収束しやすくなります。

既定の設定では、アルゴリズムは、2 ノルム的に設計の最適化を開始しますが、最終的には 128 ノルム的に最適化します。128 ノルムを使用すると、無限大ノルムの良好な近似が得られます。したがって、設計は、等リップルになる傾向があります。最小二乗設計には、ノルムを 2 に設定しなければなりません。たとえば、以下のローパス フィルターを検討してください。

d = fdesign.lowpass('Nb,Na,Fp,Fst',10,7,.25,.35);
design(d,'iirlpnorm','Norm',2,'SystemObject',true);
set(gcf,'Color',[1 1 1]);

任意の整形済み振幅

IIRLPNORM のもう 1 つの重要な機能は、基本的なローパス、ハイパス、バンドパス、およびバンドストップ以外のフィルターを設計できることです。詳細は、「任意の振幅フィルターの設計」の例を参照してください。ここで、いくつかの例を示します。

レイリー フェージング チャネル

以下に、レイリー フェージング無線通信チャネルをシミュレーションする場合のノイズ整形のためのフィルターを示します。

F1 = 0:0.01:0.4;
A1 = 1.0 ./ (1 - (F1./0.42).^2).^0.25;
F2 = [0.45 1];
A2 = [0 0];
d = fdesign.arbmag('Nb,Na,B,F,A',4,6,2,F1,A1,F2,A2);
design(d,'iirlpnorm','SystemObject',true);
set(gcf,'Color',[1 1 1]);

ルビジウム 87 原子蒸気の光吸収

以下の設計は、特定のガス内での光吸収のモデルを作成します。結果として得られるフィルターは、線形位相に非常に近似したフィルターとなります。

Nb = 12; Na = 10;
F = linspace(0,1,100);
As = ones(1,100)-F*0.2;
Absorb = [ones(1,30),(1-0.6*bohmanwin(10))',...
    ones(1,5), (1-0.5*bohmanwin(8))',ones(1,47)];
A = As.*Absorb;
d = fdesign.arbmag('Nb,Na,F,A',Nb,Na,F,A);
W = [ones(1,30) ones(1,10)*.2 ones(1,60)];
design(d, 'iirlpnorm', 'Weights', W, 'Norm', 2, 'DensityFactor', 30,...
    'SystemObject',true);
set(gcf,'Color','white')

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