dfe

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

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

Синтаксис

eqobj = dfe(nfwdweights,nfbkweights,alg)
eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst)
eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst,nsamp)

Описание

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

eqobj = dfe(nfwdweights,nfbkweights,alg) создает объект эквалайзера обратной связи решения. Feedforward эквалайзера и фильтры обратной связи имеют nfwdweights и nfbkweights расположенные с интервалами символом комплексные веса, соответственно, которые являются первоначально всеми нулями. alg описывает адаптивный алгоритм, который использует эквалайзер; необходимо создать alg использование любой из этих функций: lms, signlms, normlms, varlms, rls, или cma. Сигнальным созвездием желаемого выхода является [-1 1], который соответствует бинарному манипулированию сдвига фазы (BPSK).

eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst) задает вектор сигнального созвездия желаемого выхода.

eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst,nsamp) создает DFE с незначительно расположенным с интервалами прямым фильтром. Прямой фильтр имеет nfwdweights комплексные веса расположены с интервалами в T/nsamp, где T период символа и nsamp положительное целое число. nsamp = 1 соответствует расположенному с интервалами символом, вперед фильтруют.

Свойства

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

Примечание

Инициализировать или сбросить объект eqobj эквалайзера, введите reset(eqobj).

СвойствоОписание
EqTypeФиксированное значение, 'Decision Feedback Equalizer'
AlgTypeИмя адаптивного алгоритма представлено alg
nWeightsКоличество весов в прямом фильтре и фильтре обратной связи, в формате [nfwdweights, nfbkweights]. Количество весов в прямом фильтре должно быть по крайней мере 1.
nSampPerSymКоличество входных выборок на символ (эквивалентный nsamp входной параметр). Это значение относится к обоим структура эквалайзера (см. использование K в Эквализации), и предположение о сигнале, который будет компенсироваться.
RefTap (за исключением эквалайзеров CMA)Ссылочный индекс касания, между 1 и nfwdweights. Установка этого к значению, больше, чем 1 эффективно, задерживает ссылочный сигнал относительно входного сигнала эквалайзера.
SigConstСигнальное созвездие, вектор, длина которого обычно является степенью 2.
WeightsВектор, который конкатенирует комплексные коэффициенты от прямого фильтра и фильтра обратной связи. Это - набор wi значений в схематическом в Эквализации.
WeightInputsВектор, который конкатенирует входные параметры веса касания для прямого фильтра и фильтра обратной связи. Это - набор ui значений в схематическом в Эквализации.
ResetBeforeFilteringЕсли 1, каждый вызов equalize сбрасывает состояние eqobj перед компенсацией. Если 0, процесс эквализации обеспечивает непрерывность от одного вызова до следующего.
NumSamplesProcessedКоличество выборок эквалайзер, обработанный начиная с последнего сброса. Когда вы создаете или сбрасываете eqobj, этим значением свойства является 0.
Свойства, характерные для адаптивного алгоритма, представлены algСмотрите страницу с описанием для адаптивной функции алгоритма, которая создала alg: lms, signlms, normlms, varlms, rls, или cma.

Отношения среди свойств

Если вы изменяете nWeights, MATLAB обеспечивает непротиворечивость в объекте эквалайзера путем корректировки значений описанных ниже свойств.

СвойствоНастроенное значение
Weightszeros(1,sum(nWeights))
WeightInputszeros(1,sum(nWeights))
StepSize (Эквалайзеры Variable-step-size LMS)InitStep*ones(1,sum(nWeights))
InvCorrMatrix (Эквалайзеры RLS)InvCorrInit*eye(sum(nWeights))

Примеры

свернуть все

Этот пример конфигурирует рекомендуемый comm.DecisionFeedback Система object™ и устаревший dfe покажите с сопоставимыми настройками.

Инициализируйте переменные и поддерживающие объекты

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-алгоритм с эквалайзером обратной связи решения

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

