アナログの IIR ローパス フィルターの比較
カットオフ周波数が 2 GHz である 5 次のアナログ バタワース ローパス フィルターを設計します。 倍にして周波数を秒あたりのラジアン単位に変換します。4096 点でのフィルターの周波数応答を計算します。
n = 5;
wc = 2*pi*2e9;
w = 2*pi*1e9*logspace(-2,1,4096)';
[zb,pb,kb] = butter(n,wc,"s");
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,w);
gdb = -diff(unwrap(angle(hb)))./diff(wb);エッジ周波数が同じで、通過帯域リップルが 3 dB である 5 次のチェビシェフ I 型フィルターを設計します。その周波数応答を計算します。
[z1,p1,k1] = cheby1(n,3,wc,"s");
[b1,a1] = zp2tf(z1,p1,k1);
[h1,w1] = freqs(b1,a1,w);
gd1 = -diff(unwrap(angle(h1)))./diff(w1);エッジ周波数が同じで、阻止帯域の減衰量が 30 dB である 5 次のチェビシェフ II 型フィルターを設計します。その周波数応答を計算します。
[z2,p2,k2] = cheby2(n,30,wc,"s");
[b2,a2] = zp2tf(z2,p2,k2);
[h2,w2] = freqs(b2,a2,w);
gd2 = -diff(unwrap(angle(h2)))./diff(w2);エッジ周波数が同じで、通過帯域リップルが 3 dB、阻止帯域の減衰量が 30 dB である 5 次の楕円フィルターを設計します。その周波数応答を計算します。
[ze,pe,ke] = ellip(n,3,30,wc,"s");
[be,ae] = zp2tf(ze,pe,ke);
[he,we] = freqs(be,ae,w);
gde = -diff(unwrap(angle(he)))./diff(we);エッジ周波数が同じである 5 次のベッセル フィルターを設計します。その周波数応答を計算します。
[zf,pf,kf] = besself(n,wc); [bf,af] = zp2tf(zf,pf,kf); [hf,wf] = freqs(bf,af,w); gdf = -diff(unwrap(angle(hf)))./diff(wf);
減衰をデシベルでプロットします。周波数をギガヘルツで表します。フィルターを比較します。
fGHz = [wb w1 w2 we wf]/(2e9*pi); plot(fGHz,mag2db(abs([hb h1 h2 he hf]))) axis([0 5 -45 5]) grid on xlabel("Frequency (GHz)") ylabel("Attenuation (dB)") legend(["butter" "cheby1" "cheby2" "ellip" "besself"])

サンプル単位で群遅延をプロットします。周波数をギガヘルツで、群遅延をナノ秒で表します。フィルターを比較します。
gdns = [gdb gd1 gd2 gde gdf]*1e9; gdns(gdns<0) = NaN; loglog(fGHz(2:end,:),gdns) grid on xlabel("Frequency (GHz)") ylabel("Group delay (ns)") legend(["butter" "cheby1" "cheby2" "ellip" "besself"])

バタワース フィルターおよびチェビシェフ II 型フィルターには平坦な通過帯域と広い遷移帯域幅があります。チェビシェフ I 型フィルターおよび楕円フィルターは速くロールオフしますが、通過帯域リップルがあります。チェビシェフ II 型設計関数に対する周波数入力は、通過帯域の末尾ではなく阻止帯域の始点を設定します。ベッセル フィルターは、通過帯域に沿って定数近似群遅延をもちます。