Main Content

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

residuez

Z 変換による部分分数展開

説明

[ro,po,ko] = residuez(bi,ai) では、分子多項式と分母多項式である ba の比を部分分数展開して、留数、極、直接項が求められます。

3 つの入力引数と 2 つの出力引数を持つ [bo,ao] = residuez(ri,pi,ki) では、部分分数展開が、行ベクトル b および a に係数を持つ多項式に変換し直されます。

すべて折りたたむ

次の伝達関数で記述される 3 次の IIR ローパス フィルターに対応する部分分数展開を計算します。

H(z)=0.05634(1+z-1)(1-1.0166z-1+z-2)(1-0.683z-1)(1-1.4461z-1+0.7957z-2).

分子と分母を多項式の畳み込みとして表します。

b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

b = b0*conv(b1,b2);
a = conv(a1,a2);

部分分数展開の留数、極および直接項を計算します。

[r,p,k] = residuez(b,a)
r = 3×1 complex

  -0.1153 - 0.0182i
  -0.1153 + 0.0182i
   0.3905 + 0.0000i

p = 3×1 complex

   0.7230 + 0.5224i
   0.7230 - 0.5224i
   0.6830 + 0.0000i

k = -0.1037

伝達関数の極と零点をプロットし、今求めた極を重ね合わせます。

zplane(b,a)
hold on
plot(p,'^r')
hold off

Figure contains an axes object. The axes object with title Pole-Zero Plot, xlabel Real Part, ylabel Imaginary Part contains 4 objects of type line. One or more of the lines displays its values using only markers

再度 residuez を使用し、伝達関数を再構成します。

[bn,an] = residuez(r,p,k)
bn = 1×4

    0.0563   -0.0009   -0.0009    0.0563

an = 1×4

    1.0000   -2.1291    1.7834   -0.5435

入力引数

すべて折りたたむ

多項式係数。ベクトルとして指定します。ベクトル b および a では、離散時間システム b(z)/a(z) の多項式の係数が z の降べきの順で指定されます。

B(z)=b0+b1z1+b2z2++bmzmA(z)=a0+a1z1+a2z2++anzn

重根があり、a > n-1 の場合、以下のようになります。

B(z)A(z)=r(1)1p(1)z1++r(n)1p(n)z1+k(1)+k(2)z1++k(mn+1)z(mn)

部分分数の留数。ベクトルとして指定します。

部分分数の極。ベクトルとして指定します。

直接項。行ベクトルとして指定します。

出力引数

すべて折りたたむ

部分分数の留数。ベクトルとして返されます。

部分分数の極。ベクトルとして返されます。極の数は、次のように表されます。

n = length(a)-1 = length(r) = length(p)

p(j) = ... = p(j+s-1) が多重度 s の極の場合、展開は次の型の項を含むことになります。

r(j)1p(j)z1+r(j+1)(1p(j)z1)2++r(j+sr1)(1p(j)z1)s

直接項。行ベクトルとして返されます。length(b)length(a) より小さい場合、直接項の係数ベクトル k は空になります。大きい場合には、以下のようになります。

length(k) = length(b) - length(a) + 1

多項式係数。ベクトルとして返されます。

アルゴリズム

residuez では、2 つの多項式の比で表される離散時間システムが部分分数展開型または留数型に変換されます。また、部分分数展開から元の多項式係数への逆変換も行います。

メモ

多項式の比の部分分数展開は、数値的に不良設定問題です。分母多項式が複数根をもつ多項式に近い場合は、丸め誤差を含むデータ内の小さな変更によって、結果として得られる極や留数に大きな変更が発生する場合があります。代わりに、状態空間または極-零点表現を使用してください。

residuez では、MATLAB® の基本モジュール関数と部分分数展開法を適用して、b および a から rp、および k が求められます。以下のようになります。

  • length(b) > length(a)-1 の場合、deconv (多項式除算法) を使用して、直接項 a が求められます。

  • p = roots(a) を使用して極が求められます。

  • 重複極を求め、重複度に基づいて極を並べ替えます。

  • 重複根でない極 pj に対して、1/(1 - pjz−1) を b(z)/a(z) に乗算し、結果として得られる有理関数を z = pj で評価して、剰余が求められます。

  • 重複極に対する留数は、次の式から求められます。

    S2*r2 = h - S1*r1
    

    ここで、r2 には \ が使用されます。h は換算された b(z)a(z) のインパルス応答、S1 はその列が非重複根からなる 1 次システムのインパルス応答である行列 r1 は非重複根の留数を含んだ列です。行列 S2 の各列は、インパルス応答です。重複度 sj の各根 pj に対し、S2 には以下の各システムのインパルス応答を表す sj 列が含まれます。

    11pjz1,1(1pjz1)2,,1(1pjz1)sj

    ベクトル h と行列 S1 および S2 は、n + xtra 行をもちます。ここで、n は根の総数で、内部パラメーター xtra は既定の設定では 1 に設定され、方程式系の冗長度の度合いを決定します。

メモ

MATLAB 基本モジュールの関数 residue は、residuez と非常に似ています。この関数では、residuez の場合のような z 領域の離散時間ではなく、ラプラス領域 ([1]を参照) の連続時間の部分分数展開が計算されます。

参照

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

バージョン履歴

R2006a より前に導入