Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

rls

(削除予定) 再帰的最小二乗 (RLS) 適応アルゴリズム オブジェクトの構築

rls は将来のリリースで削除される予定です。代わりに comm.LinearEqualizer または comm.DecisionFeedback を使用してください。

構文

alg = rls(forgetfactor)
alg = rls(forgetfactor,invcorr0)

説明

関数 rls はイコライザー オブジェクトを作成するために、関数 lineareq または関数 dfe で使用できる適応アルゴリズム オブジェクトを作成します。次に、関数 equalize でイコライザー オブジェクトを使用して信号をイコライズすることができます。信号のイコライズ プロセスの詳細は、イコライズを参照してください。

alg = rls(forgetfactor) は再帰最小二乗 (RLS) アルゴリズムに基づき適応アルゴリズム オブジェクトを構築します。忘却係数は 0 から 1 の間の実数 forgetfactor です。逆相関行列はスカラー値に初期化されます。

alg = rls(forgetfactor,invcorr0) は逆相関行列の初期化パラメーターを設定します。逆相関行列の対角要素をリセットするためにスカラー値が使用されます。

プロパティ

次の表では、RLS適応アルゴリズム オブジェクトのプロパティについて説明します。適応アルゴリズム オブジェクトの値の表示または変更方法の詳細は、イコライズを参照してください。

Property説明
AlgType固定値、'RLS'
ForgetFactor忘却係数
InvCorrInit逆相関行列の対角要素をリセットするために使用されるスカラー値

また、イコライザー オブジェクト (関数 lineareq または関数 dfe を使用) を作成するためにこの適応アルゴリズム オブジェクトを使用する場合、イコライザー オブジェクトは RLS アルゴリズムの逆相関行列を表す InvCorrMatrix プロパティをもちます。InvCorrMatrix の初期値は InvCorrInit*eye(N) です。ここで N はイコライザーの重みの総数です。

すべて折りたたむ

この例では、推奨される comm.LinearEqualizer System object™ とレガシ機能 lineareq を同等の設定で構成します。

変数およびサポート オブジェクトの初期化

d = randi([0 3],1000,1);
x = pskmod(d,4,pi/4);
r = awgn(x,25);
sps = 2; %samples per symbol for oversampled cases
nTaps = 6;
txFilter = comm.RaisedCosineTransmitFilter('FilterSpanInSymbols',nTaps, ...
    'OutputSamplesPerSymbol',4);
rxFilter = comm.RaisedCosineReceiveFilter('FilterSpanInSymbols',nTaps, ...
    'InputSamplesPerSymbol',4,'DecimationFactor',2);
x2 = txFilter(x);
r2 = rxFilter(awgn(x2,25,0.5));
filterDelay = txFilter.FilterSpanInSymbols/2 + ...
    rxFilter.FilterSpanInSymbols/2; % Total filter delay in symbols

イコライズされた出力を比較するには、次のようなコードを使用してコンスタレーションをプロットします。

% plot(yNew,'*')
% hold on
% plot(yOld,'o')
% hold off; legend('New Eq','Old Eq'); grid on

線形イコライザーでの RLS アルゴリズムの使用

lineareq オブジェクトと comm.LinearEqualizer オブジェクトを同等の設定で構成します。

eqOld = lineareq(5,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'RLS'
  nWeights: 5
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  InvCorrInit: 0.1000
  InvCorrMatrix: [5×5 double]
  Weights: [0 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'RLS'
  NumTaps: 5
  ForgettingFactor: 0.9500
  InitialInverseCorrelationMatrix: 0.1000
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 1
  InputDelay: 0
  InputSamplesPerSymbol: 1
  TrainingFlagInputPort: false
  AdaptAfterTraining: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

イコライザーを呼び出します。ResetBeforeFilteringtrue に設定されている場合は、equalize オブジェクトを呼び出すたびにイコライザーがリセットされます。同等の動作を実現するには、comm.LinearEqualizer オブジェクトを呼び出すたびに reset を呼び出します。

yOld1 = equalize(eqOld,r,x(1:100));
yOld2 = equalize(eqOld,r,x(1:100));

yNew1 = eqNew(r,x(1:100));
reset(eqNew)
yNew2 = eqNew(r,x(1:100));

lineareq オブジェクトと comm.LinearEqualizer オブジェクトを同等の設定で構成します。comm.LinearEqualizer オブジェクトでは、初期逆相関行列を eye(5)*0.2 に設定します。

eqOld = lineareq(5,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'RLS'
  nWeights: 5
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ForgetFactor: 0.9500
  InvCorrInit: 0.1000
  InvCorrMatrix: [5×5 double]
  Weights: [0 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1, ...
    'InitialInverseCorrelationMatrix',eye(5)*0.2)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'RLS'
  NumTaps: 5
  ForgettingFactor: 0.9500
  InitialInverseCorrelationMatrix: [5×5 double]
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 1
  InputDelay: 0
  InputSamplesPerSymbol: 1
  TrainingFlagInputPort: false
  AdaptAfterTraining: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

イコライザーを呼び出します。ResetBeforeFilteringtrue に設定されている場合は、equalize オブジェクトを呼び出すたびにイコライザーがリセットされます。同等の動作を実現するには、comm.LinearEqualizer オブジェクトを呼び出すたびに reset を呼び出します。

yOld1 = equalize(eqOld,r,x(1:100));
yOld2 = equalize(eqOld,r,x(1:100));

yNew1 = eqNew(r,x(1:100));
reset(eqNew)
yNew2 = eqNew(r,x(1:100));

アルゴリズム

イコライズで示す図に関して、w をすべての重み wi のベクトルとして定義し、u をすべての入力 ui のベクトルとして定義します。現在の入力の集合 u と現在の逆相関行列 P を基に、この適応アルゴリズムは最初にカルマン ゲイン ファクター K を計算します。

K=Pu(ForgettingFactor)+uHPu.

ここで、H はエルミート転置を示します。

新しい逆相関行列が次で与えられ、

(ForgetFactor)-1(P – KuHP)

新しい重み集合が次によって与えられます。

w + K*e

ここで * 演算子は複素共役を意味します。

互換性の考慮事項

すべて展開する

R2020a 以降は警告

参考文献

[1] Farhang-Boroujeny, B., Adaptive Filters: Theory and Applications, Chichester, England, John Wiley & Sons, 1998.

[2] Haykin, S., Adaptive Filter Theory, Third Ed., Upper Saddle River, NJ, Prentice-Hall, 1996.

[3] Kurzweil, J., An Introduction to Digital Communications, New York, John Wiley & Sons, 2000.

[4] Proakis, John G., Digital Communications, Fourth Ed., New York, McGraw-Hill, 2001.

R2006a より前に導入