lms

(Чтобы быть удаленным) наименьшее количество среднего квадратичного (LMS) Построения адаптивный объект алгоритма

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

Синтаксис

alg = lms(stepsize)
alg = lms(stepsize,leakagefactor)

Описание

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

alg = lms(stepsize) создает адаптивный алгоритм, основанный на объектах на алгоритме наименьшее количество среднего квадратичного (LMS) с размером шага stepsize.

alg = lms(stepsize,leakagefactor) устанавливается коэффициент утечки LMS-алгоритма. leakagefactor должен быть между 0 и 1. Значение 1 соответствует обычному алгоритму обновления веса, и значение 0 соответствует алгоритму обновления без памяти.

Свойства

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

СвойствоОписание
AlgTypeФиксированное значение, 'LMS'
StepSizeПараметр размера шага LMS, неотрицательное вещественное число
LeakageFactorФактор утечки LMS, вещественное число между 0 и 1

Примеры

свернуть все

Этот пример конфигурирует рекомендуемый 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 как вектор из всех весов wi и задайте u как вектор из всех входных параметров ui. На основе текущего набора весов, w, этот адаптивный алгоритм создает новый набор весов, данных

(LeakageFactor) w + (StepSizeU*e

где оператор * обозначает сопряженное комплексное число.

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

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

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

Ссылки

[1] Farhang-Boroujeny, B., адаптивные фильтры: теория и Applications, Chichester, England, John Wiley & Sons, 1998.

[2] Haykin, Саймон, адаптивная теория фильтра, треть Эд., верхний Сэддл-Ривер, NJ, Prentice Hall, 1996.

[3] Kurzweil, Джек, введение в цифровую связь, Нью-Йорк, John Wiley & Sons, 2000.

[4] Proakis, Джон Г., цифровая связь, четвертый Эд., Нью-Йорк, McGraw-Hill, 2001.

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

Объекты

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