DFE with adaptive LMS

Started by 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