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.

Отношения между свойствами

Если вы меняете 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 объекты с сопоставимыми настройками. The LeakageFactor свойство удалено из LMS-алгоритма. The 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