exponenta event banner

signlms

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

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

Синтаксис

alg = signlms(stepsize)
alg = signlms(stepsize,algtype)

Описание

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

alg = signlms(stepsize) создает объект адаптивного алгоритма на основе алгоритма наименьшего квадрата со знаком (LMS) с размером шага stepsize.

alg = signlms(stepsize,algtype) создает объект адаптивного алгоритма типа algtype из семейства подписанных алгоритмов СУО. В таблице ниже перечислены возможные значения algtype.

Значение algtypeТип подписанного алгоритма LMS
'Sign LMS'Подписать LMS (по умолчанию)
'Signed Regressor LMS'Подписанный регрессор LMS
'Sign Sign LMS'Знаковый LMS

Свойства

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

СобственностьОписание
AlgTypeТип подписанного алгоритма СУО, соответствующего algtype входной аргумент. После создания объекта изменить значение этого свойства невозможно.
StepSizeПараметр размера шага LMS, неотрицательное вещественное число
LeakageFactorКоэффициент утечки LMS, действительное число от 0 до 1. Значение 1 соответствует обычному алгоритму обновления веса, в то время как значение 0 соответствует алгоритму обновления без памяти.

Примеры

свернуть все

В этом примере настраиваются рекомендуемые 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 + (StepSize) u*sgn(Re(e)), для знака LMS

  • (LeakageFactor) w + (StepSize) sgn(Re(u)) Re(e), для подписанного регрессора LMS

  • (LeakageFactor) w + (StepSize) sgn(Re(u)) sgn(Re(e)), для знакового LMS

где * оператор обозначает комплексный конъюгат и sgn обозначает функцию signum (sign в техническом вычислительном ПО MATLAB ®).

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

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

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

Ссылки

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

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

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