exponenta event banner

rls

(Подлежит удалению) Построить объект адаптивного алгоритма рекурсивных наименьших квадратов (RLS)

rls будет удален в следующем выпуске. Использовать comm.LinearEqualizer или comm.DecisionFeedback вместо этого.

Синтаксис

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

Описание

rls создает объект адаптивного алгоритма, который можно использовать с lineareq функции или dfe для создания объекта эквалайзера. Затем можно использовать объект эквалайзера с помощью equalize функция выравнивания сигнала. Дополнительные сведения о процессе выравнивания сигнала см. в разделе Выравнивание.

alg = rls(forgetfactor) создает объект адаптивного алгоритма на основе алгоритма рекурсивных наименьших квадратов (RLS). Коэффициент забывания - forgetfactor, действительное число от 0 до 1. Матрица обратной корреляции инициализируется скалярным значением.

alg = rls(forgetfactor,invcorr0) устанавливает параметр инициализации для матрицы обратной корреляции. Это скалярное значение используется для инициализации или сброса диагональных элементов матрицы обратной корреляции.

Свойства

В таблице ниже описаны свойства объекта адаптивного алгоритма RLS. Сведения о просмотре или изменении значений объекта адаптивного алгоритма см. в разделе Выравнивание.

СобственностьОписание
AlgTypeФиксированное значение, 'RLS'
ForgetFactorКоэффициент забывания
InvCorrInitСкалярное значение, используемое для инициализации или сброса диагональных элементов матрицы обратной корреляции

Кроме того, при использовании этого объекта адаптивного алгоритма для создания объекта эквалайзера (через lineareq функции или dfe функция), объект эквалайзера имеет InvCorrMatrix свойство, представляющее матрицу обратной корреляции для алгоритма RLS. Начальное значение InvCorrMatrix является InvCorrInit*eye(N), где N - общее число весов эквалайзера.

Примеры

свернуть все

В этом примере настраиваются рекомендуемые comm.LinearEqualizer Системные 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

Вызовите эквалайзеры. Когда ResetBeforeFiltering имеет значение true, каждый вызов equalize объект сбрасывает эквалайзер. Получение вызова эквивалентного поведения reset после каждого вызова comm.LinearEqualizer объект.

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

Вызовите эквалайзеры. Когда ResetBeforeFiltering имеет значение true, каждый вызов equalize объект сбрасывает эквалайзер. Получение вызова эквивалентного поведения reset после каждого вызова comm.LinearEqualizer объект.

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 (ForgingFactor) + uHPu.

где H обозначает эрмитово транспонирование.

Затем новая матрица обратной корреляции задается как

(ForgetFactor) -1 (P - KuHP)

и новый набор весов задается

w + K * e

где оператор * обозначает комплексный конъюгат.

Вопросы совместимости

развернуть все

Предупреждает, начиная с R2020a

Ссылки

[1] Фарханг-Боруджени, Б., Адаптивные фильтры: теория и применение, Чичестер, Англия, Джон Уайли и сыновья, 1998.

[2] Хайкин, С., теория адаптивных фильтров, третье издание, река Верхнее Седло, Нью-Джерси, Прентис-Холл, 1996.

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

[4] Проакис, Джон Г., Digital Communications, Furth Ed., New York, McGraw-Hill, 2001.

Представлен до R2006a