N=1500; % length of the information sequence
K=2;
actual_isi=[0.0 0.8 0.6 ];
tic;
% the information sequence
for i=1:N,
if (rand<0.5),
info(i)=-1;
else
info(i)=1;
end;
end;
% the channel output
y1=filter(actual_isi,1,info);
delay=0;
y=[y1(delay+1:end) zeros(1,delay)];
% Now the equalization part follows.
fe=[0 1 0 ]; % initial estimate of ISI
fb=0;
delta=0.1;
d_k=0;
for k=1:N-K,
y_k=y(k:k+K);
if 0%(bitand(k<=500,1) )% only update conefficient of ffe part during traing stage
z_k=fe*y_k.';
if (z_k<0),
d_k=-1;
else
d_k=1;
end
e_k=d_k-z_k;
fe=fe+delta*e_k*y_k;
mse(k)=e_k^2;
if k==500
fe
fb
end
else%update conefficient of ffe and dfe during DD stage
z_k=fe*y_k.'-fb*d_k;%+
if (z_k<0),
d_k=-1;
else
d_k=1;
end
e_k=d_k-z_k;
fe=fe+delta*e_k*y_k;
fb=fb+delta*e_k*d_k;%-
mse(k)=e_k^2;
end