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

dsp.RLSFilter

再帰的最小二乗 (RLS) アルゴリズムを使用した出力、誤差および係数の計算

説明

dsp.RLSFilter System object™ は、RLS フィルターの実装を使用して入力の各チャネルをフィルター処理します。

入力の各チャネルをフィルターするには、次を実行します。

  1. dsp.RLSFilter オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とは (MATLAB)を参照してください。

作成

説明

rlsFilt = dsp.RLSFilter は適応 RLS フィルター System object、rlsFilt を返します。この System object は、RLS アルゴリズムを使用して、フィルター済み出力、フィルター誤差および指定の入力と目的の信号に対するフィルターの重みを計算します。

rlsFilt = dsp.RLSFilter(len) は RLS フィルター System object、rlsFilt を返します。この System object には、len に設定された Length プロパティがあります。

rlsFilt = dsp.RLSFilter(Name,Value) は、指定した各プロパティが指定の値に設定された RLS フィルター System object を返します。各プロパティを、一重引用符で囲みます。指定していないプロパティは既定値になります。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計 (MATLAB)を参照してください。

フィルターの係数の計算に使用するメソッドを、Conventional RLS [1] [2]Householder RLS [3] [4]Sliding-window RLS [5][1][2]Householder sliding-window RLS [4]、または QR decomposition [1] [2] として指定できます。このプロパティは調整不可能です。

RLS フィルターの係数ベクトルの長さを、スカラーの正の整数値として指定します。このプロパティは調整不可能です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

スライディング ウィンドウの幅を Length プロパティ値以上のスカラーの正の整数値として指定します。このプロパティは調整不可能です。

依存関係

このプロパティは、Method プロパティを Sliding-window RLS または Householder sliding-window RLS に設定した場合にのみ適用されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

RLS 忘却係数を 1 以下の正のスカラー数値として指定します。このプロパティ値を 1 に設定することは無限メモリを意味し、その間は新しいフィルターを求めて適応を行います。

調整可能: Yes

データ型: single | double

FIR 適応フィルター係数の初期値をスカラーまたは Length プロパティ値に等しい長さのベクトルとして指定します。

調整可能: Yes

データ型: single | double

入力信号の逆共分散行列の初期値を指定します。このプロパティは、各次元が Length プロパティ値と等しいスカラーまたは正方行列でなければなりません。スカラー値を設定すると、InverseCovariance プロパティはそのスカラー値と等しい対角要素をもつ対角行列に初期化されます。

調整可能: Yes

依存関係

このプロパティは、Method プロパティを Conventional RLS または Sliding-window RLS に設定した場合にのみ適用されます。

データ型: single | double

入力信号の平方根逆共分散行列の初期値を指定します。このプロパティは、各次元が Length プロパティ値と等しいスカラーまたは正方行列でなければなりません。スカラー値を設定すると、SquareRootInverseCovariance プロパティはそのスカラー値と等しい対角要素をもつ対角行列に初期化されます。

調整可能: Yes

依存関係

このプロパティは、Method プロパティを Householder RLS または Householder sliding-window RLS に設定した場合にのみ適用されます。

データ型: single | double

入力信号の平方根共分散行列の初期値を指定します。このプロパティは、各次元が Length プロパティ値と等しいスカラーまたは正方行列でなければなりません。スカラー値を設定すると、SquareRootCovariance プロパティはそのスカラー値と等しい対角要素をもつ対角行列に初期化されます。

調整可能: Yes

依存関係

このプロパティは、Method プロパティを QR-decomposition RLS に設定した場合にのみ適用されます。

データ型: single | double

フィルター係数値をロックするかどうかを指定します。このプロパティを true に設定すると、フィルター係数は更新されず、値はそのままになります。既定値は false (フィルター係数が継続的に更新される) です。

調整可能: Yes

使用法

説明

y = rlsFilt(x,d) は、System object の rlsFilt を使用して、目的の信号 d に一致するように基準入力 x を再帰的に調整します。目的の信号 d は、望ましい信号に望ましくないノイズが加わったものです。

[y,e] = rlsFilt(x,d) は、基準入力と目的の信号間で、RLS フィルターの出力を誤差 e に沿って表示します。フィルターは、誤差 e が最小になるまでその係数を調整します。オブジェクトの Coefficients プロパティにアクセスすることで、これらの係数にアクセスできます。これは、オブジェクトを呼び出した後でのみ実行できます。たとえば、rlsFilt フィルターの最適化された係数にアクセスするには、入力と目的の信号をオブジェクトに渡した後で、rlsFilt.Coefficients を呼び出します。

