exponenta event banner

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) создает объект эквалайзера обратной связи принятия решения. Фильтры обратной связи и обратной связи эквалайзера имеют 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.

Взаимосвязи между свойствами

При изменении nWeightsMATLAB поддерживает согласованность в объекте эквалайзера путем корректировки значений перечисленных ниже свойств.

СобственностьСкорректированное значение
Weightszeros(1,sum(nWeights))
WeightInputszeros(1,sum(nWeights))
StepSize(Корректоры 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