Equalize modulated signals using decision feedback filtering
Communications Toolbox / Equalizers
The Decision Feedback Equalizer block uses a decision feedback filter tap delay line with a weighted sum to equalize modulated signals transmitted through a dispersive channel. Using an estimate of the channel modeled as a finite input response (FIR) filter, the block processes input frames and outputs the estimated signal.
This icon shows the block with all ports enabled for configurations that use the LMS or RLS adaptive algorithm.
This icon shows the block with all ports enabled for configurations that use the CMA adaptive algorithm.
in
— Input signalInput signal, specified as a column vector. The vector length of in must be equal to an integer multiple of the Number of input samples per symbol parameter. For more information, see Symbol Tap Spacing.
Data Types: double
Complex Number Support: Yes
Desired
— Training symbolsTraining symbols, specified as a column vector. The vector length of
Desired must be less than or equal to the length of input
in. The Desired input port is ignored when
the Train input port is 0
.
To enable this port, set the Adaptive algorithm parameter
to LMS
or RLS
.
Data Types: double
Complex Number Support: Yes
Train
— Train equalizer flagTrain equalizer flag, specified as 1
or 0
.
The block starts training when this value changes from 0
to
1
(at the rising edge). The block trains until all symbols in the
Desired input port are processed.
To enable this port, set the Adaptive algorithm parameter
to LMS
or RLS
and select the Enable
training control input parameter.
Data Types: Boolean
Update
— Update tap weights flag1
 0
Update tap weights flag, specified as 1
or
0
. The tap weights are updated when this value is
1
.
To enable this port, set the Adaptive algorithm parameter
to CMA
and the Source of adapt weights flag
parameter to Input port
.
Data Types: Boolean
Reset
— Reset equalizer flag1
 0
Reset equalizer flag, specified as 1
or 0
.
If Reset is set to 1
, the block resets the tap
weights before processing the incoming signal. The block performs initial training
until all symbols in the Desired input port are processed.
To enable this port, select the Enable reset input parameter.
Data Types: Boolean
Out
— Equalized symbolsEqualized symbols, returned as a column vector that has the same length as input signal in.
This port is unnamed until you select the Output error signal or Output taps weights parameter.
Err
— Error signalError signal, returned as a column vector that has the same length as input signal in.
w
— Tap weightsTap weights, returned as an N_{Taps}by1 vector, where N_{Taps} is equal to the sum of the Number of forward taps and Number of feedback taps parameter values. w contains the tap weights from the last tap weight update.
Number of forward taps
— Number of forward equalizer taps5
(default)  positive integerNumber of forward equalizer taps, specified as a positive integer.
Number of feedback taps
— Number of feedback equalizer taps3
(default)  positive integerNumber of feedback equalizer taps, specified as a positive integer.
Signal constellation
— Signal constellationpskmod(0:3,4,pi/4)
(default)  vectorSignal constellation, specified as a vector. The default value is a QPSK
constellation generated using this code: pskmod(0:3,4,pi/4)
.
Tunable: Yes
Number of input samples per symbol
— Number of input samples per symbol1
(default)  positive integerNumber of input samples per symbol, specified as a positive integer. Setting this
parameter to any number greater than 1
effectively creates a
fractionally spaced equalizer. For more information, see Symbol Tap Spacing.
Adaptive algorithm
— Adaptive algorithmLMS
(default)  RLS
 CMA
