ドキュメンテーション

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

levinson

レビンソン・ダービン再帰法

構文

a = levinson(r)
a = levinson(r,n)
[a,e] = levinson(r,n)
[a,e,k] = levinson(r,n)

説明

レビンソン・ダービン再帰法は、設定された確定的な自己相関列をもつ全極 IIR フィルターを求めるためのアルゴリズムです。この再帰法は、フィルター設計、コード化、スペクトル推定などで使用されています。levinson で生成されるフィルターは、最小位相となります。

a = levinson(r) は、自己相関列として r をもつ length(r)-1 次の自己回帰線形過程の係数が求められます。r は、実数または複素数の確定的な自己相関列です。r が行列の場合、levinson では r の各列の係数が求められ、a の行に返されます。n=length(r)-1 は、分母多項式 A(z) の既定の次元、すなわち、a = [1 a(2) ... a(n+1)] です。フィルター係数は、以下のように z–1 の次数の降順で順序付けられます。

H(z)=1A(z)=11+a(2)z1++a(n+1)zn

a = levinson(r,n) では、次数 n の自己回帰モデルの係数が返されます。

[a,e] = levinson(r,n) では、次数 n の予測誤差 e が返されます。

[a,e,k] = levinson(r,n) では、反射係数 k が長さ n の列ベクトルとして返されます。

メモ:

k は、a 係数の計算中に内部的に計算されます。このため、k を同時に返す方が、tf2latc を使用して ak に変換するよりも効率的です。

すべて折りたたむ

次の式で表される自己回帰過程の係数を推定します。

x(n)=0.1x(n-1)-0.8x(n-2)+w(n).

a = [1 0.1 -0.8];

分散 0.4 のホワイト ノイズをフィルター処理することによって過程の実現を生成します。

rng('default')
v = 0.4;
w = sqrt(v)*randn(15000,1);
x = filter(1,a,w);

相関関数を推定します。負のラグの相関値を破棄します。レビンソン・ダービン再帰法を使用して、モデル係数を推定します。

[r,lg] = xcorr(x,'biased');
r(lg<0) = [];

ar = levinson(r,numel(a)-1)
ar = 1×3

    1.0000    0.0957   -0.8026

アルゴリズム

levinson では、対称テプリッツ線形方程式系を解けます。

[r(1)r(2)*r(n)*r(2)r(1)r(n1)*r(n)r(2)r(1)] [a(2)a(3)a(n+1)]=[r(2)r(3)r(n+1)]

ここで、r = [r(1) ... r(n + 1)] は入力自己相関ベクトルであり、r(i)* は r(i) の複素共役を表します。入力 r は、自己相関係数のベクトルで、ラグ 0 は最初の要素 r(1) です。

メモ

r が有効な自己相関列でない場合、解が存在する場合であっても、関数 levinsonNaN を返すことがあります。

このアルゴリズムは O(n2) フロップスを必要とし、n が大きい場合は、MATLAB® のバックスラッシュ コマンドよりはるかに効率的です。ただし、関数 levinson ではできるだけ高速に演算を行うために、低次の場合には \ を使用しています。

参考文献

[1] Ljung, Lennart. System Identification: Theory for the User. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

拡張機能

R2006a より前に導入