Main Content

levinson

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

説明

a= levinson(r,n)は、自己相関列としてrをもつn次の自己回帰線形過程の係数を返します。

また、[a,e,k] = levinson(___)は予測誤差eおよび反射係数kを返します。

すべて折りたたむ

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

x ( n ) = 0 . 1 x ( n - 1 ) - 0 . 8 x ( n - 2 ) - 0 . 2 7 x ( n - 3 ) + w ( n ) .

a = [1 0.1 -0.8 -0.27];

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

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

相関関数を推定します。負のラグの相関値を破棄します。レビンソン・ダービン再帰法を使用して、モデル係数を推定します。予測誤差が入力の分散に対応していることを確認します。

[r,lg] = xcorr(x,'biased');r (lg < 0) = [];[ar, e] = levinson (r,元素个数(a) (1)
ar =1×41.0000 0.0772 -0.7954 -0.2493
e = 0.3909

16 次モデルの反射係数を推定します。95% の信頼限界の外側に位置している反射係数のみが正しいモデル次数に対応していることを確認します。詳細については、偏自己相関列による AR 次数選択を参照してください。

[~,~,k] = levinson(r,16); stem(k,'filled') conf = sqrt(2)*erfinv(0.95)/sqrt(15000); holdon[X,Y] = ndgrid(xlim,conf*[-1 1]); plot(X,Y,'--r') holdoff

Figure contains an axes object. The axes object contains 3 objects of type stem, line.

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

x ( n ) = 0 . 1 x ( n - 1 ) - 0 . 8 x ( n - 2 ) - 0 . 2 7 x ( n - 3 ) + w ( n ) .

a = [1 0.1 -0.8 -0.27];

分散が異なるホワイト ノイズをフィルター処理することにより、過程の実現を 5 件作成します。

nr = 5; v = rand(1,nr)
v =1×50.8147 0.9058 0.1270 0.9134 0.6324
w = sqrt(v).*randn(15000,nr); x = filter(1,a,w);

相関関数を推定します。相互相関の項と負のラグの相関値を破棄します。レビンソン・ダービン再帰法を使用して、正しいモデル次数の予測誤差を推定し、その予測誤差が入力ノイズ信号の分散に対応することを確認します。

[r,lg] = xcorr(x,'biased');[~,e] = levinson(r(lg>=0,1:nr+1:end),numel(a)-1)
e =5×10.7957 0.9045 0.1255 0.9290 0.6291

入力引数

すべて折りたたむ

自己相関列。ベクトルまたは行列として指定します。rが行列の場合、関数はrの各列の係数を求め、それらをaの行に返します。

例:[r,lg] = xcorr(randn(1000,1),'biased'); r(lg<0) = []では、正のラグに関する 1000 サンプルのランダム信号の自己相関列を推定します。

データ型:single|double
複素数のサポート:あり

モデル次数。正の整数スカラーとして指定します。

データ型:single|double

出力引数

すべて折りたたむ

自己回帰線形過程の係数。行ベクトルまたは行列として返されます。フィルター係数は、以下のように z-1の降べきの順に並べられます。

H ( z ) = 1 A ( z ) = 1 1 + a ( 2 ) z 1 + + a ( n + 1 ) z n .

rが行列の場合、aの各行はrの列に対応します。

予測誤差。スカラーまたは列ベクトルとして返されます。rが行列の場合、eの各要素はrの列に対応します。

反射係数。長さnの列ベクトルとして返されます。rが行列の場合、kの各列はrの列に対応します。

メモ:

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

アルゴリズム

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

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

[ r ( 1 ) r ( 2 ) * r ( n ) * r ( 2 ) r ( 1 ) r ( n 1 ) * 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 より前に導入