Construct decision-feedback equalizer object
eqobj = dfe(nfwdweights,nfbkweights,alg)
eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst)
eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst,nsamp)
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,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.
|EqType||Fixed value, 'Decision Feedback Equalizer'|
|AlgType||Name of the adaptive algorithm represented by alg|
|nWeights||Number 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.|
|nSampPerSym||Number 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.|
|SigConst||Signal constellation, a vector whose length is typically a power of 2.|
|Weights||Vector 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.|
|WeightInputs||Vector 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.|
|ResetBeforeFiltering||If 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.|
|NumSamplesProcessed||Number 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 alg||See reference page for the adaptive algorithm function that created alg: lms, signlms, normlms, varlms, rls, or cma.|
If you change nWeights, MATLAB maintains consistency in the equalizer object by adjusting the values of the properties listed below.
|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.
Apply a decision feedback equalizer (DFE) to an 8-PSK modulated signal impaired by a frequency selector channel. The DFE uses 400 training symbols.
Set the modulation order to define 8-PSK modulation, and create a PSK modulator System object™.
M = 8; hMod = comm.PSKModulator(M);
Create a 1500-by-1 column vector of random message symbols.
msg = randi([0 M-1],1500,1);
Modulate the random message signal by calling the step method of the comm.PSKModulator System object.
modmsg = step(hMod,msg);
Define a frequency selective channel with four taps, and then pass the modulated signal through the channel, introducing channel distortion.
chan = [.986; .845; .237; .123+.31i]; filtmsg = filter(chan,1,modmsg);
Create a DFE equalizer that has 10 feed forward tabs and five feedback tabs. The equalizer uses the LMS update method with a step size of 0.01.
numFFTaps = 10; numFBTaps = 5; eq1 = dfe(numFFTaps, numFBTaps, lms(0.01));
For decision directed operation, the DFE must use the same signal constellation as the transmission scheme. Set the SigConst property to the constellation the modulator System object uses.
eq1.SigConst = step(hMod,(0:M-1)')';
Equalize the signal to help remove the effects of channel distortion. Use the first 400 symbols to train the equalizer.
trainlen = 400; [symbolest,yd] = equalize(eq1,filtmsg,modmsg(1:trainlen));
Plot the received signal, equalizer output after training, and the ideal signal constellation.
h = scatterplot(filtmsg,1,trainlen,'bx'); hold on; scatterplot(symbolest,1,trainlen,'g.',h); scatterplot(eq1.SigConst,1,0,'k*',h); legend('Filtered signal','Equalized signal',... 'Ideal signal constellation'); hold off;
Demodulate the signal at the equalizer output, and the unequalized signal at the input of the equalizer.
hDemod = comm.PSKDemodulator(8); demodmsg_noeq = step(hDemod,filtmsg); demodmsg = step(hDemod,yd);
Compute the error rates for the two demodulated signals and compare the results.
hErrorCalc = comm.ErrorRate; ser_noEq = step(hErrorCalc, ... msg(trainlen+1:end), demodmsg_noeq(trainlen+1:end)); reset(hErrorCalc) ser_Eq = step(hErrorCalc, msg(trainlen+1:end),demodmsg(trainlen+1:end)); disp('Symbol error rates with and without equalizer:') disp([ser_Eq(1) ser_noEq(1)])
The equalizer helps eliminate the distortion introduced by the frequency selective channel, and reduces the error rate.