Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

besself

ベッセル アナログ フィルターの設計

説明

[b,a] = besself(n,Wo) は、n 次ローパス アナログ ベッセル フィルターの伝達関数係数を返します。ここで、Wo はフィルターの群遅延が近似的に定数になる角周波数です。n の値が大きくなるに従って、定数が Wo を上限としてより良く近似される群遅延が生成されます。関数 besself は、デジタル ベッセル フィルターの設計をサポートしません。

[b,a] = besself(n,Wo,ftype)ftype の値および Wo の要素数に応じてローパス、ハイパス、バンドパスまたはバンドストップのアナログ ベッセル フィルターを設計します。得られるバンドパスおよびバンドストップの設計は次数が 2n です。

[z,p,k] = besself(___) はローパス、ハイパス、バンドパス、または、バンドストップのアナログ ベッセル フィルターを設計し、その零点、極およびゲインを返します。この構文には、前の構文の任意の入力引数を含めることができます。

[A,B,C,D] = besself(___) はローパス、ハイパス、バンドパスまたはバンドストップのアナログ ベッセル フィルターを設計し、その状態空間表現を指定する行列を返します。

すべて折りたたむ

最大 104 ラジアン/秒の定数近似群遅延を持つ 5 次のアナログ ローパス ベッセル フィルターを設計します。freqs を使用してフィルターの振幅応答および位相応答をプロットします。

[b,a] = besself(5,10000);
freqs(b,a)

Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line.

フィルターの群遅延応答を、アンラップされた位相応答の微分として計算します。カットオフ周波数までの範囲で近似的に定数であることを検証するために群遅延をプロットします。

[h,w] = freqs(b,a,1000);
grpdel = diff(unwrap(angle(h)))./diff(w);

clf
semilogx(w(2:end),grpdel)
xlabel('Frequency (rad/s)')
ylabel('Group delay (s)')

Figure contains an axes object. The axes object contains an object of type line.

300 から 500 rad/s までの範囲の通過帯域をもつ 12 次のバンドパス ベッセル フィルターを設計します。フィルターの周波数応答を計算します。

[b,a] = besself(6,[300 500],'bandpass');

[h,w] = freqs(b,a);

フィルターの振幅応答および位相応答をプロットします。180360 のジャンプを回避するために位相応答をアンラップし、ラジアンから度に変換します。予想どおり、位相応答は通過帯域全体で線形に近づきます。

subplot(2,1,1)
plot(w,20*log10(abs(h)))
ylabel('Magnitude')
subplot(2,1,2)
plot(w,180*unwrap(angle(h))/pi)
ylabel('Phase (degrees)')
xlabel('Frequency (rad/s)')

Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line.

入力引数

すべて折りたたむ

フィルター次数。整数スカラーで指定します。バンドパスおよびバンドストップの設計では、n がフィルター次数の 1/2 を表します。

データ型: double

カットオフ周波数。スカラーまたは 2 要素ベクトルとして指定されます。カットオフ周波数は、フィルターの群遅延が近似的に定数になる周波数範囲の上限および下限です。カットオフ周波数は必ずラジアン/秒で表示され、任意の正の値をとることができます。

  • Wo がスカラーの場合、besself は、カットオフ周波数 Wo をもつローパス フィルターまたはハイパス フィルターを設計します。

  • Wo が 2 要素ベクトル [w1 w2] (ここで、w1 < w2) の場合、besself は低域カットオフ周波数 w1 および高域カットオフ周波数 w2 をもつバンドパス フィルターまたはバンドストップ フィルターを設計します。

データ型: double

フィルター タイプ。以下で指定します。

  • 'low' — カットオフ周波数 Wo をもつローパス フィルター。'low' はスカラー Wo の既定値です。

  • 'high' — カットオフ周波数 Wo をもつハイパス フィルター。

  • 'bandpass'Wo が 2 要素ベクトルの場合、次数 2n のバンドパス フィルター。'bandpass' は、Wo が 2 要素をもつときの既定値です。

  • 'stop'Wo が 2 要素ベクトルの場合、次数 2n のバンドストップ フィルター。

出力引数

すべて折りたたむ

フィルターの伝達関数の係数。ローパス フィルターおよびハイパス フィルターの場合は長さ n + 1 の行ベクトルとして、バンドパス フィルターおよびバンドストップ フィルターの場合は長さ 2n + 1 の行ベクトルとして返されます。ba によるこの伝達関数式は次になります。

H(s)=B(s)A(s)=b(1)sn+b(2)sn1++b(n+1)a(1)sn+a(2)sn1++a(n+1).

データ型: double

フィルターのゼロ、極、ゲイン。長さ n (バンドパス設計とバンドストップ設計の場合は 2n) およびスカラーの 2 つの列ベクトルとして返されます。zp および k によるこの伝達関数式は次になります。

H(s)=k(sz(1))(sz(2))(sz(n))(sp(1))(sp(2))(sp(n)).

データ型: double

フィルターの状態空間表現。行列として返されます。ローパス設計とハイパス設計の場合、m = n で、バンドパス フィルターとバンドストップ フィルターの場合に m = 2n ならば、A は m × m で、B は m × 1、C は 1 × m、D は 1 × 1 となります。

状態空間の行列は状態ベクトル x、入力 u、出力 y を以下の式により表します。

x˙=Ax+Buy=Cx+Du.

データ型: double

アルゴリズム

関数 besself は、アナログ ベッセル フィルターを設計します。このフィルターは、通過帯域全体でほぼ一定の群遅延をもつという特徴をもち、したがってフィルター処理後の信号波形を通過帯域で保持しています。

ローパス ベッセル フィルターの振幅応答は、ローパス バタワース フィルターと同様、単調減少します。バタワース、チェビシェフ、および楕円の各フィルターに比べ、ベッセル フィルターは最も緩やかなロールオフをもち、減衰仕様を満たすために最も高い次数を必要とします。

高次フィルターにおいては、状態空間型が数値的に最も正確であり、零点-極-ゲイン型がこれに続きます。伝達関数係数型は最も精度が劣り、15 次程度の低さのフィルター次数でも数値的な問題が生じる可能性があります。

besself は、以下の 4 つの手順のアルゴリズムを使用します。

  1. 関数besselapを使用して、ローパス アナログ プロトタイプの極、零点、およびゲインを求めます。

  2. 極、零点、およびゲインを状態空間型に変換します。

  3. 必要に応じて、状態空間変換を使ってローパス フィルターを、望ましい周波数制約をもつバンドパス、ハイパス、または、バンドストップのフィルターに変換します。

  4. 必要に応じて、状態空間フィルターを伝達関数、または、零点-極-ゲイン型に逆変換します。

参照

[1] Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York: John Wiley & Sons, 1987.

バージョン履歴

R2006a より前に導入