ドキュメンテーション

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

ss2sos

状態空間パラメーターの 2 次セクション型構造への変換

構文

[sos,g] = ss2sos(A,B,C,D)
[sos,g] = ss2sos(A,B,C,D,iu)
[sos,g] = ss2sos(A,B,C,D,'order')
[sos,g] = ss2sos(A,B,C,D,iu,'order')
[sos,g] = ss2sos(A,B,C,D,iu,'order','scale')
sos = ss2sos(...)

説明

ss2sos では、与えられたデジタル フィルターの状態空間表現が等価な 2 次セクション型構造に変換されます。

[sos,g] = ss2sos(A,B,C,D) では、入力引数 ABC、および D によって表現される状態空間システムと等価なゲイン g をもつ、2 次セクション型の行列 sos が求められます。

メモ

入力状態空間システムは、単出力かつ実数でなければなりません。

sos は L 行 6 列の行列です。

sos=[b01b11b211a11a21b02b12b221a12a22b0Lb1Lb2L1a1La2L]

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

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

[sos,g] = ss2sos(A,B,C,D,iu) では、状態空間システム ABCD のどの入力を変換に使用するかを決定するスカラー iu が指定されます。iu の既定値は 1 です。

[sos,g] = ss2sos(A,B,C,D,'order') および

[sos,g] = ss2sos(A,B,C,D,iu,'order') では、sos の行の順序が指定されます。ここで 'order' には、以下を設定できます。

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

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

零点は常に最も近い極との組み合わせになります。

[sos,g] = ss2sos(A,B,C,D,iu,'order','scale') では、すべての 2 次セクション型のゲインと分子の係数に対し希望するスケーリングが行われます。ここで、'scale' には、以下のいずれかのように設定できます。

  • 'none': スケーリングを適用しない (既定の設定)

  • 'inf': 無限大ノルム スケーリングを適用

  • 'two': 2 ノルム スケーリングを適用

up の順序で無限大ノルム スケーリングを使用すると、固定小数点での表現において、オーバーフローの可能性が最小になります。down の順序で 2 ノルム スケーリングを使用すると、ピークの丸めノイズが最小化されます。

メモ:

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

sos = ss2sos(...) は、システム ゲイン全体 g を最初のセクション H1(z) に組み込みます。したがって次になります。

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

メモ:

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

すべて折りたたむ

関数 butter を使用し、5 次のバタワース ローパス フィルターを設計します。カットオフ周波数、 ラジアン/サンプルを指定します。出力を状態空間形式で表します。状態空間の結果を 2 次セクション型に変換します。フィルターの周波数応答を可視化します。

[A,B,C,D] = butter(5,0.2);
sos = ss2sos(A,B,C,D)
sos = 3×6

    0.0013    0.0013         0    1.0000   -0.5095         0
    1.0000    2.0012    1.0012    1.0000   -1.0966    0.3554
    1.0000    1.9968    0.9968    1.0000   -1.3693    0.6926

freqz(sos)

単位弾性定数のバネで壁につながれた単位質量 で構成される 1 次元の離散時間振動システムについて考えます。センサーは、質量の加速度 を測定します。

そのシステムは、 Hz でサンプリングされます。50 個の時間サンプルを生成します。サンプリング間隔は と定義します。

Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);

この振動子は次の状態空間方程式で表すことができます。

ここで、 は状態ベクトルであり、 はそれぞれ質量の位置と速度です。行列は次のようになります。

A = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B = [1-cos(dt);sin(dt)];
C = [-1 0];
D = 1;

系に正の方向の単位インパルスを与えます。状態空間モデルを使用して、すべてゼロの初期状態からの系の時間発展を計算します。

u = [1 zeros(1,N-1)];

x = [0;0];
for k = 1:N
    y(k) = C*x + D*u(k);
    x = A*x + B*u(k);
end

質量の加速度を時間の関数としてプロットします。

stem(t,y,'filled')

伝達関数で時間依存の加速度を計算して入力をフィルター処理します。伝達関数を 2 次セクション型として表します。結果をプロットします。

sos = ss2sos(A,B,C,D);
yt = sosfilt(sos,u);
stem(t,yt,'filled')

どちらの場合も結果は同じになります。

アルゴリズム

ss2sos では、以下の 4 つのステップのアルゴリズムを使用して、入力された状態空間システムの 2 次セクション型構造が求められます。

  1. ABCD によって与えられるシステムの極と零点が求められます。

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

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

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

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

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

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

  4. ss2sos では、'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, chap. 11.

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

[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, chap. 7.

R2006a より前に導入