| Communications Toolbox | ![]() |
Decision-directed mode means that the equalizer uses a detected version of its output signal when adapting the weights. Adaptive equalizers typically start with a training sequence (as mentioned in Equalizing Using a Training Sequence) and switch to decision-directed mode after exhausting all symbols in the training sequence. CMA equalizers are an exception, using neither training mode nor decision-directed mode. For non-CMA equalizers, the equalize function operates in decision-directed mode when one of these conditions is true:
The syntax does not include a training sequence.
The equalizer has exhausted all symbols in the training sequence and still has more input symbols to process.
The example in Equalizing Using a Training Sequence uses training mode when processing the first trainlen symbols of the input signal, and decision-directed mode thereafter. The example below discusses another scenario.
If you invoke equalize multiple times with the same equalizer object to equalize a series of signal vectors, then you might use a training sequence the first time you call the function and omit the training sequence in subsequent calls. Each iteration of the equalize function after the first one operates completely in decision-directed mode. However, because the ResetBeforeFiltering property of the equalizer object is set to 0, the equalize function uses the existing state information in the equalizer object when starting each iteration's equalization operation. As a result, the training affects all equalization operations, not just the first.
The code below illustrates this approach. Notice that the first call to equalize uses a training sequence as an input argument, while the second call to equalize omits a training sequence.
M = 4; % Alphabet size for modulation msg = randint(1500,1,M); % Random message modmsg = pskmod(msg,M); % Modulate using QPSK. trainlen = 500; % Length of training sequence chan = [.986; .845; .237; .123+.31i]; % Channel coefficients filtmsg = filter(chan,1,modmsg); % Introduce channel distortion. % Set up equalizer. eqlms = lineareq(8, lms(0.01)); % Create an equalizer object. eqlms.SigConst = pskmod([0:M-1],M); % Set signal constellation. % Maintain continuity between calls to equalize. eqlms.ResetBeforeFiltering = 0; % Equalize the received signal, in pieces. % 1. Process the training sequence. s1 = equalize(eqlms,filtmsg(1:trainlen),modmsg(1:trainlen)); % 2. Process some of the data in decision-directed mode. s2 = equalize(eqlms,filtmsg(trainlen+1:800)); % 3. Process the rest of the data in decision-directed mode. s3 = equalize(eqlms,filtmsg(801:end)); s = [s1; s2; s3]; % Full output of equalizer
| Equalizing Using a Training Sequence | Delays from Equalization | ![]() |
© 1994-2005 The MathWorks, Inc.