eqOld = dfe(5,3,lms(0.05),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Decision Feedback Equalizer'
  AlgType: 'LMS'
  nWeights: [5 3]
  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 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.DecisionFeedback('NumForwardTaps',5,'NumFeedbackTaps',3, ...
    'Algorithm','LMS','StepSize',0.05, ...
    'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'LMS'
  NumForwardTaps: 5
  NumFeedbackTaps: 3
  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 с эквалайзером обратной связи решения

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

eqOld = dfe(5,3,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Decision Feedback  Equalizer'
  AlgType: 'RLS'
  nWeights: [5 3]
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  Forget Factor: 0.9500
  InvCorrInit: 0.1000
  InvCorrMatrix: [8×8 double]
  Weights: [0 0 0 0 0 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.DecisionFeedback('NumForwardTaps',5,'NumFeedbackTaps',3,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'RLS'
  NumForwardTaps: 5
  NumFeedbackTaps: 3
  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.DecisionFeedback объект.

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));

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

eqOld = dfe(5,3,rls(0.95),pskmod(0:3,4,pi/4))
eqOld =
  EqType: 'Decision Feedback Equalizer'
  AlgType: 'RLS'
  nWeights: [5 3]
  nSampPerSym: 1
  RefTap: 1
  SigConst: [0.7071 + 0.7071i -0.7071 + 0.7071i -0.7071 - 0.7071i 0.7071 - 0.7071i]
  ForgetFactor: 0.9500
  InvCorrInit: 0.1000
  InvCorrMatrix: [8×8 double]
  Weights: [0 0 0 0 0 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0
eqNew = comm.DecisionFeedback('NumForwardTaps',5,'NumFeedbackTaps',3,'Algorithm','RLS', ...
    'ForgettingFactor',0.95,'Constellation',pskmod(0:3,4,pi/4),'ReferenceTap',1, ...
    'InitialInverseCorrelationMatrix',eye(5)*0.2)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'RLS'
  NumForwardTaps: 5
  NumFeedbackTaps: 3
  ForgettingFactor: 0.9500
  InitialInverseCorrelationMatrix: [8×8 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.DecisionFeedback объект.

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));

Используйте эквалайзеры обратной связи решения, рассматривая задержки сигнала

Сконфигурируйте dfe и comm.DecisionFeedback объекты с сопоставимыми настройками. Передача и получает результат фильтров в задержке сигнала между транзитом и получает сигналы. Объясните эту задержку путем установки RefTap свойство dfe к значению близко к значению задержки в выборках. Кроме того, nWeights должен быть установлен в значение, больше, чем RefTap.

eqOld = dfe(filterDelay*sps+4,6,lms(0.01),pskmod(0:3,4,pi/4),sps);
eqOld.RefTap = filterDelay*sps+1 % Adjust to synchronize with delayed signal 
eqOld =
  EqType: 'Decision Feedback Equalizer'
  AlgType: 'LMS'
  nWeights: [16 6]
  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 0 0 0 0 0 0]
  WeightInputs: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
  ResetBeforeFiltering: 1
  NumSamplesProcessed: 0

eqNew = comm.DecisionFeedback('NumForwardTaps',filterDelay*sps+4, ...
    'NumFeedbackTaps',6,'Algorithm','LMS','StepSize',0.01, ...
    'Constellation',pskmod(0:3,4,pi/4),'InputSamplesPerSymbol',sps, ...
    'ReferenceTap',filterDelay*sps+1,'InputDelay',0)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'LMS'
  NumForwardTaps: 16
  NumFeedbackTaps: 6
  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.DecisionFeedback объект.

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.DecisionFeedback объект, InputDelay используется, чтобы синхронизироваться с задержанным сигналом. NumForwardTaps, NumFeedbackTaps, и ReferenceTap независимы от значения задержки. Мы можем сократить количество касаний путем использования InputDelay синхронизироваться вместо ссылочного касания. Сокращение количества касаний также уменьшает эквалайзер сам шум.

eqNew = comm.DecisionFeedback('NumForwardTaps',11,'NumFeedbackTaps',4, ...
    'Algorithm','LMS','StepSize',0.01, ...
    'Constellation',pskmod(0:3,4,pi/4),'InputSamplesPerSymbol',sps, ...
    'ReferenceTap',6,'InputDelay',filterDelay*sps)
eqNew = comm.DecisionFeedback with properties:
  Algorithm: 'LMS'
  NumForwardTaps: 11
  NumFeedbackTaps: 4
  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

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