This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.


Construct decision-feedback equalizer object


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


The dfe function creates an equalizer object that you can use with the equalize function to equalize a signal. To learn more about the process for equalizing a signal, see Adaptive Algorithms.

eqobj = dfe(nfwdweights,nfbkweights,alg) constructs a decision feedback equalizer object. The equalizer's feedforward and feedback filters have nfwdweights and nfbkweights symbol-spaced complex weights, respectively, which are initially all zeros. alg describes the adaptive algorithm that the equalizer uses; you should create alg using any of these functions: lms, signlms, normlms, varlms, rls, or cma. The signal constellation of the desired output is [-1 1], which corresponds to binary phase shift keying (BPSK).

eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst) specifies the signal constellation vector of the desired output.

eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst,nsamp) constructs a DFE with a fractionally spaced forward filter. The forward filter has nfwdweights complex weights spaced at T/nsamp, where T is the symbol period and nsamp is a positive integer. nsamp = 1 corresponds to a symbol-spaced forward filter.


The table below describes the properties of the decision feedback equalizer object. To learn how to view or change the values of a decision feedback equalizer object, see Accessing Properties of an Equalizer.


To initialize or reset the equalizer object eqobj, enter reset(eqobj).

EqTypeFixed value, 'Decision Feedback Equalizer'
AlgTypeName of the adaptive algorithm represented by alg
nWeightsNumber of weights in the forward filter and the feedback filter, in the format [nfwdweights, nfbkweights]. The number of weights in the forward filter must be at least 1.
nSampPerSymNumber of input samples per symbol (equivalent to nsamp input argument). This value relates to both the equalizer structure (see the use of K in Decision-Feedback Equalizers) and an assumption about the signal to be equalized.
RefTap (except for CMA equalizers)Reference tap index, between 1 and nfwdweights. Setting this to a value greater than 1 effectively delays the reference signal with respect to the equalizer's input signal.
SigConstSignal constellation, a vector whose length is typically a power of 2.
WeightsVector that concatenates the complex coefficients from the forward filter and the feedback filter. This is the set of wi values in the schematic in Decision-Feedback Equalizers.
WeightInputsVector that concatenates the tap weight inputs for the forward filter and the feedback filter. This is the set of ui values in the schematic in Decision-Feedback Equalizers.
ResetBeforeFilteringIf 1, each call to equalize resets the state of eqobj before equalizing. If 0, the equalization process maintains continuity from one call to the next.
NumSamplesProcessedNumber of samples the equalizer processed since the last reset. When you create or reset eqobj, this property value is 0.
Properties specific to the adaptive algorithm represented by algSee reference page for the adaptive algorithm function that created alg: lms, signlms, normlms, varlms, rls, or cma.

Relationships Among Properties

If you change nWeights, MATLAB maintains consistency in the equalizer object by adjusting the values of the properties listed below.

PropertyAdjusted Value
StepSize (Variable-step-size LMS equalizers)InitStep*ones(1,sum(nWeights))
InvCorrMatrix (RLS equalizers)InvCorrInit*eye(sum(nWeights))

An example illustrating relationships among properties is in Linked Properties of an Equalizer Object.


collapse all

Equalize a signal using a decison feedback equalizer with least mean square (LMS) adaptation.

Set Up Transmitter

Create a QPSK modulated transmission signal containing random message data. Pass the signal through an arbitrary channel filter to add signal distortion.

M = 4; % Alphabet size for modulation
msg = randi([0 M-1],2500,1); % Random message
hMod = comm.QPSKModulator('PhaseOffset',0);
modmsg = hMod(msg); % Modulate using QPSK
chan = [.986; .845; .237; .123+.31i]; % Channel coefficients
filtmsg = filter(chan,1,modmsg); % Introduce channel distortion

Set Up Equalizer

Create a DFE object that has 5 forward taps, 3 feed-back taps. Specify the least mean square algorithm inline when creating the equalizer object. Initailize additional equalizer properties.

dfeObj = dfe(5,3,lms(0.01));
% Set the signal constellation
dfeObj.SigConst = hMod((0:M-1)')';
% Maintain continuity between calls to equalize
dfeObj.ResetBeforeFiltering = 0;
% Define initial coefficients to help convergence
dfeObj.Weights = [0 1 0 0 0 0 0 0];

Equalize Received Signal

eqRxSig = equalize(dfeObj,filtmsg);

Plot Results

Compare the first 200 equalized symbols (initial) to the remaining equalized signal (final).

initial = eqRxSig(1:200);
hold on
final = eqRxSig(end-200:end);
legend('initial', 'final')

Equalization of the received signal converges within approximately 200 samples.

Apply a decision feedback equalizer (DFE) to an 8-PSK modulated signal impaired by a frequency selective channel. The DFE uses 600 training symbols.

Create a PSK modulator System object™ and set the modulation order to 8.

modulator = comm.PSKModulator('ModulationOrder',8);

Create a column vector of 8-ary random integer symbols. Seed the random number generator, rng, to produce a predictable sequence of numbers.

data = randi([0 7],5000,1);

Use the modulator System object to modulate the random data.

modData = modulator(data);

Create a Rayleigh channel System object to define a static frequency selective channel with four taps. Pass the modulated data through the channel object.

chan = comm.RayleighChannel('SampleRate',1000, ...
    'PathDelays',[0 0.002 0.004 0.008],'AveragePathGains',[0 -3 -6 -9]);
rxSig = chan(modData);

Create a DFE equalizer that has 10 feed forward taps and five feedback taps. The equalizer uses the LMS update method with a step size of 0.01.

numFFTaps = 10;
numFBTaps = 5;
equalizerDFE = dfe(numFFTaps,numFBTaps,lms(0.01));

Set the SigConst property of the DFE equalizer to match the 8-PSK modulator reference constellation. The reference constellation is determined by using the constellation method. For decision directed operation, the DFE must use the same signal constellation as the transmission scheme.

equalizerDFE.SigConst = constellation(modulator).';

Equalize the signal to remove the effects of channel distortion. Use the first 600 symbols to train the equalizer.

trainlen = 600;
[eqSig,detectedSig] = equalize(equalizerDFE,rxSig, ...

Plot the received signal, equalizer output after training, and the ideal signal constellation.

hScatter = scatterplot(rxSig,1,trainlen,'bx');
hold on
legend('Received signal','Equalized signal',...
    'Ideal signal constellation');
hold off

Create a PSK demodulator System object. Use the object to demodulate the received signal before and after equalization.

demod = comm.PSKDemodulator('ModulationOrder',8);
demodSig = demod(rxSig);
demodEqualizedSig = demod(detectedSig);

Compute the error rates for the two demodulated signals and compare the results.

errorCalc = comm.ErrorRate;
nonEqualizedSER = errorCalc(data(trainlen+1:end), ...
equalizedSER = errorCalc(data(trainlen+1:end), ...
disp('Symbol error rates with and without equalizer:')
Symbol error rates with and without equalizer:
disp([equalizedSER(1) nonEqualizedSER(1)])
         0    0.5225

The equalizer helps eliminate the distortion introduced by the frequency selective channel and reduces the error rate.

Introduced before R2006a

Was this topic helpful?