% COMUNICACIONES DIGITALES
% Tema 2
% Problema Igualador Zero Forcing
% Curso 2015-2016

hce=[0.3 1 -0.2 0.1];   % Respuesta al impulso del canal discreto equivalente a igualar
%hce=[0.3*exp(1i*pi/3) 1];
n0=2;   % Tap máximo del canal (empezando por n=1)  

%% Cálculo del igualador ZF (entrenamiento)

a=[1 0 0 0 0 0 0 0];    % símbolos de entrenamiento
z=conv(a,hce);  % Señal recibida

Nc=3;   % Número de coeficientes del igualador
d0=n0-1;   % Retardo del canal
dc=1;    % Retardo del igualador

zh=[z(n0:-1:1) zeros(1,Nc-n0)];
zv=[z(n0:n0+Nc-1)];
Z=toeplitz(zv,zh)

y=[zeros(1,d0+dc-1) a];y=y(1:Nc).'
c=(inv(Z)*y).'

%% Recepción de símbolos con y sin igualador

a=[1 -1 1 1 -1 -1 -1 1 -1 1 1 1 -1];    % símbolos transmitidos
z=conv(a,hce);  % símbolos recibidos
y=conv(z,c);    % símbolos recibidos igualados
n=1:length(z);

htotal=conv(hce,c);
[maxim,cursor]=max(abs(htotal));
ISI=max(abs([htotal(1:cursor-1) htotal(cursor+1:end)]))

subplot(311);stem(z);title('Observables con ISI');grid
subplot(312);stem(y(n));title('Observables tras igualador');grid
subplot(313);stem(htotal);title('Respuesta conjunta h_T_X[n], h_C[n], h_R_X[n] y c[n]');grid

