Forums

DFE with adaptive LMS

Started by Toivon Sarastus November 30, 2002
Hi,
I'm doing a LMS based adaptive DFE equalizer. I have a function to estimate
the channel and second function to do the equalization. It does now only the
LMS part well. Now I'm introducing the DFE.
My problem is how to set initial coefficients to the equalizer (W).

Before DFE I just inserted the channel estimate to equalizer. But with DFE
this isn't enough according to book called Digital Communications, by
Proakis.
Can someone help me and show how these initial coefficients should be set?
They should be quite good because my training sequence is only 26 bits long
as in GSM system.

Thanks in advance! function [z, h_eq ]=equ_lms(rec_sig, h_ch, N);
% Adaptive equalizer function

% z - The equalized signal
% h_eq - The equalizer tap coefficients
% rec_sig - received signal, has 26 tr_seq + 116 data bits
% h_ch - channel impulse response or its estimate, should be odd
% N - Length of the equalizer, should be odd

K = length(rec_sig); %number of symbols, is multiple of 142
z = zeros(1,142);
dataout = zeros(1,142*floor(K/142));
X = zeros(N,1); % initial memory of input vector
Z = zeros(floor(N/2),1); % delay line of decided symbols

tr_seq = [-1 -1 1 -1 -1 1 -1 1 1 1 -1 -1 -1 -1 1 -1 -1 -1 1 -1 -1 1 -1 1 1
1]'; %treining sequence
mu = 0.02; %step size parameter

% initial coefficient vector for equalizer
if (length(h_ch) < N)
W = [h_ch; zeros(len_eq - length(h_ch),1)];
else
W = h_ch;
end

for j=1:142:K-142
r = [rec_sig(j:j+141)];
for k = 1: 142, % go one 142 but frame at a time

%X = [r(k); X(1:N-1)]; % new input vector. This is for without DFE

%X =[ r(k+2), r(k+1) r(k) -z(k-1) -z(k-2)]; With DFE should look
like this
% where r is input and z the decided symbols
X = [fliplr(r(k:k+floor(N/2)))'; -Z]; % new input vector

y = X'*W; % output sample
if k<& % training sequence
d = tr_seq(k);
z(k) = d;
else % decision directed mode
d = sign(y); % symbol decision
z(k) = d; % save it
end

Z = [z Z(1:floor(L/2)-1)]; % insert the decided symbol to delay line

e = d - y; % error sample
W= W + 2*mu * e*X; % new coefficient vector

end
dataout(j:j+141) = z;
end
h_equ = W; % equalizer's coefficients
z = dataout; % output signal