入力引数

すべて展開する

RLS フィルターでフィルター処理される信号。入力 x と目的の信号 d はサイズとデータ型が同じでなければなりません。

入力は可変サイズ信号にすることができます。オブジェクトがロックされていても、列ベクトルの要素数を変更できます。System object はオブジェクトを呼び出してそのアルゴリズムを実行するときにロックします。

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

RLS フィルターはその係数を調整して誤差 e を最小化し、入力信号 x を目的の信号 d に可能な限り近づけて収束させます。

入力 x と目的の信号 d はサイズとデータ型が同じでなければなりません。

目的の信号 d は可変サイズ信号にすることができます。オブジェクトがロックされていても、列ベクトルの要素数を変更できます。System object はオブジェクトを呼び出してそのアルゴリズムを実行するときにロックします。

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

出力引数

すべて展開する

フィルター処理された出力。スカラーまたは列ベクトルとして返されます。オブジェクトはそのフィルターの係数を調整して入力信号 x が目的の信号 d に一致するように収束させます。フィルターは収束した信号を出力します。

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

出力信号 y と目的の信号 d の差異。スカラーまたは列ベクトルとして返されます。RLS フィルターの目的は、この誤差を最小化することです。オブジェクトはその係数を調整して収束させ、目的の信号とよく一致する出力信号を生成する最適なフィルターの係数になるようにします。e が計算される方法の詳細については、アルゴリズムを参照してください。RLS フィルター係数にアクセスするには、入力信号と目的の信号をオブジェクトに渡した後で rlsFilt.Coefficients を呼び出します。

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

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

msesimEstimated mean squared error for adaptive filters
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

RLS フィルターの System object™ を使用して信号値を特定します。

メモ: R2016a 以前のリリースを使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x)step(obj,x) になります。

