ドキュメンテーション

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

butter

バタワース フィルターの設計

構文

  • [b,a] = butter(n,Wn)
  • [b,a] = butter(n,Wn,ftype)
  • [z,p,k] = butter(___)
  • [A,B,C,D] = butter(___)
  • [___] = butter(___,'s')

説明

[b,a] = butter(n,Wn) では、正規化されたカットオフ周波数 Wn をもつ n 次のローパス デジタル バタワース フィルターの伝達関数の係数が返されます。

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

    メモ:   伝達関数型の作成に影響する数値的問題についての詳細は、制限を参照してください。

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

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

[___] = butter(___,'s') はカットオフ角周波数 Wn をもつ、ローパス、ハイパス、バンドパスまたはバンドストップのアナログ バタワース フィルターを設計します。

すべて折りたたむ

ローパス バタワースの伝達関数

1000 Hz でサンプリングされたデータに対し、カットオフ周波数 300 Hz ( $0.6\pi$ ラジアン/サンプルに相当) をもつ 6 次のローパス バタワースを設計します。その振幅応答と位相応答をプロットします。これを使用して、1,000 サンプルのランダム信号をフィルター処理します。

[b,a] = butter(6,0.6);
freqz(b,a)
dataIn = randn(1000,1);
dataOut = filter(b,a,dataIn);

バンドストップ バタワース フィルター

$0.2\pi$ および $0.6\pi$ ラジアン/サンプルの正規化されたエッジ周波数をもつ 6 次のバタワース バンドストップ フィルターを設計します。その振幅応答と位相応答をプロットします。これを使用してランダム データをフィルター処理します。

[b,a] = butter(3,[0.2 0.6],'stop');
freqz(b,a)
dataIn = randn(1000,1);
dataOut = filter(b,a,dataIn);

ハイパス バタワース フィルター

9 次のハイパス バタワース フィルターを設計します。1000 Hz でサンプリングされたデータに対し、カットオフ周波数 300 Hz ( $0.6\pi$ ラジアン/サンプルに相当) を指定します。その振幅応答と位相応答を表示します。fvtool で使用するためにゼロ、極およびゲインを 2 次セクション型に変換します。

[z,p,k] = butter(9,300/500,'high');
sos = zp2sos(z,p,k);
fvtool(sos,'Analysis','freq')

バンドパス バタワース フィルター

低域カットオフ周波数 500 Hz と高域カットオフ周波数 560 Hz をもつ 20 次のバタワース バンドパス フィルターを設計します。サンプル レート 1500 Hz を指定します。状態空間表現を使用します。designfilt を使用して同じフィルターを設計します。

[A,B,C,D] = butter(10,[500 560]/750);
d = designfilt('bandpassiir','FilterOrder',20, ...
    'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ...
    'SampleRate',1500);

状態空間表現を 2 次セクション型に変換します。fvtool を使用して周波数応答を可視化します。

sos = ss2sos(A,B,C,D);
fvt = fvtool(sos,d,'Fs',1500);
legend(fvt,'butter','designfilt')

アナログの IIR ローパス フィルターの比較

カットオフ周波数 2 GHz をもつ 5 次のアナログ バタワース フィルターを設計します。 $2\pi$ 倍にして周波数を秒あたりのラジアン単位に変換します。4096 点でのフィルターの周波数応答を計算します。

n = 5;
f = 2e9;

[zb,pb,kb] = butter(n,2*pi*f,'s');
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,4096);

同じエッジ周波数と通過帯域リップル 3 dB をもつ 5 次のチェビシェフ I 型フィルターを設計します。その周波数応答を計算します。

[z1,p1,k1] = cheby1(n,3,2*pi*f,'s');
[b1,a1] = zp2tf(z1,p1,k1);
[h1,w1] = freqs(b1,a1,4096);

同じエッジ周波数と阻止帯域の減衰量 30 dB をもつ 5 次のチェビシェフ II 型フィルターを設計します。その周波数応答を計算します。

[z2,p2,k2] = cheby2(n,30,2*pi*f,'s');
[b2,a2] = zp2tf(z2,p2,k2);
[h2,w2] = freqs(b2,a2,4096);

同じエッジ周波数、通過帯域リップル 3 dB および阻止帯域の減衰量 30 dB をもつ 5 次の楕円フィルターを設計します。その周波数応答を計算します。

[ze,pe,ke] = ellip(n,3,30,2*pi*f,'s');
[be,ae] = zp2tf(ze,pe,ke);
[he,we] = freqs(be,ae,4096);

減衰をデシベルでプロットします。周波数をギガヘルツで表します。フィルターを比較します。

