Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

tf2sos

デジタル フィルター伝達関数データの 2 次セクションへの変換

説明

[sos,g] = tf2sos(b,a) では、伝達関数係数ベクトル ba で表現されるデジタル フィルターに等価なゲイン g をもつ 2 次セクション行列 sos が求められます。

[sos,g] = tf2sos(b,a,order) では、sos の行の順序が指定されます。

[sos,g] = tf2sos(b,a,order,scale) では、すべての 2 次セクションのゲインと分子係数に対するスケーリングが指定されます。

sos = tf2sos(___) では、最初のセクションにシステム ゲイン全体が組み込まれます。

すべて折りたたむ

関数 butter を使用して 4 次のバタワース ローパス フィルターを設計します。カットオフ周波数をナイキスト周波数の半分に指定します。フィルターを 2 次セクションに実装します。2 つの表現の分子と分母どうしを比較して、それらの表現が同一であるかどうかを確認します。

[nm,dn] = butter(4,0.5);
[ss,gn] = tf2sos(nm,dn);
numers = [conv(ss(1,1:3),ss(2,1:3))*gn;nm]
numers = 2×5

    0.0940    0.3759    0.5639    0.3759    0.0940
    0.0940    0.3759    0.5639    0.3759    0.0940

denoms = [conv(ss(1,4:6),ss(2,4:6));dn]
denoms = 2×5

    1.0000   -0.0000    0.4860   -0.0000    0.0177
    1.0000   -0.0000    0.4860   -0.0000    0.0177

単位弾性定数のバネで壁につながれた単位質量 m で構成される 1 次元の離散時間振動システムについて考えます。センサーによりこの質量の加速度 aFs=5 Hz でサンプリングします。

50 個の時間サンプルを生成します。サンプリング間隔は Δt=1/Fs と定義します。

Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);
u = [1 zeros(1,N-1)];

このシステムの伝達関数の解析式は次のようになります。

H(z)=1-z-1(1+cosΔt)+z-2cosΔt1-2z-1cosΔt+z-2.

系に正の方向の単位インパルスを与えます。伝達関数を使用してシステムの時間発展を計算します。応答をプロットします。

bf = [1 -(1+cos(dt)) cos(dt)];
af = [1 -2*cos(dt) 1];
yf = filter(bf,af,u);
stem(t,yf,'o')
xlabel('t')

Figure contains an axes object. The axes object with xlabel t contains an object of type stem.

伝達関数の 2 次セクション表現で時間依存の加速度を計算して、入力をフィルター処理します。結果をプロットします。どちらの場合も結果は同じになります。

sos = tf2sos(bf,af);
yt = sosfilt(sos,u);
stem(t,yt,'filled')

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

入力引数

すべて折りたたむ

伝達関数の係数。ベクトルで指定します。ba によるこの伝達関数式は次になります。

H(z)=B(z)A(z)=b1+b2z1++bn+1zna1+a2z1++am+1zm.

例: b = [1 3 3 1]/6a = [3 0 1 0]/3 は、正規化された 3 dB の周波数 0.5π ラジアン/サンプルをもつ 3 次のバタワース フィルターを指定します。

データ型: double

行の次数。次のいずれかとして指定します。

  • 'up'sos の最初の行が単位円から最も離れた極を含むようにセクションを並べます。

  • 'down'sos の最初の行が単位円に最も近い極を含むようにセクションを並べます。

データ型: char

ゲインおよび分子係数のスケーリング。次のいずれかとして指定します。

  • 'none' — スケーリングを適用しません。

  • 'inf' — 無限大ノルム スケーリングを適用します。

  • 'two' — 2 ノルム スケーリングを適用します。

スケーリングを無限大ノルムにし、順序を 'up' にすると、実現時のオーバーフローの確率が最小限に抑えられます。スケーリングを 2 ノルムにし、順序を 'down' にすると、ピークの丸めノイズが最小限に抑えられます。

メモ

無限大ノルムと 2 ノルムのスケーリングは、直接型 II の実装に対してのみ適切です。

データ型: char

出力引数

すべて折りたたむ

2 次セクション表現。行列として返されます。sos は、L 行 6 列の行列

sos=[b01b11b211a11a21b02b12b221a12a22b0Lb1Lb2L1a1La2L]

であり、この行列の行には、H(z) の 2 次セクションの分子係数 bik と分母係数 aik が含まれます。

H(z)=gk=1LHk(z)=gk=1Lb0k+b1kz1+b2kz21+a1kz1+a2kz2.

全体のシステム ゲイン。実数のスカラーとして返されます。

1 つの出力引数と共に tf2sos を呼び出すと、システム ゲイン全体が最初のセクション H1(z) に組み込まれます。したがって次のようになります。

H(z)=k=1LHk(z).

メモ

直接型 II 構造をスケーリングする際に、最初のセクションのゲインを組み込むことは推奨しません。異常なスケーリングになることがあります。ゲインの組み込みを避けるために、2 つの出力をもつ tf2sos を使用します。

アルゴリズム

tf2sos では、次の 4 ステップのアルゴリズムを使用して、入力された伝達関数システムに対する 2 次セクション構造を決定します。

  1. ba で与えられたシステムの極と零点を求めます。

  2. 関数 zp2sos を使用し、これはまず、関数 cplxpair により零点と極を複素共役対にまとめます。次に関数 zp2sos は、以下のルールに従って極と零点の組を対応させ、2 次セクションを構成します。

    1. 単位円に最も近い極を、それらの極に最も近い零点と組み合わせます。

    2. 次に単位円に近い極を、それらの極に最も近い零点と組み合わせます。

    3. 同様にして、極と零点をすべて組み合わせます。

    tf2sos では、実極についても、絶対値が最も近いものをグループ化してセクションにまとめます。実数零点についても同じルールが適用されます。

  3. 極の組み合わせを単位円に近付く順に並べ替えます。tf2sos では通常、単位円に最も近い極をもつセクションがカスケードの最後に配置されます。order'down' を設定することで、tf2sos によってセクションを逆の順序に並べることができます。

  4. tf2sos によって、scale に設定されたノルムでセクションがスケーリングされます。任意の H(ω) に対するスケーリングは、以下のように定義されます。

    Hp=[12π02π|H(ω)|pdω]1/p

    ここで、p は、∞ または 2 のいずれかです。スケーリングの詳細については、参考文献を参照してください。アルゴリズムでは、このスケーリングに従って、固定小数点フィルターの実装によるオーバーフローまたはピークの丸めノイズを最小限に抑えるよう試みられます。

参照

[1] Jackson, L. B. Digital Filters and Signal Processing. 3rd ed. Boston: Kluwer Academic Publishers, 1996.

[2] Mitra, S. K. Digital Signal Processing: A Computer-Based Approach. New York: McGraw-Hill, 1998.

[3] Vaidyanathan, P. P. “Robust Digital Filter Structures.” Handbook for Digital Signal Processing (S. K. Mitra and J. F. Kaiser, eds.). New York: John Wiley & Sons, 1993.

拡張機能

バージョン履歴

R2006a より前に導入