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 объекты с сопоставимыми настройками. LeakageFactor свойство было удалено из LMS-алгоритма. 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) Ре (ggprev)

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

Затем новым размером шага дают

  • μ0, если это между MinStep и MaxStep

  • MinStep, если μ0 <MinStep

  • MaxStep, если μ0> MaxStep

Новым набором весов дают

(LeakageFactor) w + 2 μ g*

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

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

Предупреждает запуск в R2020a

Ссылки

[1] Farhang-Boroujeny, B., адаптивные фильтры: теория и приложения, Чичестер, Англия, Вайли, 1998.

Смотрите также

Объекты

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