Main Content

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

lms

(削除予定) 最小平均二乗 (LMS) 適応アルゴリズム オブジェクトの構築

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

構文

alg = lms(stepsize)
alg = lms(stepsize,leakagefactor)

説明

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

alg = lms(stepsize) は、ステップ サイズ stepsize の最小平均二乗 (LMS) アルゴリズムに基づく適応アルゴリズム オブジェクトを構築します。

alg = lms(stepsize,leakagefactor) は、LMS アルゴリズムの漏れ係数を設定します。leakagefactor は、0 ~ 1 の間の値でなければなりません。1 の値は従来の重み更新アルゴリズムに相当し、0 はメモリのない更新アルゴリズムに相当します。

プロパティ

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

Property説明
AlgType固定値、'LMS'
StepSizeLMS ステップ サイズ パラメーター、非負の実数
LeakageFactorLMS 漏れ係数、0 ~ 1 の実数

すべて折りたたむ

この例では、推奨される 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

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

lineareq オブジェクトと comm.LinearEqualizer オブジェクトを同等の設定で構成します。LeakageFactor プロパティは LMS アルゴリズムから削除されました。comm.LinearEqualizer System object™ では、漏れ係数は常に 1 であると想定されます。

eqOld = lineareq(5,lms(0.05),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'LMS'
  nWeights: 5
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  StepSize: 0.0500
  LeakageFactor: 1
  Weights: [0 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','LMS','StepSize',0.05, ...
    'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'LMS'
  NumTaps: 5
  StepSize: 0.0500
  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

イコライザーを呼び出します。

yOld = equalize(eqOld,r);
yNew = eqNew(r);

信号遅延を考慮する線形イコライザーの使用

lineareq オブジェクトと comm.LinearEqualizer オブジェクトを同等の設定で構成します。送信フィルターと受信フィルターにより、遷移信号と受信信号の間で信号遅延が生じます。この遅延を考慮するには、lineareqRefTap プロパティをサンプル内の遅延値に近い値に設定します。さらに、nWeightsRefTap より大きい値に設定しなければなりません。

eqOld = lineareq(filterDelay*sps+4,lms(0.01),pskmod(0:3,4,pi/4),sps);
eqOld.RefTap = filterDelay*sps+1 % Adjust to synchronize with delayed signal 
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'LMS'
  nWeights: 16
  nSampPerSym: 2
  RefTap: 13
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  StepSize: 0.0100
  LeakageFactor: 1
  Weights: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0

eqNew = comm.LinearEqualizer('NumTaps',16,'Algorithm','LMS','StepSize',0.01, ...
    'Constellation',pskmod(0:3,4,pi/4),'InputSamplesPerSymbol',sps, ...
    'ReferenceTap',filterDelay*sps+1,'InputDelay',0)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'LMS'
  NumTaps: 16
  StepSize: 0.0100
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 13
  InputDelay: 0
  InputSamplesPerSymbol: 2
  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));

comm.LinearEqualizer オブジェクトでは、InputDelay を使用して遅延信号と同期します。NumTapsReferenceTap は遅延値に依存しません。リファレンス タップの代わりに InputDelay を利用して同期することでタップ数を減らすことができます。タップ数を減らすと、イコライザーの自己ノイズも低減されます。

eqNew = comm.LinearEqualizer('NumTaps',11,'Algorithm','LMS','StepSize',0.01, ...
    'Constellation',pskmod(0:3,4,pi/4),'InputSamplesPerSymbol',sps, ...
    'ReferenceTap',6,'InputDelay',filterDelay*sps)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'LMS'
  NumTaps: 11
  StepSize: 0.0100
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 6
  InputDelay: 12
  InputSamplesPerSymbol: 2
  TrainingFlagInputPort: false
  AdaptAfterTraining: true
  InitialWeightsSource: 'Auto'
  WeightUpdatePeriod: 1

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

アルゴリズム

イコライズで示す図に関して、w をすべての重み wi のベクトルとして定義し、u をすべての入力 ui のベクトルとして定義します。現在の重みセット w に基づき、この適応アルゴリズムは次の式で新しい重みセットを作成します。

(LeakageFactor) w + (StepSize) u*e

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

互換性の考慮事項

すべて展開する

R2020a 以降は警告

参考文献

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

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

[3] Kurzweil, Jack, 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 より前に導入