Main Content

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

RLS アルゴリズムと LMS アルゴリズムの比較

周波数選択性フェージング チャネルを通して渡された QAM 信号を、RLS アルゴリズムと LMS アルゴリズムを使用してイコライズします。2 つのアルゴリズムのパフォーマンスを比較します。

変調次数を指定します。対応する QAM 基準コンスタレーションを生成します。

M = 16; 
sigConst = qammod(0:M-1,M,'UnitAveragePower',true);

3 つのタップをもつ周波数選択性静的チャネルを作成します。

rchan = comm.RayleighChannel('SampleRate',1000, ...
    'PathDelays',[0 1e-3 2e-3],'AveragePathGains',[0 -3 -6], ...
    'MaximumDopplerShift',0, ...
    'RandomStream','mt19937ar with seed','Seed',73);

RLS イコライザー

RLS イコライザー オブジェクトを作成します。

eqrls = lineareq(6,rls(0.99,0.1)); 
eqrls.SigConst = sigConst; 
eqrls.ResetBeforeFiltering = 0;

ランダムなトレーニング シーケンスを生成し、QAM 変調します。レイリー フェージング チャネルを通してシーケンスを渡します。イコライザーを通して受信信号とトレーニング信号を渡し、イコライザーのタップ重みを設定します。

trainData = randi([0 M-1],200,1);
trainSig = qammod(trainData,M,'UnitAveragePower',true);
rxSig = rchan(trainSig);
[~,~,errorSig] = equalize(eqrls,rxSig,trainSig);

誤差推定の振幅をプロットします。

plot(abs(errorSig))
title('Error Estimate, RLS Equalizer')
xlabel('Symbols')
ylabel('Amplitude')

誤差は、200 シンボル以内でほぼ削除されています。

周波数選択性チャネルを通して QAM 信号を送信します。あらかじめ '学習させた' RLS イコライザーを使用して、受信信号をイコライズします。処理ループの実行に要する時間を測定します。

tic
for k = 1:20
   data = randi([0 M-1],1000,1); % Random message
   txSig = qammod(data,M,'UnitAveragePower',true);

   % Introduce channel distortion.
   rxSig = rchan(txSig);

   % Equalize the received signal.
   eqSig = equalize(eqrls,rxSig);

end
rlstime = toc;

受信信号とイコライズされた信号のコンスタレーション ダイアグラムをプロットします。

h = scatterplot(rxSig,1,0,'c.');
hold on
scatterplot(eqSig,1,0,'b.',h)
legend('Received Signal','Equalized Signal')
title('RLS Equalizer')
hold off

イコライザーがフェージング チャネルの影響を除去しました。

LMS イコライザー

LMS イコライザーを使用してイコライズ処理を繰り返します。LMS イコライザー オブジェクトを作成します。

eqlms = lineareq(6,lms(0.03)); 
eqlms.SigConst = sigConst; 
eqlms.ResetBeforeFiltering = 0;

LMS イコライザーを学習させます。

trainData = randi([0 M-1],1000,1);
trainSig = qammod(trainData,M,'UnitAveragePower',true);
rxSig = rchan(trainSig);
[~,~,errorSig] = equalize(eqlms,rxSig,trainSig);

誤差推定の振幅をプロットします。

plot(abs(errorSig))
title('Error Estimate, LMS Equalizer')
xlabel('Symbols')
ylabel('Amplitude')

LMS イコライザーの学習には 1000 シンボルが必要です。

同じ周波数選択性チャネルを通して QAM 信号を送信します。あらかじめ '学習させた' LMS イコライザーを使用して、受信信号をイコライズします。処理ループの実行に要する時間を測定します。

tic
for k = 1:20
   data = randi([0 M-1],1000,1); % Random message
   txSig = qammod(data,M,'UnitAveragePower',true);

   % Introduce channel distortion.
   rxSig = rchan(txSig);

   % Equalize the received signal.
   eqSig = equalize(eqlms,rxSig);

end
lmstime = toc;

受信信号とイコライズされた信号のコンスタレーション ダイアグラムをプロットします。

h = scatterplot(rxSig,1,0,'c.');
hold on
scatterplot(eqSig,1,0,'b.',h)
legend('Received Signal','Equalized Signal')
title('LMS Equalizer')

イコライザーがフェージング チャネルの影響を除去します。

2 つのイコライザー アルゴリズムのループ実行時間を比較します。

[rlstime lmstime]

50% の時間で処理ループが実行されるため、LMS アルゴリズムの方がより計算効率に優れています。ただし、LMS アルゴリズムには 5 倍の長さのトレーニング シーケンスが必要です。