Signal Processing Toolbox | ![]() ![]() |
Butterworthアナログおよびディジタルフィルタの設計
表示
[b,a]=
butter(n,Wn) [b,a]=
butter(n,Wn,'ftype
') [b,a]=
butter(n,Wn,'s') [b,a]=
butter(n,Wn,'ftype
','s') [z,p,k]=
butter(...) [A,B,C,D]=
butter(...)
詳細
butter
は、ディジタルおよびアナログのローパス、バンドパス、ハイパス、およびバンドストップButterworthフィルタを設計します。Butterworthフィルタは、通過帯域で、ゲイン応答が可能な限り平坦となり、全体的に単調となる特徴があります。
Butterworthフィルタは、通過帯域および遮断帯域で平坦になるために、急峻なロールオフにはなりません。そのため、Butterworthフィルタの平坦さが必要でない限り、楕円またはChebyshevフィルタの方が一般に、低いフィルタ次数で、より急峻なロールオフ特性を実現することができます。
ディジタル領域
[b,a] = butter(n,Wn)
は、カットオフ周波数Wn
をもつn
次のローパスディジタルButterworthフィルタを設計します。これは、フィルタ係数を長さ(n+1)
の行ベクトルb
およびa
に、zの次数の降順に出力します。
カットオフ周波数は、フィルタのゲイン応答がsqrt(1/2)
となる周波数です。butter
では、カットオフ周波数Wn
は、0と1の間の数でなければなりません。ここで、1はNyquist周波数、ラジアン/サンプルに対応します。
Wn
が2要素ベクトルWn
= [w1 w2]
の場合、butter
は通過帯域w1 <
< w2
をもつ2*n
次のディジタルバンドパスフィルタを出力します。
[b,a] = butter(n,Wn,'
は、ハイパスまたはバンドストップフィルタを設計します。ここで、ftype
')
'ftype'
には、つぎの文字列を設定できます。
'high'
:カットオフ周波数Wn
をもつハイパスディジタルフィルタ'stop'
:Wn
が2要素ベクトルWn = [w1 w2]
の場合、2*n
次のバンドストップディジタルフィルタで、遮断帯域は、w1
< w2
となります。設定する出力引数の数により、butter
は種々の形式のフィルタを実現します。零点-極-ゲイン型を得るには、つぎのように3つの出力引数を使用します。
[z,p,k] = butter(n,Wn)
または、[z,p,k] = butter(n,Wn,
'ftype
')
は、零点と極を長さn
の列ベクトルz
とp
に、またゲインをスカラk
にそれぞれ出力します。
状態空間型を得るには、つぎのように4つの出力引数を使用します。
[A,B,C,D] = butter(n,Wn)
または、[A,B,C,D] = butter(n,Wn,'
ftype
')
、ここで、A
、B
、C
、およびD
は、
アナログ領域
[b,a] = butter(n,Wn,'s')
は、カットオフ周波数Wn
をもつn
次のローパスアナログButterworthフィルタを設計します。これは、フィルタ係数を長さn + 1
の行ベクトルb
およびa
に、sの次数の降順に出力します。
butter
のカットオフ周波数Wn
は、0より大きくなければなりません。
Wn
が、w1
< w2
である2要素ベクトルの場合には、butter(n,Wn,
's')
は、通過帯域w1
< <
w2
をもつ2*n
次のバンドパスアナログフィルタを出力します。
[b,a] = butter(n,Wn,'
は、ハイパス、または、バンドストップフィルタを設計します。 ftype
','s')
設定する出力引数の数により、butter
は種々の形式のアナログフィルタを実現します。零点-極-ゲイン型を得るには、つぎのように3つの出力引数を使用します。
[z,p,k] = butter(n,Wn,'s')
または、 [z,p,k] = butter(n,Wn,'
ftype
','
s')
は、零点と極を長さn
の列ベクトルz
とp
に、またゲインをスカラk
にそれぞれ出力します。
状態空間型を得るには、つぎのように4つの出力引数を使用します。
[A,B,C,D] = butter(n,Wn,'s')
、または、[A,B,C,D] = butter(n,Wn,'
ftype
','
s')
、ここで、A
、B
、C
、およびD
は、
例題
1000 Hzでサンプリングしたデータに対して、300 Hzのカットオフ周波数をもつ9次のハイパスButterworthフィルタを設計します。
[b,a] =
butter(9,300/500,'high');
freqz(b,a,128,1000)
つぎに、100〜200 Hzの通過帯域をもつ10次のバンドパスButterworthフィルタを設計し、そのインパルス応答、すなわち、単位サンプル応答をプロットします。
n=
5; Wn=
[100 200]/500; [b,a]=
butter(n,Wn); [y,t]=
impz(b,a,101); stem(t,y)
制限
高次フィルタでは、状態空間型が数値的に最も正確であり、ついで、零点-極-ゲイン型が正確です。伝達関数係数型は、最も精度が劣り、15次程度のフィルタ次数でも数値的な問題が生じる可能性があります。
アルゴリズム
butter
は、つぎの5つのステップのアルゴリズムを実行します。
buttap
を使って、ローパスアナログプロトタイプの極、零点、およびゲインを求めます。
butter
は、bilinear
を使って、プリワーピング周波数をもつ双1次変換によりアナログフィルタをディジタルフィルタに変換します。周波数を注意深く調整することにより、アナログフィルタとディジタルフィルタが、Wn
あるいはw1
とw2
で、同一の周波数応答をもつことが保証されます。
参考
|
Besselアナログフィルタの設計 |
|
Butterworthアナログローパスフィルタのプロトタイプ |
|
Butterworthフィルタの次数選択 |
|
Chebyshev I型フィルタの設計(通過帯域リップル) |
|
Chebyshev II型フィルタの設計(遮断帯域リップル) |
|
楕円フィルタの設計 |
|
汎用ディジタルButterworthフィルタの設計 |
![]() | buttap | buttord | ![]() |