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

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

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

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

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

FIRLPNORM の構文

FIRLPNORM の構文は IIRLPNORM と似ていますが (詳細は、「最小 p ノルム最適 IIR フィルターの設計」の例を参照)、分母の次数は指定しません。

この関数は、最小 P の最適 FIR フィルターを設計します。しかしながら、フィルターは線形位相をもつようには制約されません (ただし、線形位相は一般的に適切であると見なされています)。つまり、インパルス応答には特別な対称プロパティはありません。

しかし、線形位相制約によって、さらに一般的な非線形位相設計よりも大きな次数をもつフィルターが設計されます (ただし一部のハードウェア実装では、係数の対称性により、線形位相フィルターの実装時に乗数の数を半分に減らすことができます)。たとえば、以下の FIRLPNORM 設計を考えます。

N = 30;
F = [0 0.3 0.45 1];
E = F;
A = [1 1 0 0];
W = [1 1 10 10];
b = firlpnorm(N,F,E,A,W);
h = fvtool(b);
set(h,'MagnitudeDisplay','Magnitude','Color','White');

拡大すると、フィルターの通過帯域ピーク リップルは約 0.008 で、阻止帯域ピークリップルは約 0.000832 であることがわかります。同等の仕様をもつ FIRPM または FIRGR 設計には 37 次のフィルターが必要です。FIRGR では仕様を満たす最小次数の線形位相 FIR がもたらされることを考えると、これは特に有意です。

dev = [0.008 0.000832];
bgr = firgr('minorder',F,A,dev);
orderfirgr = length(b)-1
h = fvtool(b,1,bgr,1);
set(h,'MagnitudeDisplay','Magnitude','Color','White');
legend(h,'FIRLPNORM design','FIRGR design');
orderfirgr =

    30

もう 1 つの方法として、関数 firceqrip を使用することもできます。この関数も線形位相等リップル フィルターを設計しますが、仕様は firgr とは異なる方法で与えられます (詳細は、制約付き等リップル FIR フィルターの設計の例を参照してください)。FIRLPNORM による設計が達成できる通過帯域リップルと阻止帯域リップルを満たす 30 次の線形位相フィルターが必要な場合は、より大きな遷移幅を許容する必要があります。

bceq = firceqrip(30,(F(2)+F(3))/2,dev);
h = fvtool(b,1,bceq,1,'Color','White');
legend(h,'FIRLPNORM design','FIRCEQRIP design');

最小位相設計

もちろん、FIRGR で 'minphase' オプションを指定することで、非線形位相フィルターを設計することもできます。それにより、必要な仕様を満たしながら、線形位相の場合よりも低い次数の FIR フィルターを得ることができます。ただしこの場合でも、結果は最適でない非線形位相フィルターとなります。その理由は、次に示す例で明らかなように、仕様を満たす非線形位相等リップル フィルターに求められるフィルターの次数が最小次数よりも大きくなるためです。

bm = firgr('minorder',F,A,dev,'minphase');
orderfirgrmin = length(bm)-1
h = fvtool(b,1,bm,1,'Color','White');
legend(h,'FIRLPNORM design','FIRGR minimum-phase design');
orderfirgrmin =

    32

FIRLPNORM を使用した最小位相設計

FIRLPNORM では、ゼロが単位円上またはその内部に収まるように制約を課して、最小位相設計を得ることができます。ただしこの制約により、制約のない設計と比較して、通過帯域リップルが大きくなり、阻止帯域の減衰が小さくなります。

bmlp = firlpnorm(30,F,E,A,W,'minphase');
h = fvtool(b,1,bmlp,1,'Color','White');
legend(h,'FIRLPNORM design','FIRLPNORM minimum-phase design');

FIRGR を使用して設計した最小位相フィルターの次数と等しくなるように次数を増加すると、30 次の FIRLPNORM (非最小位相) 設計と 32 次の FIRGR 最小位相設計の両方によって満たされる仕様を満足できることがわかります。

bmlp = firlpnorm(orderfirgrmin,F,E,A,W,'minphase');
h = fvtool(b,1,bm,1,bmlp,1,'Color','White');
legend(h,'FIRLPNORM design',...
    'FIRGR minimum-phase design',...
    'FIRLPNORM minimum-phase design');

p ノルムの変更

IIRLPNORM や IIRLPNORMC と同様に、FIRLPNORM ではフィルターの最適化に使用される p ノルムの仕様を満たすことができます。p ノルムは IIRLPNORM の場合とまったく同じ方法で指定します。つまり、Pinit と Pfinal を要素にもつ 2 要素のベクトルを使用します。Pinit はアルゴリズムによって使用される初期の p ノルムを指定し (収束を補佐するため)、Pfinal はフィルターが最適化される最終的な p ノルムを指定します。

たとえば、上記の仕様に対する最小二乗設計は、以下のようにして求めることができます。

N = 40;
F = [0 0.4 0.45 1];
E = F;
A = [0 0 1 1];
W = [1 1 10 10];
P = [2 2];
bl2 = firlpnorm(N,F,E,A,W,P);
h = fvtool(bl2,1,'Color','White');
legend(h,'FIRLPNORM design')

FIRLS との比較

比較のために、FIRLS を使用して線形位相最小二乗フィルターを設計します。ここでも、同じフィルター次数では、線形位相制約によって阻止帯域の減衰が少なくなり、通過帯域リップルが大きくなります。

W = [1 20];
bls = firls(N,F,A,W);
h = fvtool(bl2,1,bls,1,'Color','White');
legend(h,'FIRLPNORM design','FIRLS design');

他のノルム

等リップル設計は、一連の設計の仕様を満たすために最小次数が必要な場合に役立ちます。最小二乗設計と同じ仕様を満たすには、より高い次数のフィルターが必要です。ただし、より高い次数では、阻止帯域 (通過帯域) のほとんどの部分において、余分な減衰 (より少ないリップル) がもたらされます。実のところ、最小二乗設計では阻止帯域のエネルギーが最小化されます。等リップル設計と最小二乗設計間の妥協は、中間ノルムを使用することで得ることができます。たとえば、同じ仕様をもちながら、次のノルムに対して最適化されたフィルターの設計は次のようになります。2、4、12、256 (ほとんど無限のノルム)。

W = [1 1 10 10];
P4 = [2 4];
bl4 = firlpnorm(N,F,E,A,W,P4);
P12 = [2 12];
bl12 = firlpnorm(N,F,E,A,W,P12);
Pinf = [2 256];
blinf = firlpnorm(N,F,E,A,W,Pinf);
h = fvtool(bl2,1,bl4,1,bl12,1,blinf,1,'Color','White');
legend(h,'P = 2','P = 4','P = 12','P = 256');

等リップル (256 ノルム) の場合の最小の阻止帯域の減衰を満たすには、他の設計の次数を増加する必要があります。

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