Adaptive algorithm used for equalization, specified as one of these values:
LMS
— Update the equalizer tap weights using the
Least Mean Square (LMS) Algorithm.
RLS
— Update the equalizer tap weights using the
Recursive Least Square (RLS) Algorithm.
CMA
— Update the equalizer tap weights using the
Constant Modulus Algorithm (CMA).
Step size
— Step size0.01
(default)  positive scalarStep size used by the adaptive algorithm, specified as a positive scalar. Increasing the step size reduces the equalizer convergence time but causes the equalizer output estimates to be less stable.
Tunable: Yes
To enable this parameter, set Adaptive algorithm to
LMS
or CMA
.
Forgetting factor
— Forgetting factor0.99
(default)  scalar in the range (0, 1]Forgetting factor used by the adaptive algorithm, specified as a scalar in the range (0, 1]. Decreasing the forgetting factor reduces the equalizer convergence time but causes the equalizer output estimates to be less stable.
Tunable: Yes
To enable this parameter, set Adaptive algorithm to
RLS
.
Initial inverse correlation matrix
— Initial inverse correlation matrix0.1
(default)  scalar  matrixInitial inverse correlation matrix, specified as a scalar or an
N_{Taps}byN_{Taps}
matrix. N_{Taps} is equal to the sum of the
Number of forward taps and Number of feedback
taps parameter values. If you specify this value as a scalar,
a, the equalizer sets the initial inverse correlation matrix to
a times the identity matrix:
a(eye
(N_{Taps})).
Tunable: Yes
To enable this parameter, set Adaptive algorithm to
RLS
.
Reference tap
— Reference tap3
(default)  positive integerReference tap, specified as a positive integer less than or equal to the Number of forward taps parameter value. The equalizer uses the reference tap location to track the main energy of the channel.
Input signal delay (samples)
— Input signal delay0
(default)  nonnegative integerInput signal delay in samples relative to the reset time of the equalizer, specified
as a nonnegative integer. If the input signal is a vector of length greater than 1, then
the input delay is relative to the start of the input vector. If the input signal is a
scalar, then the input delay is relative to the first call of the block and to the first
call of the block after the Reset input port toggles to
1
.
To enable this parameter, set Adaptive algorithm to
LMS
or RLS
.
Source of adapt weights flag
— Source of adapt tap weights requestProperty
(default)  Input port
Source of the adapt tap weights request, specified as one of these values:
Property
— Specify this value to use the Adaptive
algorithm parameter to control when the block adapts tap
weights.
Input port
— Specify this value to use the
Update input port to control when the block adapts tap
weights.
To enable this parameter, set Adaptive algorithm to
CMA
.
Adapt tap weights
— Adapt tap weightson
(default)  off
Select this parameter to adaptively update the equalizer tap weights. If this parameter is cleared, the block keeps the equalizer tap weights unchanged.
Tunable: Yes
To enable this parameter, set Adaptive algorithm to
CMA
and Source of adapt weights flag to
Property
.
Initial tap weights source
— Source for initial tap weightsAuto
(default)  Property
Source for initial tap weights, specified as one of these values:
Auto
— Initialize the tap weights to the
algorithmspecific default values, as described in the Initial
weights parameter.
Property
— Initialize the tap weights using the
Initial weights parameter value.
Initial weights
— Initial tap weights0
or [0;0;1;0;0]
(default)  scalar  column vectorInitial tap weights used by the adaptive algorithm, specified as a scalar or an
N_{Taps}by1 vector.
N_{Taps} is equal to the sum of the
Number of forward taps and Number of feedback
taps parameter values. The default is 0
when the
Adaptive algorithm parameter is set to LMS
or
RLS
. The default is [0;0;1;0;0]
when the
Adaptive algorithm parameter is set to
CMA
.
If you specify Initial weights as a vector, the vector length must be N_{Taps}. If you specify Initial weights as a scalar, the equalizer uses scalar expansion to create a vector of length N_{Taps} with all values set to Initial weights.
Tunable: Yes
To enable this parameter, set Initial tap weights source to
Property
.
Tap weight update period (symbols)
— Tap weight update period1
(default)  positive integerTap weight update period in symbols, specified as a positive integer. The equalizer updates the tap weights after processing this number of symbols.
Enable training control input
— Enable training control inputoff
(default)  on
Select this parameter to enable input port Train. If this parameter is cleared, the block does not reenter training mode after the initial tap training.
Tunable: Yes
To enable this parameter, set Adaptive algorithm to
LMS
or RLS
.
Update tap weights when not training
— Update tap weights when not trainingon
(default)  off
Select this parameter to use decision directed mode to update equalizer tap weights. If this parameter is cleared, the block keeps the equalizer tap weights unchanged after training.
Tunable: Yes
To enable this parameter, set Adaptive algorithm to
LMS
or RLS
.
Enable reset input
— Enable reset inputoff
(default)  on
Select this parameter to enable input port Train. If this parameter is cleared, the block does not reenter training mode after the initial tap training.
Tunable: Yes
Output error signal
— Enable error signal outputoff
(default)  on
Select this parameter to enable output port Err containing the equalizer error signal.
Tunable: Yes
Output taps weights
— Enable tap weights outputoff
(default)  on
Select this parameter to enable output port w containing tap weights from the last tap weight update.
Tunable: Yes
Simulate using
— Type of simulation to runCode generation
(default)  Interpreted execution
Type of simulation to run, specified as Code generation
or
Interpreted execution
.
Code generation
–– Simulate the model by using
generated C code. The first time you run a simulation, Simulink^{®} generates C code for the block. The C code is reused for
subsequent simulations unless the model changes. This option requires
additional startup time, but the speed of the subsequent simulations is
faster than Interpreted execution
.
Interpreted execution
–– Simulate the model by
using the MATLAB^{®} interpreter. This option requires less startup time than the
Code generation
method, but the speed of
subsequent simulations is slower. In this mode, you can debug the source
code of the block.
Data Types 