plot(wb/(2e9*pi),mag2db(abs(hb)))
hold on
plot(w1/(2e9*pi),mag2db(abs(h1)))
plot(w2/(2e9*pi),mag2db(abs(h2)))
plot(we/(2e9*pi),mag2db(abs(he)))
axis([0 4 -40 5])
grid
xlabel('Frequency (GHz)')
ylabel('Attenuation (dB)')
legend('butter','cheby1','cheby2','ellip')

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

入力引数

すべて折りたたむ

n — フィルター次数整数値スカラー

フィルター次数。整数スカラーとして指定。

データ型: double

Wn — カットオフ周波数スカラー | 2 要素ベクトル

カットオフ周波数。スカラーまたは 2 要素ベクトルとして指定されます。カットオフ周波数は、フィルターの振幅応答が 1 / √2 となる周波数です。

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

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

  • デジタル フィルターの場合、カットオフ周波数は 0 ~ 1 の間でなければなりません。ここで 1 はナイキスト レート—サンプルレートの 1/2 つまり π ラジアン/サンプルに相当します。

    アナログ フィルターの場合、カットオフ周波数は必ずラジアン/秒で表示され、任意の正の値をとることができます。

データ型: double

ftype — フィルター タイプ'low' | 'bandpass' | 'high' | 'stop'

文字列として指定されたフィルター タイプ。

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

  • 'high' はカットオフ周波数 Wn をもつハイパス フィルターを指定します。

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

  • Wn が 2 要素ベクトルの場合、'stop' は次数 2n のバンドストップ フィルターを指定します。

データ型: char

出力引数

すべて折りたたむ

b,a — 伝達関数の係数行ベクトル

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

  • デジタル フィルターの場合、伝達関数の係数は b および a で以下のように表されます。

    H(z)=B(z)A(z)=b(1)+b(2)z1++b(n+1)zna(1)+a(2)z1++a(n+1)zn.

  • アナログ フィルターの場合、伝達関数の係数は b および a で以下のように表されます。

    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

z,p,k — ゼロ、極およびゲイン列ベクトル、スカラー

フィルターのゼロ、極、ゲイン。長さ n (バンドパスとバンドストップの設計の場合 2n) およびスカラーの 2 つの列ベクトルとして返します。

  • デジタル フィルターの場合、伝達関数は zp および k で以下のように表されます。

    H(z)=k(1z(1)z1)(1z(2)z1)(1z(n)z1)(1p(1)z1)(1p(2)z1)(1p(n)z1).

  • アナログ フィルターの場合、伝達関数は zp および k で以下のように表されます。

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

データ型: double

A,B,C,D — 状態空間行列行列

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

  • デジタル フィルターの場合、状態空間の行列は状態量ベクトルx、入力 u および出力 y を以下の式により表します。

    x(k+1)=Ax(k)+Bu(k)y(k)=Cx(k)+Du(k).

  • アナログ フィルターの場合、状態空間の行列は状態量ベクトル x、入力 u、出力 y を以下の式により表します。

    x˙=Ax+Buy=Cx+Du.

データ型: double

詳細

すべて折りたたむ

制限

伝達関数構文の数値的不安定性

一般に、IIR フィルターを設計する場合は、[z,p,k] 構文を使用します。フィルターを解析または実装する場合は、[z,p,k] の出力を zp2sos で使用します。[b,a] 構文を使用するフィルターを設計する場合、数値の問題が発生することがあります。これらの問題は、丸め誤差によるものであり、n が 4 の低さの場合に発生することがあります。以下の例はこの限界を示しています。

n = 6;
Wn = [2.5e6 29e6]/500e6;
ftype = 'bandpass';

% Transfer Function design
[b,a] = butter(n,Wn,ftype);      % This is an unstable filter

% Zero-Pole-Gain design
[z,p,k] = butter(n,Wn,ftype);
sos = zp2sos(z,p,k);

% Display and compare results
hfvt = fvtool(b,a,sos,'FrequencyScale','log');
legend(hfvt,'TF Design','ZPK Design')

アルゴリズム

バタワース フィルターは、通過帯域で振幅応答が可能な限り平坦で全体に単調な振幅応答をもちます。この滑らかさはロールオフの急峻さの縮減によって現れます。楕円フィルターとチェビシェフ フィルターは通常、与えられたフィルター次数に対し、急峻なロールオフを提供します。

butter は、以下の 5 つのステップのアルゴリズムを使用します。

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

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

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

  4. デジタル フィルター設計の場合、bilinear を使用して、プリワーピング周波数をもつ双一次変換によりアナログ フィルターをデジタル フィルターに変換します。周波数を慎重に調整することで、アナログ フィルターとデジタル フィルターが Wn、あるいは w1w2 で確実に同じ周波数応答の振幅をもつようになります。

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

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