equalize

(Чтобы быть удаленным), Компенсируют сигнал с помощью объекта эквалайзера

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

Синтаксис

y = equalize(eqobj,x)
y = equalize(eqobj,x,trainsig)
[y,yd] = equalize(...)
[y,yd,e] = equalize(...)

Описание

y = equalize(eqobj,x) обрабатывает вектор сгенерированного модулированного сигнала x с объектом eqobj эквалайзера и возвращает компенсируемый сигнальный вектор y. В конце процесса, eqobj содержит обновленную информацию состояния, такую как значения веса эквалайзера и значения входного буфера. Создать eqobj, используйте lineareq или dfe функция. equalize функция принимает что x сигнала производится в nsamp выборки на символ, где nsamp значение nSampPerSym свойство eqobj. Для адаптивных алгоритмов кроме CMA эквалайзер адаптируется в направленном на решение режиме с помощью детектора, заданного SigConst свойство eqobj. Задержкой эквалайзера является (eqobj.RefTap-1)/eqobj.nSampPerSym.

Обратите внимание на то, что (eqobj.RefTap-1) должно быть целочисленное кратное nSampPerSym. Для незначительно распределенного эквалайзера касания расположены с интервалами в частях периода символа. Ссылочное касание принадлежит учебным символам, и таким образом, должно совпасть с целым числом символов (т.е. целое число выборок на символ). eqobj.RefTap=1 соответствует первому символу, eqobj.RefTap=nSampPerSym+1 к второму, и так далее. Поэтому (eqobj.RefTap-1) должно быть целочисленное кратное nSampPerSym.

Если eqobj.ResetBeforeFiltering 0, equalize использует существующую информацию состояния в eqobj при запуске операции эквализации. В результате equalize(eqobj,[x1 x2]) эквивалентно [equalize(eqobj,x1) equalize(eqobj,x2)]. Сбрасывать eqobj вручную, применяйтесь reset функционируйте к eqobj.

Если eqobj.ResetBeforeFiltering 1, equalize сброс eqobj прежде, чем запустить операцию эквализации, перезаписывая любую предыдущую информацию состояния в eqobj.

y = equalize(eqobj,x,trainsig) первоначально использует обучающую последовательность, чтобы адаптировать эквалайзер. После обработки обучающей последовательности эквалайзер адаптируется в направленном на решение режиме. Длина вектора trainsig должно быть меньше чем или равно length(x)-(eqobj.RefTap-1)/eqobj.nSampPerSym.

[y,yd] = equalize(...) возвращает векторный yd из обнаруженных символов данных.

[y,yd,e] = equalize(...) возвращает результат ошибочного вычисления. Для адаптивных алгоритмов кроме CMA, e вектор из ошибок между y и опорный сигнал, где опорный сигнал состоит из обучающей последовательности или обнаруженных символов.

Примеры

свернуть все

Этот пример конфигурирует рекомендуемый 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,x(1:100));
yNew = eqNew(r,x(1:100));

Используйте алгоритм RLS с линейным эквалайзером

Сконфигурируйте lineareq и comm.LinearEqualizer объекты с сопоставимыми настройками.

eqOld = lineareq(5,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'RLS'
  nWeights: 5
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  InvCorrInit: 0.1000
  InvCorrMatrix: [5×5 double]
  Weights: [0 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'RLS'
  NumTaps: 5
  ForgettingFactor: 0.9500
  InitialInverseCorrelationMatrix: 0.1000
  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

Вызовите эквалайзеры. Когда 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));

Сконфигурируйте lineareq и comm.LinearEqualizer объекты с сопоставимыми настройками. Для comm.LinearEqualizer объект, набор начальная матрица обратной корреляции к eye(5)*0.2.

eqOld = lineareq(5,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'RLS'
  nWeights: 5
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  InvCorrInit: 0.1000
  InvCorrMatrix: [5×5 double]
  Weights: [0 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1, ...
    'InitialInverseCorrelationMatrix',eye(5)*0.2)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'RLS'
  NumTaps: 5
  ForgettingFactor: 0.9500
  InitialInverseCorrelationMatrix: [5×5 double]
  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

Вызовите эквалайзеры. Когда 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));

Используйте алгоритм CMA с линейным эквалайзером

Сконфигурируйте lineareq и comm.LinearEqualizer объекты с сопоставимыми настройками. LeakageFactor свойство было удалено из LMS-алгоритма. comm.LinearEqualizer Система object™ принимает, что фактор утечки всегда равняется 1.

eqOld = lineareq(5,cma(0.05),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Linear Equalizer'
  AlgType: 'Constant Modulus'
  nWeights: 5
  nSampPerSym: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  StepSize: 0.0500
  LeakageFactor: 1
  Weights: [1 0 0 0 0]
  WeightInputs: [0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.LinearEqualizer('NumTaps',5,'Algorithm','CMA','StepSize',0.05, ...
    'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.LinearEqualizer with properties:
  Algorithm: 'CMA'
  NumTaps: 5
  StepSize: 0.0500
  Constellation: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ReferenceTap: 1
  InputSamplesPerSymbol: 1
  AdaptWeightsSource: 'Property'
  AdaptWeights: 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));

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

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

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

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

Объекты

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