Сравнение RLS и LMS-алгоритмов

Выравнивание сигнала QAM, прошедшего через частотно-избирательный канал с замираниями с помощью RLS и LMS-алгоритмов. Сравните эффективность двух алгоритмов.

Задайте порядок модуляции. Сгенерируйте соответствующее ссылочное созвездие QAM.

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

Создайте частотно-избирательный статический канал, имеющий три отвода.

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')

Эквалайзер удаляет эффекты затухающего канала.

Сравните время выполнения цикла для двух алгоритмов эквалайзера.

[rlstime lmstime]

Этот LMS-алгоритм является более в вычислительном отношении эффективным, поскольку для выполнения цикла обработки потребовалось 50% времени. Однако обучающая последовательность, требуемая LMS-алгоритмом, в 5 раз длиннее.