Main Content

comm.MLSEEqualizer

Equalize using maximum likelihood sequence estimation

Description

The MLSEEqualizer object uses the Viterbi algorithm to equalize a linearly modulated signal through a dispersive channel. The object processes input frames and outputs the maximum likelihood sequence estimate (MLSE) of the signal. This processing uses an estimate of the channel modeled as a finite impulse response (FIR) filter.

To equalize a linearly modulated signal and output the maximum likelihood sequence estimate:

  1. Define and set up your maximum likelihood sequence estimate equalizer object. See Construction.

  2. Call step to equalize a linearly modulated signal and output the maximum likelihood sequence estimate according to the properties of comm.MLSEEqualizer. The behavior of step is specific to each object in the toolbox.

Note

Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.

Construction

H = comm.MLSEEqualizer creates a maximum likelihood sequence estimation equalizer (MLSEE) System object, H. This object uses the Viterbi algorithm and a channel estimate to equalize a linearly modulated signal that has been transmitted through a dispersive channel.

H = comm.MLSEEqualizer(Name,Value) creates an MLSEE object, H, with each specified property set to the specified value. You can specify additional name-value pair arguments in any order as (Name1,Value1,...,NameN,ValueN).

H = comm.MLSEEqualizer(CHANNEL,Name,Value) creates an MLSEE object, H. This object has the Channel property set to CHANNEL, and the other specified properties set to the specified values.

Properties

ChannelSource

Source of channel coefficients

Specify the source of the channel coefficients as one of Input port | Property. The default is Property.

Channel

Channel coefficients

Specify the channel as a numeric, column vector containing the coefficients of an FIR filter. The default is [1;0.7;0.5;0.3]. The length of this vector determines the memory length of the channel. This must be an integer multiple of the samples per symbol, that you specify in the SamplesPerSymbol property. This property applies when you set the ChannelSource property to Property.

Constellation

Input signal constellation

Specify the constellation of the input modulated signal as a complex vector. The default is [1+1i -1+1i -1-1i 1-1i].

TracebackDepth

Traceback depth of Viterbi algorithm

Specify the number of trellis branches (the number of symbols), the Viterbi algorithm uses to construct each traceback path. The default is 21. The traceback depth influences the decoding accuracy and delay. The decoding delay represents the number of zero symbols that precede the first decoded symbol in the output. When you set the TerminationMethod property to Continuous, the decoding delay equals the number of zero symbols of this property. When you set the TerminationMethod property to Truncated, there is no output delay.

TerminationMethod

Termination method of Viterbi algorithm

Specify the termination method of the Viterbi algorithm as one of Continuous | Truncated. The default is Truncated. When you set this property to Continuous, the object initializes the Viterbi algorithm metrics of all the states to 0 in the first call to the step method. Then, the object saves its internal state metric at the end of each frame, for use with the next frame. When you set this property to Truncated, the object resets at every frame. The Viterbi algorithm processes each frame of data independently, resetting the state metric at the end of each frame. The traceback path always starts at the state with the minimum metric. The initialization of the state metrics depends on whether you specify a preamble or postamble. If you set the PreambleSource property to None, the object initializes the metrics of all the states to 0 at the beginning of each data frame. If you set the PreambleSource property to Property, the object uses the preamble that you specify at the Preamble property, to initialize the state metrics at the beginning of each data frame. When you specify a preamble, the traceback path ends at one of the states represented by that preamble. If you set the PostambleSource property to None, the traceback path starts at the state with the smallest metric. If you set the PostambleSource property to Property, the traceback path begins at the state represented by the postamble that you specify at the Postamble property. If the postamble does not decode to a unique state, the decoder identifies the smallest of all possible decoded states that are represented by the postamble. The decoder then begins traceback decoding at that state. When you set this property to Truncated, the step method input data signal must contain at least TracebackDepth symbols, not including an optional preamble.

ResetInputPort

Enable equalizer reset input

Set this property to true to enable an additional input to the step method. The default is false. When this input is a nonzero, double-precision or logical scalar value, the object resets the states of the equalizer. This property applies when you set the TerminationMethod property to Continuous.

PreambleSource

Source of preamble

Specify the source of the preamble that is expected to precede the input signal. Choose from None | Property. The default is None. Set this property to Property to specify a preamble using the Preamble property. This property applies when you set the TerminationMethod property to Truncated.

Preamble

Preamble that precedes input signals

Specify a preamble that is expected to precede the data in the input signal as an integer, row vector. The default is [0 3 2 1]. The values of the preamble should be between 0 and M-1, where M is the length of the signal constellation that you specify in the Constellation property. An integer value of k1 in the vector corresponds to the k-th entry in the vector stored in the Constellation property. This property applies when you set the TerminationMethod property to Truncated and the PreambleSource property to Property.

PostambleSource

Source of postamble

Specify the source of the postamble that is expected to follow the input signal. Choose from None | Property. The default is None. Set this property to Property to specify a postamble in the Postamble property. This property applies when you set the TerminationMethod property to Truncated.

Postamble

Postamble that follows input signals

Specify a postamble that is expected to follow the data in the input signal as an integer row vector. The default is [0 2 3 1]. The values of the postamble should be between 0 and M1. In this case, M indicates the length of the Constellation property. An integer value of k1 in the vector corresponds to the k-th entry in the vector specified in the Constellation property. This property applies when you set the TerminationMethod property to Truncated and the PostambleSource property to Property. The default is [0 2 3 1].

SamplesPerSymbol

Number of samples per symbol

Specify the number of samples per symbol in the input signal as an integer scalar value. The default is 1.

Methods

stepEqualize using maximum likelihood sequence estimation
Common to All System Objects
release

Allow System object property value changes

reset

Reset internal states of System object

Examples

collapse all

This example shows how to use an MLSE equalizer to remove the effects of a frequency-selective channel.

Specify static channel coefficients.

chCoeffs = [.986; .845; .237; .12345+.31i];

Create an MLSE equalizer object. Create an error rate calculator object.

mlse = comm.MLSEEqualizer('TracebackDepth',10,...
    'Channel',chCoeffs,'Constellation',pskmod(0:3,4,pi/4));
errorRate = comm.ErrorRate;

The main processing loop includes these steps:

  • Data generation

  • QPSK modulation

  • Channel filtering

  • Signal equalization

  • QPSK demodulation

  • Error computation

for n = 1:50
    data= randi([0 3],100,1);
    modSignal = pskmod(data,4,pi/4,'gray');

    % Introduce channel distortion.
    chanOutput = filter(chCoeffs,1,modSignal);

    % Equalize the channel output and demodulate.
    eqSignal = mlse(chanOutput);
    demodData = pskdemod(eqSignal,4,pi/4,'gray');

    % Compute BER.
    errorStats = errorRate(data,demodData);
end

Display the bit error rate and the number of errors.

ber = errorStats(1)
numErrors = errorStats(2)
ber =

     0


numErrors =

     0

Plot the signal constellation prior to equalization.

constDiagram = comm.ConstellationDiagram;
constDiagram(chanOutput)

Plot the signal constellation after equalization.

constDiagram(eqSignal)

The equalized symbols align perfectly with the QPSK reference constellation.

Algorithms

This object implements the algorithm, inputs, and outputs described on the MLSE Equalizer block reference page. The object properties correspond to the block parameters.

Extended Capabilities

Version History

Introduced in R2012a