signlms

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

signlms будет удален в будущем релизе. Рассмотрите использование 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 объекты с сопоставимыми настройками. 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. На основе текущего набора весов, 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 обозначает сигнум-функцию (sign в MATLAB® техническое вычислительное программное обеспечение).

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

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

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

Ссылки

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

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

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

Объекты

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

Для просмотра документации необходимо авторизоваться на сайте