Main Content

FIR ナイキスト (L 次帯域) フィルター設計

この例では、ローパス FIR ナイキスト フィルターの設計法を示します。また、これらのフィルターを、レイズド コサイン フィルターおよびルート レイズド コサイン フィルターと比較します。これらのフィルターは、デジタル伝送システムのパルス整形に幅広く使用されます。また、内挿/間引きやフィルター バンクにも使用されます。

振幅応答の比較

このプロットは、等リップル ナイキスト フィルターとレイズド コサイン フィルターの振幅応答を示しています。どちらのフィルターも 60 の次数と 0.5 のロールオフ ファクターをもっています。等リップルフィルターには最適等リップル阻止帯域があるので、同じフィルター次数と遷移幅においてより大きな阻止帯域の減衰をもっています。レイズド コサイン フィルターは、解析的インパルス応答を切り捨てることで取得され、どのような見方をしても最適とは言えません。

NBand = 4;
N = 60;           % Filter order
R = 0.5;          % Rolloff factor
TW = R/(NBand/2); % Transition Bandwidth 
f1 = fdesign.nyquist(NBand,'N,TW',N,TW);
eq = design(f1,'equiripple',Zerophase=true,SystemObject=true);
coeffs = rcosdesign(R,N/NBand,NBand,'normal');
coeffs = coeffs/max(abs(coeffs))/NBand;
rc     = dsp.FIRFilter(Numerator=coeffs);
fvt = fvtool(eq,rc);
legend(fvt,'Equiripple NYQUIST design','Raised Cosine design');

Figure Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Equiripple NYQUIST design, Raised Cosine design.

実際に、この例で同様の減衰を得るには、レイズド コサイン設計の次数を約 1400 まで増加しなければなりません。

インパルス応答の比較

ここではインパルス応答を比較します。どちらの場合のインパルス応答も、4 番目のサンプルごとにゼロになることに注目してください (中央のサンプルを除く)。ナイキスト フィルターは、L 次帯域フィルターとも呼ばれます。カットオフ周波数が πL で、インパルス応答が L 番目のサンプルごとにゼロになるためです。ここでは 4 次帯域フィルターを示しています。

f1.FilterOrder = 38;
eq1 = design(f1,'equiripple',Zerophase=true,SystemObject=true);
coeffs = rcosdesign(R,f1.FilterOrder/NBand,NBand,'normal');
coeffs = coeffs/max(abs(coeffs))/NBand;
rc1 = dsp.FIRFilter(Numerator=coeffs);
fvt = fvtool(eq1,rc1,Analysis='Impulse');
legend(fvt,'Equiripple NYQUIST','Raised Cosine');

Figure Impulse Response contains an axes object. The axes object with title Impulse Response contains 2 objects of type stem. These objects represent Equiripple NYQUIST, Raised Cosine.

勾配のある阻止帯域をもつナイキスト フィルター

等リップル設計を使用すると、フィルターの阻止帯域の勾配を制御できます。たとえば、次の設計の減衰の勾配は、0、20、および 40 dB/(ラジアン/サンプル) になります。

f1.FilterOrder = 52;
f1.Band = 8;
f1.TransitionWidth = .05;
eq1 = design(f1,'equiripple', SystemObject=true);
eq2 = design(f1,'equiripple', StopbandShape='linear', StopbandDecay=20,SystemObject=true);
eq3 = design(f1,'equiripple', StopbandShape='linear', StopbandDecay=40,SystemObject=true);
fvt = fvtool(eq1,eq2,eq3);
legend(fvt,'Slope=0', 'Slope=20', 'Slope=40')

Figure Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 4 objects of type line. These objects represent Slope=0, Slope=20, Slope=40.

最小位相設計

全体的なナイキスト フィルターの最小位相スペクトル因子 (周波数領域内の平方根) を設計できます。このスペクトル因子は、整合フィルター アプリケーションにおけるルート レイズド コサイン フィルターと同じように使用できます。フィルターの平方根は送信側に配置され、他方の平方根は受信側に配置されます。

f1.FilterOrder = 30;
f1.Band = NBand;
f1.TransitionWidth = TW;
eq1 = design(f1,'equiripple', Minphase=true, SystemObject=true);
coeffs = rcosdesign(R,N/NBand,NBand);
coeffs = coeffs / max(coeffs) * (-1/(pi*NBand) * (pi*(R-1) - 4*R));
srrc   = dsp.FIRFilter(Numerator=coeffs);
fvt = fvtool(eq1,srrc);
legend(fvt,'Minimum-phase equiripple design',...
    'Square-root raised-cosine design');

Figure Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Minimum-phase equiripple design, Square-root raised-cosine design.

ロールオフ ファクターの減少

レイズド コサイン フィルターの応答は、ロールオフ ファクターが減少するにつれて改善されます (ここではロールオフ = 0.2 の場合が示されています)。これは、インパルス応答の切り捨てに使用される矩形ウィンドウの周波数応答のメインローブが狭いためです。

f1.FilterOrder = N;
f1.TransitionWidth = .1;
eq1 = design(f1,'equiripple', Zerophase=true, SystemObject=true);
R = 0.2;
coeffs = rcosdesign(R,N/NBand,NBand,'normal');
coeffs = coeffs/max(abs(coeffs))/NBand;
rc1   = dsp.FIRFilter(Numerator=coeffs);
fvt = fvtool(eq1,rc1);
legend(fvt,'NYQUIST equiripple design','Raised Cosine design');

Figure Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent NYQUIST equiripple design, Raised Cosine design.

ウィンドウを適用したインパルス応答ナイキスト設計

ナイキスト フィルターは、切り捨てられ、ウィンドウが適用されたインパルス応答方法を使用して設計することもできます。これは、レイズド コサイン設計に代わるもう 1 つの設計です。たとえば、カイザー ウィンドウ方法を使用して、次の初期仕様を満たすフィルターを設計できます。

f1.TransitionWidth = TW;
kaiserFilt = design(f1, 'kaiserwin', SystemObject=true);

カイザー ウィンドウ設計が仕様を満たすには、等リップル設計と同じ次数 (60) が必要です。これに反して、阻止帯域の仕様を満たすには、1,400 もの次数のレイズド コサイン フィルターが必要でした。

fvt = fvtool(eq,rc,kaiserFilt);
legend(fvt,'Equiripple design', 'Raised Cosine design', 'Kaiser window design');

Figure Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 3 objects of type line. These objects represent Equiripple design, Raised Cosine design, Kaiser window design.

内挿用ナイキスト フィルター

デジタル データ伝送に加えて、ナイキスト フィルターは内挿の目的にも適しています。その理由は、前述のように、L サンプルごとにゼロのサンプルが得られるためです (中央のサンプル除く)。これには 2 つの利点があります。これらの利点はポリフェーズ表現を見ると明らかになります。

fm = fdesign.interpolator(4,'nyquist');
kaiserFilt = design(fm,'kaiserwin',SystemObject=true);
fvt = fvtool(kaiserFilt);
fvt.PolyphaseView = 'on';

Figure Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 4 objects of type line.

ポリフェーズ サブフィルター No. 4 はオールパス フィルターで、実際は純粋な遅延になります。それを確認するには、FVTool でインパルス応答を選択するか、FVTool でフィルター係数を表示します。ポリフェーズ フィルターの純粋な遅延分岐には、以下の特性があります。

  • その係数は、そのポリフェーズ分岐の効率的な実装につながる乗数を除き、すべてゼロになる。

  • 内挿フィルターは、フィルターが理想的でなくても入力サンプル値を保持する、すなわち y(Lk)=u(k) となる。

関連するトピック