| Communications Toolbox | ![]() |
For proper equalization using adaptive algorithms other than CMA, you should set the reference tap so that it exceeds the delay, in symbols, between the transmitter's modulator output and the equalizer input. When this condition is satisfied, the total delay between the modulator output and the equalizer output is equal to
(RefTap-1)/nSampPerSym
symbols. Because the channel delay is typically unknown, a common practice is to set the reference tap to the center tap in a linear equalizer, or the center tap of the forward filter in a decision-feedback equalizer.
For CMA equalizers, the expression above does not apply because a CMA equalizer has no reference tap. If you need to know the delay, you can find it empirically after the equalizer weights have converged. Use the xcorr function to examine cross-correlations of the modulator output and the equalizer output.
Here are some typical ways to take a delay of D into account by padding or truncating data:
Pad your original data with D extra symbols at the end. Before comparing the original data with the received data, omit the first D symbols of the received data. In this approach, all the original data (not including the padding) is accounted for in the received data.
Before comparing the original data with the received data, omit the last D symbols of the original data and the first D symbols of the received data. In this approach, some of the original symbols are not accounted for in the received data.
The example below illustrates the latter approach. For an example that illustrates both approaches in the context of interleavers, see Delays of Convolutional Interleavers.
M = 2; % Use BPSK modulation for this example. msg = randint(1000,1,M); % Random data modmsg = pskmod(msg,M); % Modulate. trainlen = 100; % Length of training sequence trainsig = modmsg(1:trainlen); % Training sequence % Define an equalizer and equalize the received signal. eqlin = lineareq(3,normlms(.0005,.0001),pskmod(0:M-1,M)); eqlin.RefTap = 2; % Set reference tap of equalizer. [eqsig,detsym] = equalize(eqlin,modmsg,trainsig); % Equalize. detmsg = pskdemod(detsym,M); % Demodulate the detected signal. % Compensate for delay introduced by RefTap. D = (eqlin.RefTap -1)/eqlin.nSampPerSym; trunc_detmsg = detmsg(D+1:end); % Omit first D symbols of equalized data. trunc_msg = msg(1:end-D); % Omit last D symbols. % Compute bit error rate, ignoring training sequence. [numerrs,ber] = biterr(trunc_msg(trainlen+1:end),... trunc_detmsg(trainlen+1:end))
The output is below.
numerrs =
0
ber =
0
| Equalizing in Decision-Directed Mode | Equalizing Using a Loop | ![]() |
© 1994-2005 The MathWorks, Inc.