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
complex weights, respectively, which are initially all zeros.
the adaptive algorithm that the equalizer uses; you should create
any of these functions:
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) specifies
the signal constellation vector of the desired output.
eqobj = dfe(nfwdweights,nfbkweights,alg,sigconst,nsamp) constructs
a DFE with a fractionally spaced forward filter. The forward filter
nfwdweights complex weights spaced at
T is the symbol period and
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.
To initialize or reset the equalizer object
|Fixed value, |
|Name of the adaptive algorithm
represented by |
|Number of weights in the
forward filter and the feedback filter, in the format |
|Number of input samples
per symbol (equivalent to |
|Reference tap index, between
1 and |
|Signal constellation, a vector whose length is typically a power of 2.|
|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.|
|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.|
|Number of samples the equalizer
processed since the last reset. When you create or reset |
|Properties specific to the
adaptive algorithm represented by ||See reference page for the
adaptive algorithm function that created |
If you change
nWeights, MATLAB maintains
consistency in the equalizer object by adjusting the values of the
properties listed below.
An example illustrating relationships among properties is in Linked Properties of an Equalizer Object.
Equalize a signal using a decison feedback equalizer with least mean square (LMS) adaptation.
Set Up Transmitter
Create a QPSK modulated transmission signal containing random message data. Pass the signal through an arbitrary channel filter to add signal distortion.
M = 4; % Alphabet size for modulation msg = randi([0 M-1],2500,1); % Random message hMod = comm.QPSKModulator('PhaseOffset',0); modmsg = hMod(msg); % Modulate using QPSK chan = [.986; .845; .237; .123+.31i]; % Channel coefficients filtmsg = filter(chan,1,modmsg); % Introduce channel distortion
Set Up Equalizer
Create a DFE object that has 5 forward taps, 3 feed-back taps. Specify the least mean square algorithm inline when creating the equalizer object. Initailize additional equalizer properties.
dfeObj = dfe(5,3,lms(0.01)); % Set the signal constellation dfeObj.SigConst = hMod((0:M-1)')'; % Maintain continuity between calls to equalize dfeObj.ResetBeforeFiltering = 0; % Define initial coefficients to help convergence dfeObj.Weights = [0 1 0 0 0 0 0 0];
Equalize Received Signal
eqRxSig = equalize(dfeObj,filtmsg);
Compare the first 200 equalized symbols (
initial) to the remaining equalized signal (
initial = eqRxSig(1:200); plot(real(initial),imag(initial),'+') hold on final = eqRxSig(end-200:end); plot(real(final),imag(final),'ro') legend('initial', 'final')
Equalization of the received signal converges within approximately 200 samples.
Apply a decision feedback equalizer (DFE) to an 8-PSK modulated signal impaired by a frequency selective channel. The DFE uses 600 training symbols.
Create a PSK modulator System object™ and set the modulation order to 8.
modulator = comm.PSKModulator('ModulationOrder',8);
Create a column vector of 8-ary random integer symbols. Seed the random number generator,
rng (MATLAB), to produce a predictable sequence of numbers.
rng(12345); data = randi([0 7],5000,1);
modulator System object to modulate the random data.
modData = modulator(data);
Create a Rayleigh channel System object to define a static frequency selective channel with four taps. Pass the modulated data through the channel object.
chan = comm.RayleighChannel('SampleRate',1000, ... 'PathDelays',[0 0.002 0.004 0.008],'AveragePathGains',[0 -3 -6 -9]); rxSig = chan(modData);
Create a DFE equalizer that has 10 feed forward taps and five feedback taps. The equalizer uses the LMS update method with a step size of 0.01.
numFFTaps = 10; numFBTaps = 5; equalizerDFE = dfe(numFFTaps,numFBTaps,lms(0.01));
SigConst property of the DFE equalizer to match the 8-PSK modulator reference constellation. The reference constellation is determined by using the
constellation method. For decision directed operation, the DFE must use the same signal constellation as the transmission scheme.
equalizerDFE.SigConst = constellation(modulator).';
Equalize the signal to remove the effects of channel distortion. Use the first 600 symbols to train the equalizer.
trainlen = 600; [eqSig,detectedSig] = equalize(equalizerDFE,rxSig, ... modData(1:trainlen));
Plot the received signal, equalizer output after training, and the ideal signal constellation.
hScatter = scatterplot(rxSig,1,trainlen,'bx'); hold on scatterplot(eqSig,1,trainlen,'g.',hScatter); scatterplot(equalizerDFE.SigConst,1,0,'m*',hScatter); legend('Received signal','Equalized signal',... 'Ideal signal constellation'); hold off
Create a PSK demodulator System object. Use the object to demodulate the received signal before and after equalization.
demod = comm.PSKDemodulator('ModulationOrder',8); demodSig = demod(rxSig); demodEqualizedSig = demod(detectedSig);
Compute the error rates for the two demodulated signals and compare the results.
errorCalc = comm.ErrorRate; nonEqualizedSER = errorCalc(data(trainlen+1:end), ... demodSig(trainlen+1:end)); reset(errorCalc) equalizedSER = errorCalc(data(trainlen+1:end), ... demodEqualizedSig(trainlen+1:end)); disp('Symbol error rates with and without equalizer:') disp([equalizedSER(1) nonEqualizedSER(1)])
Symbol error rates with and without equalizer: 0 0.5225
The equalizer helps eliminate the distortion introduced by the frequency selective channel and reduces the error rate.