rls1 = dsp.RLSFilter(11, 'ForgettingFactor', 0.98);
filt = dsp.FIRFilter('Numerator',fir1(10, .25)); % Unknown System
x = randn(1000,1);                       % input signal
d = filt(x) + 0.01*randn(1000,1); % desired signal
[y,e] = rls1(x, d);
w = rls1.Coefficients;
subplot(2,1,1), plot(1:1000, [d,y,e]);
title('System Identification of an FIR filter');
legend('Desired', 'Output', 'Error');
xlabel('time index'); ylabel('signal value');
subplot(2,1,2); stem([filt.Numerator; w].');
legend('Actual','Estimated');
xlabel('coefficient #'); ylabel('coefficient value');

ノイズ キャンセリング

rls2 = dsp.RLSFilter('Length', 11, 'Method', 'Householder RLS');
filt2 = dsp.FIRFilter('Numerator',fir1(10, [.5, .75]));
x = randn(1000,1);                           % Noise
d = filt2(x) + sin(0:.05:49.95)';     % Noise + Signal
[y, err] = rls2(x, d);
subplot(2,1,1), plot(d), title('Noise + Signal');
subplot(2,1,2), plot(err), title('Signal');

次に示す逆システム同定モデルを使用して、RLS 適応アルゴリズムの例を示します。

適応フィルターを未知のフィルターとカスケード接続すると、未知のシステムの逆数である解に適応フィルターが収束します。

未知のシステムと適応フィルターの伝達関数がそれぞれ H(z) および G(z) である場合、カスケード接続されたシステムからの信号と目的の信号の間で測定される誤差は、H(z) と G(z) の積が 1 (G(z)*H(z) = 1) になるときに最小になります。この関係が成り立つには、G(z) が 1/H(z) (未知のシステムの伝達関数の逆数) に等しくなければなりません。

これが正しいことを示すため、カスケード接続されたフィルター ペアに入力する信号 s を作成します。

s = randn(3000,1);

カスケード接続されたフィルターの場合、未知のフィルターにより、両方のフィルターの後の総和点に到達する信号に遅延が発生します。まだ参照していない信号に適応フィルターが適応しようとすることを防ぐため (未来を予測することと同じです)、目的の信号を 12 サンプル遅延させます (12 は未知のシステムの次数)。

一般に、同定しようとしているシステムの次数は不明です。このような場合、適応フィルターの次数の半分に等しいサンプル数だけ目的の信号を遅延させます。入力を遅延させるには、値がゼロの 12 サンプルを入力 s に先行させる必要があります。

delay = zeros(12,1);
d = [delay; s(1:2988)]; % Concatenate the delay and the signal.

目的の信号ベクトル dx は同じ長さでなければならないので、遅延サンプルに対応するように信号要素数を調整します。

一般的に正しいわけではありませんが、この例では未知のフィルターの次数がわかっているので、未知のフィルターの次数に等しい遅延を追加します。

未知のシステムには、12 次のローパス FIR フィルターを使用します。

filt = dsp.FIRFilter;
filt.Numerator = fir1(12,0.55,'low');

s にフィルターを適用して、適応アルゴリズム関数の入力データ信号を与えます。

x = filt(s);

RLS アルゴリズムを設定するため、dsp.RLSFilter オブジェクトのインスタンスを作成し、LengthForgettingFactor および InitialInverseCovariance プロパティを設定します。

RLS アルゴリズムのオブジェクトを準備するための入力条件の詳細については、dsp.RLSFilterを参照してください。

p0 = 2 * eye(13);
lambda = 0.99;
rls = dsp.RLSFilter(13,'ForgettingFactor',lambda,...
   'InitialInverseCovariance',p0);

ここまでのほとんどのプロセスは、前の例と同じです。しかし、この例では逆数の解を求めようとしているので、データを搬送する信号と目的の信号がどれであるかに注意する必要があります。

前の適応フィルターの例では、フィルターを適用したノイズを目的の信号として使用しました。このケースでは、フィルターを適用したノイズ (x) は未知のシステムの情報を搬送します。分散が 1 のガウス分布に従う、フィルターを適用しないノイズ d が目的の信号です。この適応フィルターの例を実行するコードは、次のようになります。

[y,e] = rls(x,d);

y には、フィルターを適用した出力が返されます。e には、未知のシステムの逆数を求めるためにフィルターが適応するときの誤差信号が格納されます。

RLS フィルターの推定係数は、MATLAB のコマンド プロンプトで rls.Coefficients と入力することにより得られます。

b = rls.Coefficients;

freqz を使用して、適応させた RLS フィルター (逆システム、G(z)) の周波数応答を表示します。逆システムは、線形位相をもつハイパス フィルターと同じように見えます。

freqz(b,1)

未知のシステム H(z) の周波数応答を表示します。この応答は、カットオフ周波数が 0.55 であるローパス フィルターのものです。

freqz(filt.Numerator,1)

未知のシステムと適応させたフィルターをカスケード接続すると、カットオフ周波数が 0.8 に拡張された補正システムになります。

overallCoeffs = conv(filt.Numerator,b);
freqz(overallCoeffs,1)

アルゴリズム

dsp.RLSFilter System object は、Conventional RLS が選択されると、FIR フィルターの重みの最小二乗推定 (RLS) を再帰的に計算します。System object は、入力信号と目的の信号に変換するために必要なフィルターの重みまたは係数を推定します。入力信号はスカラーまたは列ベクトルにすることができます。目的の信号は入力信号と同じデータ型、実数/複素数および次元をもたなければなりません。対応する RLS フィルターは、行列形式の P(n) として表現されます。

k(n)=λ1P(n1)u(n)1+λ1uH(n)P(n1)u(n)y(n)=wT(n1)u(n)e(n)=d(n)y(n)w(n)=w(n1)+k(n)e(n)P(n)=λ1P(n1)λ1k(n)uH(n)P(n1)

ここで、λ-1 は指数的な重み係数の逆数を示します。変数は次のようになります。

変数説明
n現在の時間インデックス
u(n)ステップ n でのバッファー済み入力サンプルのベクトル
P(n)ステップ n での逆相関行列
k(n)ステップ n でのゲイン ベクトル
w(n)ステップ n でのフィルター タップの推定ベクトル
y(n)ステップ n でのフィルター処理された出力
e(n)ステップ n での推定誤差
d(n)ステップ n での目的の応答
λ忘却係数

uw、および k はすべて列ベクトルです。

参照

[1] M Hayes, Statistical Digital Signal Processing and Modeling, New York: Wiley, 1996.

[2] S. Haykin, Adaptive Filter Theory, 4th Edition, Upper Saddle River, NJ: Prentice Hall, 2002 .

[3] A.A. Rontogiannis and S. Theodoridis, "Inverse factorization adaptive least-squares algorithms," Signal Processing, vol. 52, no. 1, pp. 35-47, July 1996.

[4] S.C. Douglas, "Numerically-robust O(N2) RLS algorithms using least-squares prewhitening," Proc. IEEE Int. Conf. on Acoustics, Speech, and Signal Processing, Istanbul, Turkey, vol. I, pp. 412-415, June 2000.

[5] A. H. Sayed, Fundamentals of Adaptive Filtering, Hoboken, NJ: John Wiley & Sons, 2003.

拡張機能

R2013a で導入