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 из семейства подписанных LMS-алгоритмов. В таблице ниже перечислены возможные значения algtype.

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

Свойства

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

СвойствоОписание
AlgTypeТип алгоритма LMS-алгоритм со знаком, соответствующий 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 объекты с сопоставимыми настройками. 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. На основе текущего набора весов, 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] Farhang-Boroujeny, B., Adaptive Filters: Theory and Applications, Chichester, England, John Wiley & Sons, 1998.

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

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