varlms

(Будет удален) Создайте объект адаптивного алгоритма наименьшего среднего размера переменной (LMS)

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

Синтаксис

alg = varlms(initstep,incstep,minstep,maxstep)

Описание

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

alg = varlms(initstep,incstep,minstep,maxstep) создает объект адаптивного алгоритма на основе алгоритма наименьшего среднего квадрата (LMS) переменного размера. initstep - начальное значение параметра размера шага. incstep - шаг, на который изменяется размер шага от итерации до итерации. minstep и maxstep - пределы, между которыми может варьироваться размер шага.

Свойства

В таблице ниже описаны свойства объекта адаптивного алгоритма LMS переменного размера. Чтобы узнать, как просмотреть или изменить значения объекта адаптивного алгоритма, смотрите эквализация.

СвойствоОписание
AlgTypeФиксированное значение, 'Variable Step Size LMS'
LeakageFactorКоэффициент утечки LMS, действительное число от 0 до 1. Значение 1 соответствует обычному алгоритму обновления веса, в то время как значение 0 соответствует безпамятному алгоритму обновления.
InitStepНачальное значение размера шага, когда алгоритм запускается
IncStepШаг, на который размер шага изменяется с итерации на итерацию
MinStepМинимальное значение размера шага
MaxStepМаксимальное значение размера шага

Кроме того, когда вы используете этот объект адаптивного алгоритма для создания объекта эквалайзера (через lineareq или dfe функция), объект эквалайзера имеет StepSize свойство. Значение свойства является вектором, который перечисляет текущий размер шага для каждого веса в эквалайзере.

Примеры

свернуть все

Этот пример конфигурирует рекомендуемые 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

Используйте LMS-алгоритм с линейным эквалайзером

Сконфигурируйте lineareq и comm.LinearEqualizer объекты с сопоставимыми настройками. The LeakageFactor свойство удалено из LMS-алгоритма. The comm.LinearEqualizer Системный 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 объекты с сопоставимыми настройками. Фильтры передачи и приема приводят к задержке сигнала между транзитным и приемным сигналами. Рассчитать эту задержку можно путем установки RefTap свойство lineareq к значению, близкому к значению задержки в выборках. Кроме того, nWeights должно быть задано значение, больше RefTap.

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

Вызовите эквалайзеры. Когда 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));

В comm.LinearEqualizer объект, InputDelay используется для синхронизации с задержанным сигналом. NumTaps и ReferenceTap не зависят от значения задержки. Мы можем уменьшить количество ответвлений, используя 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 как вектор всех токовых весов w i и задайте u как вектор всех входов u i. На основе текущего размера шага

μ0 = μ + (IncStep) Re (gprev)

где g = ue*, g предыдущая - аналогичное выражение от предыдущей итерации, и оператор * обозначает комплексный сопряженный.

Затем новый размер шага задается как

  • мк0, если он находится между MinStep и MaxStep

  • MinStep, если мк0 < MinStep

  • MaxStep, если мк0 > MaxStep

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

(LeakageFactor) ш + 2 мкг*

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

расширить все

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

Ссылки

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

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