Multidimensional Signals 

VariableSize Signals 

You can configure the equalizer to operate as a symbolspaced equalizer or as a fractional symbolspaced equalizer.
To operate the equalizer at a symbolspaced rate, specify the number of
samples per symbol as 1
. Symbolrate equalizers have taps
spaced at the symbol duration. Symbolrate equalizers are sensitive to timing
phase.
To operate the equalizer at a fractional symbolspaced rate, specify the
number of input samples per symbol as an integer greater than
1
and provide an input signal oversampled at that
sampling rate. Fractional symbolspaced equalizers have taps spaced at an
integer fraction of the input symbol duration. Fractional symbolspaced
equalizers are not sensitive to timing phase.
A decision feedback equalizer (DFE) is a nonlinear equalizer that reduces intersymbol interference (ISI) in frequencyselective channels. If a null exists in the frequency response of a channel, DFEs do not enhance the noise. A DFE consists of a tapped delay line that stores samples from the input signal and contains a forward filter and a feedback filter. The forward filter is similar to a linear equalizer. The feedback filter contains a tapped delay line whose inputs are the decisions made on the equalized signal. Once per symbol period, the equalizer outputs a weighted sum of the values in the delay line and updates the weights to prepare for the next symbol period.
DFEs can be symbolspaced or fractional symbolspaced.
For a symbolspaced equalizer, the number of samples per symbol, K, is 1. The output sample rate equals the input sample rate.
For a fractional symbolspaced equalizer, the number of samples per symbol, K, is an integer greater than 1. Typically, K is 4 for fractional symbolspaced equalizers. The output sample rate is 1/T and the input sample rate is K/T. Tap weight updating occurs at the output rate.
This schematic shows a fractional symbolspaced DFE with a total of N weights, a symbol period of T, and K samples per symbol. The filter has L forward weights and NL feedback weights. The forward filter is at the top, and the feedback filter is at the bottom. If K is 1, the result is a symbolspaced DFE instead of a fractional symbolspaced DFE.
In each symbol period, the equalizer receives K input samples at the forward filter and one decision or training sample at the feedback filter. The equalizer then outputs a weighted sum of the values in the forward and feedback delay lines and updates the weights to prepare for the next symbol period.
The algorithm for the Adaptive Algorithm block in the schematic jointly optimizes the forward and feedback weights. Joint optimization is especially important for convergence in the recursive least square (RLS) algorithm.
For more information, see Equalization.
For the LMS algorithm, in the previous schematic, w is a vector of all weights w_{i}, and u is a vector of all inputs u_{i}. Based on the current set of weights, the LMS algorithm creates the new set of weights as
w_{new} = w_{current} + (StepSize) u*e.
The step size used by the adaptive algorithm is specified as a positive scalar. Increasing the
step size reduces the equalizer convergence time but causes the equalized output signal to
be less stable. To determine the maximum step size allowed when using the LMS adaptive
algorithm, use the maxstep
object
function. The * operator denotes the complex conjugate and the error calculation e = d 
y.
For the RLS algorithm, in the previous schematic, w is the vector of all weights w_{i}, and u is the vector of all inputs u_{i}. Based on the current set of inputs, u, and the inverse correlation matrix, P, the RLS algorithm first computes the Kalman gain vector, K, as
$$K=\frac{Pu}{(ForgettingFactor)+{u}^{H}Pu}.$$
The forgetting factor used by the adaptive algorithm is specified as a scalar in the range (0, 1]. Decreasing the forgetting factor reduces the equalizer convergence time but causes the equalized output signal to be less stable. H denotes the Hermitian transpose. Based on the current inverse correlation matrix, the new inverse correlation matrix is
$${P}_{\text{new}}=\frac{{P}_{\text{current}}(1K{u}^{H})}{ForgettingFactor}.$$
Based on the current set of weights, the RLS algorithm creates the new set of weights as
w_{new} = w_{current}+K*e.
The * operator denotes the complex conjugate and the error calculation e = d  y.
For the CMA adaptive algorithm, in the previous schematic, w is the vector of all weights w_{i}, and u is the vector of all inputs u_{i}. Based on the current set of weights, the CMA adaptive algorithm creates the new set of weights as
w_{new} = w_{current} + (StepSize) u*e.
The step size used by the adaptive algorithm is specified as a positive scalar. Increasing the
step size reduces the equalizer convergence time but causes the equalized output signal to
be less stable. To determine the maximum step size allowed by the CMA adaptive algorithm,
use the maxstep
object
function. The * operator denotes the complex conjugate and the error calculation
e = y(R 
y^{2}), where R is a constant related to the signal
constellation.
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.